Как работают шаблоны печатных форм Word в 1С:Управление торговлей 11 и БСП?

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

При выгрузке и редактировании макетов офисных документов (Microsoft Word и OpenOffice Writer) в современных типовых конфигурациях 1С, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, разработчики часто сталкиваются с нестандартной разметкой в виде фигурных скобок с префиксом: {v8 ИмяПараметра} или {V8 Организация}. Разберем по шагам, что представляет собой этот механизм, как устроена подсистема печати в «Библиотеке стандартных подсистем» (БСП) и как правильно создавать или дорабатывать такие шаблоны.

Принцип работы макетов офисных документов в БСП

В конфигурациях 1С на базе БСП за вывод печатных форм в форматах .docx, .doc и .odt отвечает встроенная подсистема печати. Программная логика реализована в общих модулях УправлениеПечатью на стороне сервера и УправлениеПечатьюКлиент на стороне клиента.

Вместо использования устаревших подходов с поиском произвольных строковых конструкций подсистема БСП стандартизирует разметку шаблона. Механизм находит в документе специальные теги с префиксом v8 и заменяет их на значения соответствующих реквизитов или выводит повторяющиеся секции строк.

Синтаксис параметров и областей в шаблонах Word

Рассмотрим правила разметки документа Microsoft Word, которые использует механизм печати БСП:

  1. Одиночные параметры: для вывода простых значений (номер документа, дата, наименование контрагента, сумма) в тексте документа создается конструкция вида {v8 ИмяПараметра}. Регистр префикса не имеет значения — допустимо писать как {v8 Организация}, так и {V8 Организация}. В коде 1С этому параметру должно соответствовать одноименное свойство в структуре данных.
  2. Повторяющиеся области (табличные части и списки): для вывода строк таблиц или повторяющихся блоков текста применяются парные теги открытия и закрытия области: {v8 ИмяОбласти} и {/v8 ИмяОбласти}.
  3. Разметка строк таблицы: если необходимо заполнить строки таблицы (например, список товаров), тег начала области {v8 СтрокаТаблицы} помещается в первую ячейку строки-шаблона, а закрывающий тег {/v8 СтрокаТаблицы} — в последнюю ячейку этой же строки. Внутри ячеек строки указываются параметры колонок (например, {v8 НомерСтроки}, {v8 Номенклатура}, {v8 Количество}, {v8 Цена}). При формировании документа БСП дублирует размеченную строку для каждой записи переданной коллекции данных.

Программный алгоритм заполнения макета

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


// 1. Получаем макет офисного документа из метаданных или двоичных данных
ДвоичныеДанныеМакета = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьДоговора.МакетДоговораWord");

// 2. Инициализируем структуру макета
МакетДокумента = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(
    ДвоичныеДанныеМакета, 
    ТипМакетаПечатнойФормы.DOCX
);

// 3. Заполняем одиночные параметры шапки документа
ПараметрыШапки = Новый Структура;
ПараметрыШапки.Вставить("Организация", СсылкаНаОбъект.Организация.НаименованиеПолное);
ПараметрыШапки.Вставить("Контрагент", СсылкаНаОбъект.Контрагент.НаименованиеПолное);
ПараметрыШапки.Вставить("НомерДоговора", СсылкаНаОбъект.Номер);
ПараметрыШапки.Вставить("ДатаДоговора", Формат(СсылкаНаОбъект.Дата, "ДЛФ=DD"));

// 4. Передаем параметры в область макета и формируем печатную форму
ОбластьШапка = УправлениеПечатью.ИнициализироватьОбластьОфисногоДокумента(МакетДокумента, "Шапка");
УправлениеПечатью.ЗаполнитьПараметры(ОбластьШапка, ПараметрыШапки);
УправлениеПечатью.ПрисоединитьОбласть(МакетДокумента, ОбластьШапка);

Подводные камни и рекомендации при создании шаблонов

Проанализируем распространенные сложности, с которыми можно столкнуться при настройке шаблонов Word:

  1. Дробление тегов в структуре XML (DOCX): формат DOCX представляет собой zip-архив с XML-файлами. Если внутри тега {v8 ИмяПараметра} менялся шрифт, применялось частичное форматирование или сработала встроенная проверка орфографии MS Word, текстовый тег может разбиться на несколько XML-узлов <w:t>. В таком случае алгоритм поиска 1С не сможет распознать параметр целиком. Рекомендуется набирать параметры без пауз, отключать проверку правописания в документе или вставлять теги как неформатированный текст.
  2. Форматирование чисел и дат: в отличие от табличных документов 1С (MXL), параметры шаблона Word не всегда форматируют переданные значения автоматически. Все преобразования дат, чисел, форматирование сумм и сумм прописью следует выполнять предварительно в коде 1С с помощью функции Формат() или функций БСП перед передачей в структуру параметров.
  3. Формирование на сервере и кроссплатформенность: для макетов современного формата .docx подсистема БСП умеет работать напрямую с XML-структурой архива документа без привлечения COM-объектов MS Office. Это позволяет быстро и стабильно формировать файлы на серверах под управлением Windows и Linux без необходимости установки пакета Microsoft Word.
← На главную