Часто при работе в 1С:УНФ возникает необходимость добавить в стандартные печатные формы, такие как "Заказ-наряд", свою собственную информацию. Классический пример — вывод номера автомобиля клиента, который был добавлен в документ как дополнительный реквизит. Однако, столкнувшись с этой задачей, многие обнаруживают, что простое добавление параметра в макет печатной формы не дает результата — поле остается пустым. Разберем, почему так происходит и какие существуют правильные способы решения этой задачи.
Чтобы понять причину, нужно проанализировать, как в 1С устроен механизм печати. Когда вы нажимаете кнопку "Печать", система не передает в макет весь документ целиком со всеми его данными. Вместо этого выполняется специальная программная процедура, которая готовит данные для печати. Эта процедура формирует структуру или таблицу значений, содержащую только ту информацию, которая предусмотрена разработчиками изначально: номер документа, дату, контрагента, список товаров и услуг и т.д. Именно эта подготовленная структура и используется для заполнения параметров в макете.
Дополнительные реквизиты, которые вы создаете в пользовательском режиме, хранятся не в самой таблице документа ЗаказНаряд, а в отдельных, служебных регистрах сведений (например, ЗначенияСвойствОбъектов). Стандартный алгоритм формирования данных для печати "не знает" о существовании вашего реквизита "НомерАвтомобиля" и, соответственно, не включает его в итоговый набор данных. Поэтому, сколько бы вы ни указывали параметр НомерАвтомобиля в макете, система не сможет найти для него значение.
Вывод: для отображения дополнительного реквизита необходимо вмешаться в процесс подготовки данных и "научить" программу получать значение вашего реквизита и добавлять его в набор данных для печати.
Рассмотрим три основных способа, как это можно сделать, от наиболее рекомендуемого к наименее желательному.
Это самый популярный, безопасный и рекомендуемый способ доработки печатных форм. ВПФ — это отдельный файл-обработка (с расширением *.epf), который подключается к базе данных и не требует изменения основной конфигурации. Это ключевое преимущество, так как ваша конфигурация остается на поддержке, и вы сможете легко устанавливать обновления.
Разберем процесс создания ВПФ по шагам:
Создание новой обработки. В режиме "Конфигуратор" создайте новую внешнюю обработку. Сохраните ее с понятным именем, например, "ЗаказНарядСНомеромАвто.epf".
Копирование стандартного макета. Найдите в дереве конфигурации нужный документ ("Заказ-наряд") и его стандартную печатную форму. Скопируйте макет этой формы в вашу внешнюю обработку. В скопированном макете добавьте новую строку или ячейку, где будет выводиться номер автомобиля. В свойствах этой ячейки укажите тип заполнения "Параметр" и имя параметра, например, НомерАвтомобиля.
Написание программного кода. Это самый важный этап. В модуле объекта вашей обработки необходимо создать и экспортировать процедуру, которая будет формировать печатную форму. Основная логика кода будет следующей:
УправлениеПечатью), чтобы не писать запрос с нуля.Подключение ВПФ в режиме "Предприятие". Сохраненную обработку необходимо подключить к информационной базе. Для этого перейдите в раздел "Настройки" → "Печатные формы, отчеты и обработки". Добавьте новую печатную форму, укажите, для какого документа она предназначена ("Заказ-наряд"), и загрузите ваш файл *.epf. После этого в меню "Печать" документа "Заказ-наряд" появится новый пункт с названием вашей формы.
Этот метод инкапсулирует всю доработку в одном файле, не затрагивая ядро системы, что делает его идеальным для дальнейшего сопровождения. Для настройки вывода любых реквизитов в пользовательском интерфейсе без самостоятельного написания кода можно использовать конструктор печатных форм для объектов 1С.
Расширения — более современный и мощный механизм доработки, который также позволяет не снимать конфигурацию с поддержки. Он позволяет "на лету" изменять поведение существующих объектов конфигурации. Для быстрой модификации типовых макетов БСП подойдёт инструмент для постобработки печатных форм с применением расширения.
Процесс доработки с помощью расширения:
Создание расширения. В конфигураторе создайте новое расширение для вашей конфигурации.
Заимствование объектов. Добавьте в расширение объект, который отвечает за формирование данных для печати. Это может быть общий модуль (например, МенеджерОбъектаЗаказНаряд или УправлениеПечатью) и сам макет печатной формы.
Изменение кода. В заимствованном модуле найдите функцию, которая формирует данные для печати. Используя аннотации &Вместо или &После, вы можете изменить ее поведение. Основная задача — модифицировать запрос, который получает данные. Вам нужно будет добавить в него левое соединение (ЛЕВОЕ СОЕДИНЕНИЕ) с регистром сведений, где хранятся дополнительные реквизиты, и получить оттуда нужное значение по ссылке на документ и наименованию реквизита.
Изменение макета. В макет, добавленный в расширение, добавьте параметр для вывода нового реквизита, как и в случае с ВПФ.
Преимущества: Позволяет вносить более глубокие изменения в логику, не ограничиваясь только печатными формами.
Недостатки: Требует более высокой квалификации разработчика по сравнению с ВПФ. После некоторых обновлений основной конфигурации может потребоваться адаптация расширения, если разработчики 1С сильно изменили заимствованные вами объекты.
Этот способ заключается в том, чтобы снять конфигурацию с поддержки ("включить возможность изменения") и внести правки непосредственно в стандартный модуль и макет печатной формы "Заказ-наряда".
Хотя на первый взгляд это может показаться самым быстрым путем, у него есть один критический недостаток:
Этот метод оправдан только в исключительных случаях, когда требуются настолько глубокие изменения, которые невозможно реализовать через расширения.
Для решения задачи вывода дополнительного реквизита в печатную форму "Заказ-наряда" оптимальным выбором является создание внешней печатной формы (ВПФ). Этот метод обеспечивает нужный результат, сохраняет конфигурацию на стандартной поддержке и является наиболее простым в реализации и сопровождении. Использование расширений — также отличная современная практика, но она может быть избыточной для такой локальной задачи и требует большего опыта.