При разработке или доработке внешних печатных форм мы часто используем макеты в формате Microsoft Word. Это удобный инструмент, однако при попытке изменить существующий шаблон можно столкнуться с нестандартным поведением: в коде программы мы видим, что параметры заполняются, форма печатается корректно, но при открытии самого файла Word мы не видим никаких переменных. Текст выглядит обычным, а вместо параметров стоят пустые места или подставленные значения по умолчанию. Проанализируем эту ситуацию и разберем по шагам, как правильно настроить редактор и управлять переменными.
Шаблоны Word, которые взаимодействуют с 1С, используют не простой текст, а специальные системные поля (коды полей). По умолчанию текстовый процессор скрывает их программный код и показывает только результат вычисления (либо пустоту, если поле еще не заполнено). Поэтому, когда мы выгружаем макет из обработки и открываем его, мы не видим привычных фигурных скобок с наименованиями параметров. Рассмотрим несколько способов отображения таких скрытых элементов.
Для мгновенного отображения всех скрытых переменных в документе не обязательно искать глубокие настройки. Давайте воспользуемся встроенными комбинациями клавиш.
Теперь параметры будут выглядеть примерно так: { DOCVARIABLE Контрагент } или { MERGEFIELD Организация }. Если нужно вернуть обычный вид документа, просто нажмите эту комбинацию повторно.
Если вы хотите, чтобы поля всегда подсвечивались или отображались особым образом, давайте настроим параметры самого приложения.
Разберем типичную ошибку начинающих разработчиков. Если вы просто наберете на клавиатуре фигурные скобки и напишете внутри имя переменной, программа воспримет это как обычный текст. 1С не сможет найти такой параметр при формировании печатной формы. Создадим новую переменную правильно.
Использование горячих клавиш:
DOCVARIABLE СуммаДокумента.Использование меню Word:
DocVariable или MergeField.В зависимости от архитектуры вашей обработки, платформа ищет в шаблоне определенные объекты. Рассмотрим подробнее основные типы:
Если вы разрабатываете печатную форму для современной конфигурации, настоятельно рекомендуется использовать стандартные механизмы Библиотеки стандартных подсистем. В этом случае макет Word загружается в обработку как "Двоичные данные". Платформа автоматически переберет все поля макета и заполнит их из структуры, которую вы подготовите в модуле.
Посмотрим на пример того, как формируются данные для заполнения такого макета:
Функция ПолучитьДанныеДляПечати(СсылкаНаДокумент)
ДанныеПечати = Новый Структура;
// Имена ключей структуры должны совпадать с именами полей в Word
ДанныеПечати.Вставить("Организация", СсылкаНаДокумент.Организация.Наименование);
ДанныеПечати.Вставить("Контрагент", СсылкаНаДокумент.Контрагент.Наименование);
ДанныеПечати.Вставить("СуммаДокумента", СсылкаНаДокумент.СуммаДокумента);
ДанныеПечати.Вставить("ДатаДокумента", Формат(СсылкаНаДокумент.Дата, "ДЛФ=DD"));
Возврат ДанныеПечати;
КонецФункции
В данном случае, если в вашем шаблоне Word создано поле { MERGEFIELD СуммаДокумента }, подсистема печати сама найдет его и подставит значение из ключа СуммаДокумента нашей структуры. Это значительно упрощает код и делает поддержку внешних печатных форм более предсказуемой.
Используя описанные методы настройки редактора и понимая механику работы полей, вы сможете легко дорабатывать любые шаблоны Word, добавлять новые параметры и быстро находить скрытые ошибки в макетах.