При выгрузке и редактировании макетов офисных документов (Microsoft Word и OpenOffice Writer) в современных типовых конфигурациях 1С, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, разработчики часто сталкиваются с нестандартной разметкой в виде фигурных скобок с префиксом: {v8 ИмяПараметра} или {V8 Организация}. Разберем по шагам, что представляет собой этот механизм, как устроена подсистема печати в «Библиотеке стандартных подсистем» (БСП) и как правильно создавать или дорабатывать такие шаблоны.
В конфигурациях 1С на базе БСП за вывод печатных форм в форматах .docx, .doc и .odt отвечает встроенная подсистема печати. Программная логика реализована в общих модулях УправлениеПечатью на стороне сервера и УправлениеПечатьюКлиент на стороне клиента.
Вместо использования устаревших подходов с поиском произвольных строковых конструкций подсистема БСП стандартизирует разметку шаблона. Механизм находит в документе специальные теги с префиксом v8 и заменяет их на значения соответствующих реквизитов или выводит повторяющиеся секции строк.
Рассмотрим правила разметки документа Microsoft Word, которые использует механизм печати БСП:
{v8 ИмяПараметра}. Регистр префикса не имеет значения — допустимо писать как {v8 Организация}, так и {V8 Организация}. В коде 1С этому параметру должно соответствовать одноименное свойство в структуре данных.{v8 ИмяОбласти} и {/v8 ИмяОбласти}.{v8 СтрокаТаблицы} помещается в первую ячейку строки-шаблона, а закрывающий тег {/v8 СтрокаТаблицы} — в последнюю ячейку этой же строки. Внутри ячеек строки указываются параметры колонок (например, {v8 НомерСтроки}, {v8 Номенклатура}, {v8 Количество}, {v8 Цена}). При формировании документа БСП дублирует размеченную строку для каждой записи переданной коллекции данных.Посмотрим на типовую схему работы с макетом офисного документа на стороне сервера 1С. Алгоритм сводится к получению макета, инициализации областей, подготовке данных и генерации итогового документа:
// 1. Получаем макет офисного документа из метаданных или двоичных данных
ДвоичныеДанныеМакета = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьДоговора.МакетДоговораWord");
// 2. Инициализируем структуру макета
МакетДокумента = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(
ДвоичныеДанныеМакета,
ТипМакетаПечатнойФормы.DOCX
);
// 3. Заполняем одиночные параметры шапки документа
ПараметрыШапки = Новый Структура;
ПараметрыШапки.Вставить("Организация", СсылкаНаОбъект.Организация.НаименованиеПолное);
ПараметрыШапки.Вставить("Контрагент", СсылкаНаОбъект.Контрагент.НаименованиеПолное);
ПараметрыШапки.Вставить("НомерДоговора", СсылкаНаОбъект.Номер);
ПараметрыШапки.Вставить("ДатаДоговора", Формат(СсылкаНаОбъект.Дата, "ДЛФ=DD"));
// 4. Передаем параметры в область макета и формируем печатную форму
ОбластьШапка = УправлениеПечатью.ИнициализироватьОбластьОфисногоДокумента(МакетДокумента, "Шапка");
УправлениеПечатью.ЗаполнитьПараметры(ОбластьШапка, ПараметрыШапки);
УправлениеПечатью.ПрисоединитьОбласть(МакетДокумента, ОбластьШапка);
Проанализируем распространенные сложности, с которыми можно столкнуться при настройке шаблонов Word:
{v8 ИмяПараметра} менялся шрифт, применялось частичное форматирование или сработала встроенная проверка орфографии MS Word, текстовый тег может разбиться на несколько XML-узлов <w:t>. В таком случае алгоритм поиска 1С не сможет распознать параметр целиком. Рекомендуется набирать параметры без пауз, отключать проверку правописания в документе или вставлять теги как неформатированный текст.Формат() или функций БСП перед передачей в структуру параметров..docx подсистема БСП умеет работать напрямую с XML-структурой архива документа без привлечения COM-объектов MS Office. Это позволяет быстро и стабильно формировать файлы на серверах под управлением Windows и Linux без необходимости установки пакета Microsoft Word.