Чтение файлов Microsoft Word (особенно устаревшего формата .doc) в серверном контексте 1С (например, в регламентном задании) — задача нетривиальная. В отличие от клиентского приложения, сервер работает в неинтерактивном режиме, что накладывает ряд ограничений на использование COM-объектов. Рассмотрим особенности программной работы с Word.Application на сервере и разберем по шагам, как решить эту задачу различными способами.
Рассмотрим стандартный подход, который часто используют на клиенте. Для работы на сервере программный код выглядит следующим образом:
Wk = Новый COMОбъект("Word.Application");
Wk.Visible = Ложь;
// Путь к файлу должен быть доступен пользователю, под которым запущен сервер 1С
Wk.Documents.Open("\\srv-file\Storage\Обмен\ФайлыЗагрузки\Файл_10_2025.doc");
Документ = Wk.ActiveDocument; // Обратите внимание: на сервере лучше обращаться без скобок
Для н = 1 по Документ.Sentences.Count Цикл
Текст = Документ.Sentences(н).Text;
// На сервере нельзя использовать Сообщить(), пишем в Журнал Регистрации
ЗаписьЖурналаРегистрации("ЗагрузкаДанных", УровеньЖурналаРегистрации.Информация, , , Текст);
КонецЦикла;
Документ.Close();
Wk.Quit();
Важные нюансы настройки сервера:
Если код выдает ошибку "Данная команда недоступна, так как не открыт ни один документ", проанализируем настройки системы. Изучите полное руководство по настройке DCOM и прав доступа для MS Office, где подробно описаны необходимые шаги:
Desktop по путям:
C:\Windows\SysWOW64\config\systemprofile\Desktop (для 64-битных ОС)C:\Windows\System32\config\systemprofile\Desktopdcomcnfg нужно найти "Microsoft Word Document" и на вкладке "Удостоверение" указать учетную запись пользователя, под которой запущен сервер 1С (например, USR1CV8).КопироватьФайл().Если нам нужно просто получить текстовое содержимое файла без сложного форматирования, проанализируем встроенный объект 1С ИзвлечениеТекста. Этот способ гораздо стабильнее, так как не требует запуска тяжелого процесса WINWORD.EXE. Если документы хранятся внутри системы, предварительно должна быть выполнена выгрузка прикрепленных файлов во временное хранилище.
ОбъектИзвлечения = Новый ИзвлечениеТекста("\\srv-file\Storage\Обмен\ФайлыЗагрузки\Файл.doc");
ТекстДокумента = ОбъектИзвлечения.ПолучитьТекст();
Особенности этого метода:
Для того чтобы 1С могла "понимать" формат .doc на сервере, применяется использование объекта ИзвлечениеТекста и Microsoft Office Filter Pack. Это бесплатный набор компонентов от Microsoft, который позволяет системе индексировать и извлекать текст из файлов Office. После его установки метод ИзвлечениеТекста начнет работать с .doc, .docx и .xls без установленного Word.
Посмотрим на ситуацию с точки зрения надежности. Формат .doc является бинарным и закрытым, что затрудняет работу с ним. Если есть возможность повлиять на бизнес-процесс, выясним, можно ли сменить формат источника.
ТабличныйДокумент), которые работают на сервере максимально быстро и стабильно.Если ваш сервер 1С работает под управлением Linux, использование COMОбъект невозможно. В этом случае изучите руководство по обработке документов MS Word на сервере под Linux, которое описывает использование внешних утилит, таких как LibreOffice или Antiword. Для других типов контента в этой среде также существуют специализированные инструменты.
Вызов LibreOffice осуществляется через командную строку:
// Пример конвертации через LibreOffice в режиме headless
Команда = "libreoffice --headless --convert-to txt:Text /path/to/file.doc --outdir /path/to/output/";
ЗапуститьПриложение(Команда, , Истина);
Проанализировав все варианты, можно сделать вывод: наиболее стабильным решением для сервера Windows является использование ИзвлечениеТекста с установленным Filter Pack или переход на форматы Excel/CSV. Использование COM-объекта Word допустимо только при необходимости сохранения сложного форматирования и после тщательной настройки прав доступа в ОС.