Как организовать шаблоны печатных форм и договоров в 1С под Linux?

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

При разработке печатных форм на платформе Windows традиционным решением долгое время оставалась COM-автоматизация офисных пакетов Microsoft Word или OpenOffice/LibreOffice. Однако в среде Linux технологии COM и OLE отсутствуют. Если сервер 1С или рабочее место клиента функционирует под управлением Linux, старые механизмы прямого вызова офисных приложений работать не будут.

Разберем основные кросс-платформенные способы подготовки и заполнения шаблонов документов (например, договоров и соглашений) в 1С под Linux.

Вариант 1. Использование встроенных механизмов БСП для DOCX и ODT

В подсистеме печати «Библиотеки стандартных подсистем» (БСП) реализован кросс-платформенный механизм работы с шаблонами в форматах DOCX и ODT. Для его работы не требуется установленный на сервере Microsoft Word, LibreOffice или COM-компоненты.

Рассмотрим принцип работы данного механизма:

  1. Файлы офисных форматов DOCX и ODT физически представляют собой ZIP-архивы, внутри которых содержатся файлы разметки XML (например, document.xml в Word или content.xml в OpenOffice/LibreOffice).
  2. Платформа «1С:Предприятие» распаковывает шаблон с помощью объектов ЧтениеZipФайла, анализирует XML-структуру, находит параметры подстановки и заменяет их на реальные данные.
  3. Затем документ упаковывается обратно через ЗаписьZipФайла и выдается пользователю в виде готового бинарного файла.

Шаблоны БСП поддерживают параметры вида {v8 ИмяПараметра}, а также построчный вывод табличных частей документа.

При самостоятельной разработке или редактировании макетов DOCX важно учитывать эффект разрыва тегов в XML. При редактировании текста шаблона офисный редактор может разбить единую строку параметра на несколько XML-тегов <w:t> (например, из-за встроенной проверки орфографии или смены начертания отдельных символов). Механизмы БСП автоматически нормализуют разметку перед поиском параметров, поэтому использование штатных процедур подсистемы печати БСП предпочтительнее самописного поиска по подстроке.

Вариант 2. Использование объекта ТабличныйДокумент

Универсальным и полностью кросс-платформенным решением внутри платформы «1С:Предприятие» является стандартный макет вида ТабличныйДокумент. Разметка макета выполняется непосредственно в конфигураторе, а для вывода используются типовые области строк, колонок и параметров.

Посмотрим на пример программного заполнения и сохранения табличного документа в файл нужного формата:


ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетДоговора");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДоговора = "№ 123-А";
ОбластьШапка.Параметры.ДатаДоговора = ТекущаяДатаСеанса();
ОбластьШапка.Параметры.Контрагент = "ООО Ромашка";
ТабДокумент.Вывести(ОбластьШапка);

// Экспорт готового документа в PDF
ПутьКФайлу = "/tmp/dogovor.pdf";
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

Объект ТабличныйДокумент платформенными средствами поддерживает экспорт в форматы PDF, DOCX, XLSX, ODS и HTML через метод Записать().

Особенности использования табличных документов для многостраничного текста:

  1. Сеточная верстка: Табличный документ оптимизирован для таблиц и отчетов. При сплошном многостраничном тексте могут возникать сложности с динамическим расчетом высоты строк и плавным переносом абзацев между страницами.
  2. Шрифты на сервере Linux: Для корректного формирования и экспорта табличного документа в PDF на сервере Linux должны быть установлены системные шрифты (включая пакеты шрифтов Microsoft Core Fonts, например, msttcorefonts). Если на сервере отсутствуют используемые в макете шрифты, платформа выполнит их подмену, что может нарушить границы и форматирование страниц.

Вариант 3. Экспорт в PDF и внешняя конвертация

Если печатную форму необходимо сформировать на основе шаблона DOCX/ODT, но отдать клиенту в формате PDF, можно использовать внешнюю консольную конвертацию LibreOffice на стороне Linux-сервера.

Разберем пример вызова утилиты конвертации через метод платформы ЗапуститьПриложение:


КомандаКонвертации = "libreoffice --headless --convert-to pdf /tmp/dogovor.docx --outdir /tmp/";
ЗапуститьПриложение(КомандаКонвертации, , Истина);

Параметр --headless запускает офисный пакет в фоновом режиме без отображения графического интерфейса, генерируя итоговый файл PDF в указанном каталоге.

Вариант 4. Формирование через HTML-макеты

Еще один кросс-платформенный вариант создания сложных текстовых документов — использование HTML-шаблонов. Разметка создается с использованием стандартных тегов HTML и стилей CSS, а параметры заполняются с помощью строковых функций 1С или шаблонизаторов. Готовый HTML-документ открывается в веб-клиенте, отправляется на печать через браузерные средства или преобразуется в PDF.

Таким образом, для работы под управлением Linux оптимально использовать встроенный функционал БСП для макетов DOCX/ODT либо стандартный ТабличныйДокумент с экспортом в целевой формат.

← На главную