Как реализовать загрузку данных из файла .doc на сервере 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Чтение файлов Microsoft Word (особенно устаревшего формата .doc) в серверном контексте 1С (например, в регламентном задании) — задача нетривиальная. В отличие от клиентского приложения, сервер работает в неинтерактивном режиме, что накладывает ряд ограничений на использование COM-объектов. Рассмотрим особенности программной работы с Word.Application на сервере и разберем по шагам, как решить эту задачу различными способами.

Метод 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, где подробно описаны необходимые шаги:

  1. Создать системные папки рабочего стола: Word требует их наличия, даже если работает в фоновом режиме. Создадим пустые папки Desktop по путям:
    • C:\Windows\SysWOW64\config\systemprofile\Desktop (для 64-битных ОС)
    • C:\Windows\System32\config\systemprofile\Desktop
  2. Настроить права DCOM: Через утилиту dcomcnfg нужно найти "Microsoft Word Document" и на вкладке "Удостоверение" указать учетную запись пользователя, под которой запущен сервер 1С (например, USR1CV8).
  3. Проверить доступ к файлу: Выясним, имеет ли учетная запись сервера 1С права на чтение сетевого ресурса. Если файлы приходят из внешних систем, может потребоваться предварительная загрузка вложенных файлов из электронной почты во временную папку. Рекомендуется сначала скопировать файл локально на сервер через КопироватьФайл().

Метод 2: Использование объекта ИзвлечениеТекста (без установки Word)

Если нам нужно просто получить текстовое содержимое файла без сложного форматирования, проанализируем встроенный объект 1С ИзвлечениеТекста. Этот способ гораздо стабильнее, так как не требует запуска тяжелого процесса WINWORD.EXE. Если документы хранятся внутри системы, предварительно должна быть выполнена выгрузка прикрепленных файлов во временное хранилище.


ОбъектИзвлечения = Новый ИзвлечениеТекста("\\srv-file\Storage\Обмен\ФайлыЗагрузки\Файл.doc");
ТекстДокумента = ОбъектИзвлечения.ПолучитьТекст();

Особенности этого метода:

Для того чтобы 1С могла "понимать" формат .doc на сервере, применяется использование объекта ИзвлечениеТекста и Microsoft Office Filter Pack. Это бесплатный набор компонентов от Microsoft, который позволяет системе индексировать и извлекать текст из файлов Office. После его установки метод ИзвлечениеТекста начнет работать с .doc, .docx и .xls без установленного Word.

Метод 3: Конвертация в современный формат (.docx или .xlsx)

Посмотрим на ситуацию с точки зрения надежности. Формат .doc является бинарным и закрытым, что затрудняет работу с ним. Если есть возможность повлиять на бизнес-процесс, выясним, можно ли сменить формат источника.

Метод 4: Работа на Linux

Если ваш сервер 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 допустимо только при необходимости сохранения сложного форматирования и после тщательной настройки прав доступа в ОС.

← На главную