Как сохранить и открыть табличный документ 1С в формате DOC?

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

При автоматизации документооборота и формировании печатных форм часто возникает необходимость передать клиенту или контрагенту документ в формате Microsoft Word. Если современные версии MS Word без проблем работают с файлами DOCX, то для взаимодействия со старыми версиями (Word 97–2003) может потребоваться файл с расширением .doc.

Рассмотрим особенности платформы 1С при работе с документами Word и разберем проверенные способы решения этой задачи.

Ограничения платформы 1С при экспорте

В системном перечислении ТипФайлаТабличногоДокумента отсутствует вариант прямого сохранения в бинарный формат DOC. Платформа 1С «из коробки» поддерживает следующие популярные форматы для экспорта:

  1. DOCX — современный формат документов MS Word;
  2. RTF — универсальный обогащенный текстовый формат;
  3. HTML / HTM — веб-страница;
  4. XLS / XLSX — электронные таблицы Excel;
  5. PDF — документ в формате PDF;
  6. TXT, MXL и другие.

Сформировать файл с расширением .doc одной командой Записать() невозможно. Однако задачу можно решить несколькими альтернативными способами.

Способ 1. Преобразование через COM-объект MS Word

Проанализируем базовый подход: сначала сохраняем табличный документ во временный файл формата DOCX или RTF с помощью встроенного метода 1С, а затем через COM-соединение вызываем MS Word для пересохранения файла в формат Word 97–2003 (код формата 0, соответствующий wdFormatDocument).

Рассмотрим пример кода:


// 1. Сохраняем табличный документ во временный файл DOCX
ПутьКВременномуDOCX = КаталогВременныхФайлов() + "temp_doc.docx";
ПутьКФинальномуDOC  = КаталогВременныхФайлов() + "ПечатнаяФорма.doc";

ТабличныйДокумент.Записать(ПутьКВременномуDOCX, ТипФайлаТабличногоДокумента.DOCX);

// 2. Инициализируем COM-объект MS Word
Попытка
    WordApp = Новый COMОбъект("Word.Application");
Исключение
    Сообщить("Ошибка инициализации MS Word: " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
    Возврат;
КонецПопытки;

Попытка
    WordApp.Visible = Ложь; // Скрываем окно приложения на время конвертации
    
    // Открываем созданный DOCX
    Документ = WordApp.Documents.Open(ПутьКВременномуDOCX);
    
    // Пересохраняем в формате Word 97-2003 (значение 0 соответствует wdFormatDocument)
    Документ.SaveAs(ПутьКФинальномуDOC, 0);
    
    // Закрываем документ и завершаем работу Word
    Документ.Close();
    WordApp.Quit();
    
    Сообщить("Файл успешно сохранен в формате DOC: " + ПутьКФинальномуDOC);
Исключение
    WordApp.Quit();
    Сообщить("Произошла ошибка при сохранении в DOC: " + ОписаниеОшибки());
КонецПопытки;

Способ 2. Использование формата RTF (без использования COM)

Выясним, почему формат RTF зачастую оказывается более предпочтительным решением. Формат Rich Text Format (RTF) поддерживается абсолютно всеми версиями Microsoft Word, начиная с самых ранних выпусков, а также сторонними офисными пакетами (OpenOffice, LibreOffice, MyOffice).

Главное преимущество этого способа — отсутствие необходимости устанавливать MS Office на сервер или рабочее место пользователя. Программа сохраняет файл штатным методом платформы:


ИмяФайла = "C:\ПечатныеФормы\Документ.rtf";
ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.RTF);

Пользователь сможет открыть данный файл в MS Word двойным кликом точно так же, как и обычный файл .doc.

Способ 3. Макеты типа ActiveDocument

Если печатная форма изначально представляет собой сложный текстовый документ с договором или соглашением, рекомендуется отказаться от формирования табличного документа 1С. Вместо этого в конфигурации создается макет типа ActiveDocument (шаблон MS Word).

В этом случае заполнение параметров происходит непосредственно в Word-шаблоне с помощью замен меток или обращения к bookmarks (закладкам), а готовый результат сохраняется в любом нужном формате Word.

Важные нюансы и технические ограничения

  1. Зависимость от операционной системы: Вызов COMОбъект("Word.Application") работает исключительно в ОС Windows при установленном пакете Microsoft Office. Этот вариант не будет работать на сервере 1С под управлением Linux или в веб-клиенте.
  2. Зависание процессов: При работе с COM-объектом всегда оборачивайте вызовы в блок Попытка ... Исключение и обязательно закрывайте приложение методом Quit(), иначе процессы WINWORD.EXE останутся висеть в памяти сервера или ПК.
  3. Искажение оформления: При трансляции сетки табличного документа 1С в формат Word (через RTF или DOCX) возможны сдвиги границ ячеек, изменение ширины колонок и переносы строк. Для сложных отчетов рекомендуется предварительно настраивать ширину колонок и свойства ячеек.
← На главную