Руководство администратора

  1. Главная
  2. Документы
  3. Руководство администратора
  4. Проблемы и решения
  5. Чтение файлов XLS XLSX DOC DOCX в 1С

Чтение файлов XLS XLSX DOC DOCX в 1С

Для извлечения данных из файлов формата DOC DOCX необходимо, чтобы платформа 1С, база данных и приложение Microsoft WORD 2010 (рекомендуется как самая стабильная версия)  находились локально на одном сервере.

Чтение файлов вызывается на клиенте пользователя и использует объект тип COMОбъект(«Word.Application«). 

Существуют альтернативные варианты чтения только для файлов DOCX,  которые можно читать из XML — формата через конвертацию — восстановление c использованием ZIP без приложения Microsoft WORD.  В каждом случае всегда учитывается среда окружения операционной системы. Эти доработки выполняются по техническому заданию согласно прайс-листу.

В версии 2.0.99.23 для чтения DOCX на сервере планируется использовать новые функции из модуля ШаблоныПечатиОфисныхДокументов
Функция СФормироватьДокумент(Знач ОбъектПечати, Шаблон, УникальныйИдентификатор) Экспорт
	
	ДополнительныеПараметры = ОпределитьВспомогательныеПараметрыПечати(ОбъектПечати, Шаблон);
	
	Если НЕ ЗначениеЗаполнено(ОбъектПечати) Тогда
		ОбщегоНазначения.СообщитьПользователю(СтрШаблон(НСтр("ru='Документ по шаблону (%1) не сформирован'"), Шаблон));
		Возврат Неопределено;
	КонецЕсли;
	
	ДанныеШаблона = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Шаблон, "Ссылка,Наименование,ФайлШаблон,Назначение,НеВыделятьПоляДокументаЦветом");
	
	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();
	ПараметрыДанныхФайла.ИдентификаторФормы = УникальныйИдентификатор;
	ПараметрыДанныхФайла.ПолучатьСсылкуНаДвоичныеДанные = Истина;
	
	ДанныеФайла = РаботаСФайлами.ДанныеФайла(ДанныеШаблона.ФайлШаблон, ПараметрыДанныхФайла);
	
	СтруктураДокумента = СтруктураДокумента(ДанныеФайла, УникальныйИдентификатор);
	СтруктураДокумента.Вставить("Шаблон", Шаблон);
	
	Если СтруктураДокумента.Расширение = "docx" Тогда
		ВыбранныеПараметры = ПараметрыИзДокументаDOCX(СтруктураДокумента.ПутьКФайлу);
	ИначеЕсли СтруктураДокумента.Расширение = "odt" Тогда
		ВыбранныеПараметры = ПараметрыИзДокументаODT(СтруктураДокумента.ПутьКФайлу);
	КонецЕсли;
	
	ДополнитьСписокСклоняемыхПараметровИсходными(ВыбранныеПараметры);
	
	ОписаниеПараметров = ПолучитьЗначенияНайденныхПараметров(ОбъектПечати, ДанныеШаблона, ВыбранныеПараметры, ДополнительныеПараметры);
	
	Ошибки = Неопределено;
	
	Если СтруктураДокумента.Расширение = "docx" Тогда
		ЗаполнитьПараметрыДокументаDOCX(ДополнительныеПараметры, ОписаниеПараметров, СтруктураДокумента, Ошибки);
		ЗаписатьФайлСвязейДокументаDOCX(СтруктураДокумента);
		ЗаписатьФайлТипыКонтентаДокументаDOCX(СтруктураДокумента);
	ИначеЕсли СтруктураДокумента.Расширение = "odt" Тогда
		ЗаполнитьПараметрыДокументаODT(ДополнительныеПараметры, ОписаниеПараметров, СтруктураДокумента, Ошибки);
	КонецЕсли;
	
	ПереместитьФайл(СтруктураДокумента.ПутьКФайлуЗамены, СтруктураДокумента.ПутьКФайлу);
	
	СтруктураДокумента.ВременныеФайлы.Добавить(СтруктураДокумента.ПутьКФайлуЗамены);
	
	Если ДанныеШаблона.НеВыделятьПоляДокументаЦветом И СтруктураДокумента.Расширение = "docx" Тогда
		ОтключитьЗатемнениеПолейДокументаDOCX(СтруктураДокумента);
	КонецЕсли;
	
	УдалитьВременныеФайлы(СтруктураДокумента.ВременныеФайлы);
	
	ДвоичныеДанныеФайла = ПолучитьДвоичныеДанныеДокументаИзСтруктурыФайлов(СтруктураДокумента.КаталогСтруктураФайла, СтруктураДокумента.Расширение);
	ДанныеФайла = ПолучитьДанныеНовогоФайла(ОбъектПечати, ДанныеШаблона, СтруктураДокумента.Расширение, ДвоичныеДанныеФайла, УникальныйИдентификатор);
	
	ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки);
	
	Возврат ДанныеФайла;
	
КонецФункции


Функция ПараметрыИзДокументаDOCX(ПутьКФайлу)
	
	ПараметрыИзДокумента = Новый Массив;
	
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
	
	ПараметрыЧтенияXML = Неопределено;
	ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML);
	
	Пока ЧтениеXML.Прочитать() Цикл
		
		Если НЕ ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			Продолжить;
		КонецЕсли;
		
		ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML);
		
		Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
			
			ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML);
			
			Если НЕ ЗначениеЗаполнено(ПараметрыЧтенияXML.ИмяПараметра) Тогда
				Продолжить;
			КонецЕсли;
			
			Параметр = ПараметрыЧтенияXML.ИмяПараметра;
			РаскодироватьСпецСимволы(Параметр);
			
			Если ПараметрыИзДокумента.Найти(Параметр) = Неопределено Тогда
				ПараметрыИзДокумента.Добавить(Параметр);
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЦикла;
	
	ЧтениеXML.Закрыть();
	
	Возврат ПараметрыИзДокумента;
	
КонецФункции

Чтение файлов старого формата DOC в 1С возможно только на клиенте с  использованием компонент Microsoft Office.

Чтение  XLS XLSX  файлов доступно как на клиенте пользователя, так и на сервере 1С, (приложение клиента и приложение сервера находятся на разных машинах)

при выполнении условий:

  • Так как 1С обращается к диску из серверного модуля, то обращение происходит под тем пользователем, под которым  запущен сервер 1С.  Для чтения файлов нужно настроить права доступа к этой папке для пользователя, под которым запущен сервер.
  • Для чтения XLS XLSX на сервере необходимо создать папку C:WindowsSysWOW64configsystemprofileDesktop или C:WindowsSystem32configsystemprofileDesktop (в зависимости от разрядности вашей системы).

Чтение данных файла XLS XLSX осуществляется без Microsoft Office с помощью объекта ТабличныйДокумент().

Был ли данный материал полезен вам? Да Нет