При автоматизации документооборота часто возникает задача сформировать печатную форму договора, подставить в нее данные из информационной базы, предоставить пользователю возможность предварительного редактирования текста, наложить факсимильную печать с подписью и сохранить итоговый документ в формате PDF. Если на сервере приложений 1С не установлен пакет Microsoft Office и нет возможности использовать COM-объект Word.Application, решение этой задачи требует выбора альтернативных механизмов.
Рассмотрим подробнее основные способы решения этой задачи, их особенности, плюсы и технические нюансы реализации.
Самый простой и надежный вариант, не требующий установки стороннего программного обеспечения на сервер — использование встроенного объекта 1С ТабличныйДокумент.
Разберем по шагам, как правильно настроить макет и форму для работы с договором:
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабличныйДокумент на форму управляемого приложения. Пользователь сможет скорректировать текст прямо в интерфейсе 1С перед сохранением. Если отредактированный вариант нужно сохранить в базе, используйте объект ХранилищеЗначения.ПроверитьВывод():
МассивСекций = Новый Массив;
МассивСекций.Добавить(СекцияТекст);
МассивСекций.Добавить(СекцияПодписиИПечать);
// Проверяем, поместятся ли секции вместе на текущую страницу
Если НЕ ТабДок.ПроверитьВывод(МассивСекций) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(СекцияТекст);
ПутьКФайлу = "C:\Contracts\Contract_123.pdf";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Важные нюансы при работе с Табличным документом:
– Разрыв длинных ячеек: В отличие от текстовых процессоров, отдельная ячейка табличного документа с включенным переносом текста не умеет автоматически разрываться посередине на стыке страниц. Если длинный абзац не помещается на остаток листа, вся строка переносится целиком. Чтобы избежать пустых полей внизу страниц, разбивайте длинный текст договора на несколько более мелких строк таблицы.
– Серверы на Linux: Если сервер 1С работает под управлением Linux, для корректной генерации PDF необходимо установить в систему шрифты Microsoft (пакет msttcorefonts, включая Arial и Times New Roman). Без них происходит подмена шрифтов, из-за чего может сдвигаться верстка и накладываться текст.
– Прозрачность рисунка: При использовании PNG-изображения факсимильной печати обязательно отключайте у рисунка заливку фона, иначе при экспорте в PDF вокруг печати может появиться белая или черная рамка.
Файл формата .docx представляет собой ZIP-архив, содержащий XML-структуру документа. Вы можете подставлять параметры в договор без запуска MS Word.
Проанализируем схему реализации:
{Контрагент}, {Сумма}.ЧтениеZipФайла и ЗаписьZipФайла.word/document.xml, в котором производиться замена меток на данные из 1С.ЗапуститьПриложение().Выясним особенности использования HTML-шаблона:
ПолеHTMLДокумента или объект ФорматированныйДокумент, что дает пользователю удобный визуальный редактор.<img src="data:image/png;base64,...">) и позиционируется поверх текста с помощью CSS-стиля position: absolute.wkhtmltopdf или браузера Chrome в headless-режиме), запускаемых из 1С с помощью команды ЗапуститьПриложение(). Для управления разрывами страниц в HTML применяются CSS-правила page-break-inside: avoid.Если задача требует быстрых результатов без привлечения стороннего ПО, оптимальным выбором является Табличный документ. Он позволяет реализовать предпросмотр, редактирование, точное позиционирование факсимильной печати и сохранение в PDF средствами платформы 1С.