К статье
Практический материал

Документы и Печать · 10 мин

Как сохранить документ Word как PDF в 1С

Как сохранить документ Word в PDF из 1С: через печатную форму, COM-объект Word.Application, виртуальный принтер и встроенные механизмы. Примеры кода и типичные ошибки.

Задача сохранить документ в формате PDF возникает в 1С постоянно: счета, акты, договоры и письма удобнее отправлять контрагентам именно в PDF — файл не «поплывёт» при открытии на другом компьютере и защищён от случайного редактирования. Если печатная форма построена на шаблоне Word, есть несколько рабочих способов получить PDF, и выбор зависит от того, где выполняется код — на клиенте или на сервере, установлен ли Microsoft Office, и нужна ли автоматизация без участия пользователя.

Простейший путь — вообще не использовать Word как конечный формат: сформировать табличный документ и сохранить его в PDF штатными средствами платформы. Но когда макет сделан именно в Word (сложная вёрстка, корпоративный шаблон от юристов), приходится конвертировать. Ниже разобраны четыре практических подхода: штатное сохранение табличного документа, экспорт через COM-объект Word, печать на виртуальный PDF-принтер и сторонние конвертеры, а также проверка результата и типичные ошибки.

Выбор способа: что учесть до написания кода

Первый вопрос — где исполняется код. На сервере 1С обычно нет установленного Microsoft Office, и устанавливать его туда не рекомендуется: COM-автоматизация Word не предназначена для многопоточной серверной работы, процессы winword.exe могут зависать и накапливаться. Поэтому серверная генерация PDF должна опираться на штатные механизмы платформы, а не на Word.

Второй вопрос — в каком виде хранится шаблон. Если печатная форма строится как табличный документ (макет типа «Табличный документ»), конвертация в PDF выполняется одной строкой кода без внешних программ. Если шаблон — файл .docx с закладками или макет ActiveDocument, вариантов два: либо перенести вёрстку в табличный макет, либо экспортировать в PDF средствами самого Word.

Третий фактор — интерактивность. В файловой базе на компьютере пользователя с установленным Word допустим COM-вызов. В клиент-серверном варианте с тонким или веб-клиентом COM-объекты недоступны, и единственный устойчивый путь — серверное формирование PDF из табличного документа.

Маршрут решения

Как выбрать действие

Печатная форма — табличный документИспользуйте метод Записать с типом PDF — работает везде, включая сервер и веб-клиент
Шаблон в Word, код на клиенте с установленным OfficeПримените ExportAsFixedFormat через COM-объект Word.Application
Шаблон в Word, код на сервере без OfficeПеренесите макет в табличный документ — COM-автоматизация Word на сервере небезопасна
Нужен разовый PDF вручную без доработокНапечатайте документ на виртуальный PDF-принтер из Word или 1С

Способ 1. Сохранение табличного документа в PDF штатно

Это основной и рекомендуемый метод. У объекта ТабличныйДокумент есть метод Записать, который принимает имя файла и тип файла. Для PDF используется значение ТипФайлаТабличногоДокумента.PDF. Метод работает на сервере, на толстом и тонком клиенте, не требует установленного Office и даёт предсказуемый результат.

ТабДок = СформироватьПечатнуюФорму(ДокументСсылка);

ТабДок.Записать("C:\Temp\Счет.pdf", ТипФайлаТабличногоДокумента.PDF);

Перед записью проверьте настройки страницы табличного документа: ориентацию, поля, масштаб и параметры автоподбора ширины. PDF формируется по тем же правилам, что и печать, поэтому если на бумаге документ обрезался, в PDF он тоже будет обрезан. Полезно прогнать документ через предварительный просмотр и убедиться, что разбиение на страницы корректное.

Для отправки по почте файл не обязательно сохранять на диск пользователя: можно записать PDF во временный файл, поместить во временное хранилище и вложить в письмо через объект ИнтернетПочтовоеСообщение. После отправки временный файл удаляется.

Способ 2. Экспорт из Word через COM-объект

Когда шаблон принципиально хранится в Word, PDF создаётся средствами самого Word. Код открывает документ через COM-объект Word.Application, заполняет закладки или параметризованные области и вызывает метод ExportAsFixedFormat, который штатно сохраняет документ как PDF. Формат PDF задаётся константой wdExportFormatPDF (числовое значение 17).

Word = Новый COMОбъект("Word.Application");

Word.Visible = Ложь;

Документ = Word.Documents.Open("C:\Шаблоны\Договор.docx");

// заполнение закладок...

Документ.ExportAsFixedFormat("C:\Temp\Договор.pdf", 17);

Документ.Close(Ложь);

Word.Quit();

Обязательно освобождайте COM-объекты в обратном порядке: сначала закрыть документ без сохранения изменений в шаблон, затем завершить приложение Word. Если код прерывается ошибкой до вызова Quit, в системе остаётся зависший невидимый процесс winword.exe, который блокирует файлы и занимает память. Оборачивайте работу с COM в попытку-исключение и завершайте Word в блоке Исключение тоже.

Учтите ограничение: этот способ требует установленного Microsoft Word на машине, где исполняется код, и работает только в толстом клиенте Windows. На сервере 1С и в веб-клиенте он неприменим.

Способ 3. Печать на виртуальный PDF-принтер

Если дорабатывать конфигурацию нельзя, PDF получают вручную через виртуальный принтер. В Windows встроен принтер «Microsoft Print to PDF»: достаточно открыть печатную форму в 1С или документ в Word, вызвать печать, выбрать этот принтер и указать имя файла. Способ подходит для разовых задач и не требует прав на изменение конфигурации.

Для пакетной обработки этот путь неудобен: каждый файл требует диалога выбора имени. Существуют виртуальные принтеры с автосохранением в заданную папку, но их установка и настройка — зона ответственности системного администратора, и в терминальной среде поведение таких принтеров нужно проверять отдельно.

Сравнение вариантов

Табличный документ + Записать(PDF)

Универсально, работает на сервере и в веб-клиенте, без Office. Ограничение: шаблон должен быть табличным макетом

COM + ExportAsFixedFormat

Сохраняет вёрстку Word один в один. Ограничение: только клиент Windows с установленным Word, не для сервера

Виртуальный PDF-принтер

Без доработок конфигурации. Ограничение: ручная операция, не подходит для автоматической рассылки

Проверка результата и контроль качества PDF

После формирования PDF убедитесь, что файл действительно создан и открывается. Программно проверяют существование файла и его размер: нулевой размер означает сбой записи. При COM-экспорте полезно проверять код возврата и отсутствие исключений, а также то, что процесс Word завершился.

Визуальная проверка тоже важна, особенно после смены шаблона: откройте несколько сформированных файлов и сравните с эталоном. Типичные дефекты — обрезанные колонтитулы, съехавшие таблицы, заменённые шрифты. Если в PDF подставился другой шрифт, значит, исходный шрифт не установлен на машине, где выполнялась конвертация: на сервере набор шрифтов часто минимальный.

Контрольные точки

Как проверить результат

Файл создан
Норма

Файл существует, размер больше нуля, открывается в просмотрщике PDF

Тревожный признак

Файл отсутствует или имеет нулевой размер — сбой записи или прав доступа

Вёрстка
Норма

Таблицы и колонтитулы на месте, разбиение страниц как в предпросмотре

Тревожный признак

Обрезанные строки, пустые страницы — проверить поля и масштаб макета

Шрифты
Норма

Текст отображается тем же шрифтом, что в шаблоне

Тревожный признак

Шрифт заменён системным — шрифт не установлен на машине конвертации

Процессы после COM-экспорта
Норма

В диспетчере задач нет лишних winword.exe

Тревожный признак

Накапливаются зависшие процессы Word — код не вызывает Quit

Типичные ошибки и ограничения

Самая частая ошибка — попытка использовать COM-объект Word на сервере или в тонком клиенте. Код падает с ошибкой создания COM-объекта либо, что хуже, зависает. Второе место занимает запись PDF в папку, куда у учётной записи сервера 1С нет прав: используйте каталоги временных файлов (ПолучитьИмяВременногоФайла) или явно выделенные сетевые папки с проверенными правами.

Ещё одна группа проблем — кодировки и пути с русскими буквами при передаче файлов между клиентом и сервером. Передавайте данные через временное хранилище, а не через прямые пути клиентской машины: сервер не видит диск C: пользователя. Наконец, не сохраняйте изменения в сам шаблон Word при экспорте — закрывайте документ с параметром «не сохранять», иначе шаблон постепенно «засоряется» данными прошлых документов.

Типичные ошибки
01
Вызов COM Word на сервере — зависшие процессы и блокировка регламентных заданий
02
Запись PDF в папку без прав у учётной записи сервера 1С — файл не создаётся
03
Передача пути клиентского диска в серверную процедуру — сервер не видит диск пользователя
04
Закрытие документа Word с сохранением — шаблон перезаписывается данными документа
05
Отсутствие Quit в блоке Исключение — невидимый winword.exe остаётся в памяти

Часто задаваемые вопросы

Можно ли сохранить в PDF без установленного Word?

Да, если печатная форма строится как табличный документ: метод Записать с типом ТипФайлаТабличногоДокумента.PDF не требует никаких внешних программ. Если же исходник — файл Word, без Word (или стороннего конвертера) корректно преобразовать его в PDF не получится.

Почему код с COM-объектом работает у бухгалтера, но не работает на сервере?

На компьютере бухгалтера установлен Microsoft Word, а на сервере 1С — нет, либо учётная запись службы сервера не имеет права запускать COM-приложения. Для серверной генерации перенесите печатную форму в табличный макет.

Как отправить PDF по электронной почте сразу после формирования?

Запишите табличный документ во временный PDF-файл, добавьте его как вложение в объект ИнтернетПочтовоеСообщение и отправьте через ИнтернетПочта. После отправки удалите временный файл. Сохранять файл в документы пользователя для этого не нужно.

Почему в PDF заменился шрифт или «поехала» вёрстка?

При конвертации используются шрифты, установленные на машине, где выполняется код. Если шрифт шаблона отсутствует на сервере, он подменяется системным, и ширина строк меняется. Установите нужные шрифты на сервер или используйте стандартные шрифты в макете.

Можно ли формировать PDF в фоне регламентным заданием?

Да, но только штатным способом — из табличного документа. Фоновое задание на сервере формирует табличный документ и записывает его в PDF, например для ночной рассылки счетов. COM-автоматизацию Word в фоновых заданиях использовать нельзя.

Чем отличается ExportAsFixedFormat от «Сохранить как PDF» в Word?

Это программный вызов того же механизма экспорта, что и команда «Сохранить как → PDF» в интерфейсе Word. Результат идентичен, но вызов из кода позволяет автоматизировать процесс без открытия окон и диалогов.

Итог

Что важно запомнить

Основной способ сохранить документ 1С в PDF — записать табличный документ с типом ТипФайлаТабличногоДокумента.PDF: это работает на клиенте и сервере без Office. Word-шаблоны конвертируйте через ExportAsFixedFormat только на клиенте с установленным Word и всегда завершайте COM-объект. Для разовых задач без доработок подойдёт виртуальный принтер Microsoft Print to PDF.