При разработке или модификации печатных форм в среде 1С:Предприятие 8.3 начинающие разработчики часто сталкиваются с ситуацией, когда изменения в макете (добавление текста или полей) не отображаются при формировании документа. Типичный пример: в макете ПФ_MXL_СчетЗаказ создается шаблон для заголовка, но вместо номера и даты программа выводит пустое место. Разберем подробно, почему так происходит и как заставить данные отображаться корректно.
Многие полагают, что достаточно установить в свойствах ячейки тип заполнения Шаблон и написать текст вида Счет-договор [НомерДок] от [ДатаДок], чтобы система сама подставила нужные значения. Однако механизм печати в 1С работает иначе. Макет — это лишь «чертеж» будущей формы. Чтобы данные попали в квадратные скобки (параметры), их необходимо явно передать из программного кода в момент формирования табличного документа.
Если вы добавили новые параметры, такие как НомерДок и ДатаДок, которых не было в стандартном макете, типовой программный код о них «не знает» и игнорирует их. Наша задача — найти место, где формируется печатная форма, и дописать заполнение этих параметров или применить метод постобработки на основе БСП.
Для начала выясним, какая процедура отвечает за вывод данных в наш макет. В конфигураторе воспользуемся инструментом Глобальный поиск (сочетание клавиш Ctrl + Shift + F). В строке поиска введем имя макета: ПФ_MXL_СчетЗаказ.
Проанализируем результаты поиска. В современных конфигурациях «Бухгалтерия предприятия 3.0» код печати обычно располагается в одном из двух мест:
Печать или функции, начинающиеся со слова Сформировать.ПечатьТорговыхДокументов или УчетТорговыхОпераций.Когда мы нашли фрагмент кода, где получается область макета (обычно это делается методом ПолучитьОбласть), нам нужно добавить строки для передачи значений в наши параметры (например, если вы внедряете счет с QR-кодом). Рассмотрим пример кода, который должен присутствовать в модуле:
// Получаем область заголовка из макета
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
// Заполняем параметры, которые мы добавили в макет
// Предположим, что данные документа находятся в структуре ДанныеПечати или Шапка
ОбластьЗаголовок.Параметры.НомерДок = ДанныеПечати.Номер;
ОбластьЗаголовок.Параметры.ДатаДок = Формат(ДанныеПечати.Дата, "ДЛФ=DD");
// Выводим подготовленную область в итоговый табличный документ
ТабДок.Вывести(ОбластьЗаголовок);
Обратим внимание на важный нюанс: имена параметров в коде (после точки у объекта Параметры) должны строго совпадать с тем, что написано в квадратных скобках в макете. Если в макете указано [НомерДок], то в коде пишем Параметры.НомерДок.
Если просто передать Объект.Номер, пользователь может увидеть системный номер с кучей нулей и префиксами (например, «0000-000001»). В 1С:Бухгалтерия 3.0 принято использовать специальные функции для приведения номера к печатному виду. Проанализируем, как это сделать правильно:
Для вывода номера без лишних нулей используем функцию общего модуля:
ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер, Истина, Истина)
Для даты лучше использовать функцию Формат(), чтобы она выводилась прописью или в удобном формате, например, «15 мая 2024 г.». Для этого применяется маска "ДЛФ=DD".
Если код написан, но данные всё равно не появляются, воспользуемся отладчиком. Поставим точку останова (клавиша F9) на строке, где вызывается ПолучитьОбласть("Заголовок"). Запустим печать документа в режиме предприятия. Когда программа остановится на этой строчке:
Shift + F9), какие значения содержатся в переменных, которые вы присваиваете параметрам.ТабДок.Вывести(), иначе область просто не попадет в финальный документ.Разберем ситуацию, когда не хочется менять конфигурацию (чтобы не усложнять будущие обновления). В 1С:Бухгалтерия 3.0 есть встроенный инструмент управления макетами. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм.
Здесь можно найти нужный макет и отредактировать его визуально. Однако важно понимать: этот способ позволяет менять только оформление и статический текст. Если вы добавите новый параметр в квадратных скобках, которого нет в типовом алгоритме заполнения этой формы, он все равно останется пустым. Для вывода новых данных правка программного кода в конфигураторе (или создание внешней печатной формы) обязательна.
Для начинающих разработчиков лучшей практикой будет создание внешней печатной формы. Рассмотрим преимущества этого подхода:
Подводя итог: если в вашей печатной форме пустуют поля — ищите место заполнения Параметров в модуле менеджера документа или общем модуле печати, и убедитесь, что каждому параметру макета присвоено соответствующее значение из данных объекта.