Для извлечения данных из файлов формата 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 с помощью объекта ТабличныйДокумент().