При автоматизации документооборота и формировании печатных форм часто возникает необходимость передать клиенту или контрагенту документ в формате Microsoft Word. Если современные версии MS Word без проблем работают с файлами DOCX, то для взаимодействия со старыми версиями (Word 97–2003) может потребоваться файл с расширением .doc.
Рассмотрим особенности платформы 1С при работе с документами Word и разберем проверенные способы решения этой задачи.
В системном перечислении ТипФайлаТабличногоДокумента отсутствует вариант прямого сохранения в бинарный формат DOC. Платформа 1С «из коробки» поддерживает следующие популярные форматы для экспорта:
DOCX — современный формат документов MS Word;RTF — универсальный обогащенный текстовый формат;HTML / HTM — веб-страница;XLS / XLSX — электронные таблицы Excel;PDF — документ в формате PDF;TXT, MXL и другие.Сформировать файл с расширением .doc одной командой Записать() невозможно. Однако задачу можно решить несколькими альтернативными способами.
Проанализируем базовый подход: сначала сохраняем табличный документ во временный файл формата 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: " + ОписаниеОшибки());
КонецПопытки;
Выясним, почему формат RTF зачастую оказывается более предпочтительным решением. Формат Rich Text Format (RTF) поддерживается абсолютно всеми версиями Microsoft Word, начиная с самых ранних выпусков, а также сторонними офисными пакетами (OpenOffice, LibreOffice, MyOffice).
Главное преимущество этого способа — отсутствие необходимости устанавливать MS Office на сервер или рабочее место пользователя. Программа сохраняет файл штатным методом платформы:
ИмяФайла = "C:\ПечатныеФормы\Документ.rtf";
ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.RTF);
Пользователь сможет открыть данный файл в MS Word двойным кликом точно так же, как и обычный файл .doc.
Если печатная форма изначально представляет собой сложный текстовый документ с договором или соглашением, рекомендуется отказаться от формирования табличного документа 1С. Вместо этого в конфигурации создается макет типа ActiveDocument (шаблон MS Word).
В этом случае заполнение параметров происходит непосредственно в Word-шаблоне с помощью замен меток или обращения к bookmarks (закладкам), а готовый результат сохраняется в любом нужном формате Word.
COMОбъект("Word.Application") работает исключительно в ОС Windows при установленном пакете Microsoft Office. Этот вариант не будет работать на сервере 1С под управлением Linux или в веб-клиенте.Попытка ... Исключение и обязательно закрывайте приложение методом Quit(), иначе процессы WINWORD.EXE останутся висеть в памяти сервера или ПК.