Как добавить новое поле в печатную форму «Список перечислений» в 1С:ЗКГУ и 1С:ЗУП?

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

Разберем типичную задачу, с которой часто сталкиваются разработчики при доработке конфигураций 1С:ЗКГУ 3.1 и 1С:ЗУП 3.1. Нам необходимо вывести новое поле, например Финансирование, в типовую печатную форму Список перечислений для документа Ведомость в банк.

Зачастую начинающие программисты идут по пути наименьшего сопротивления: копируют типовой код формирования печатной формы в расширение с аннотацией &Вместо, добавляют свой запрос к базе данных, чтобы вытащить нужный реквизит, и сталкиваются с проблемой — во всех распечатанных бланках выводится одно и то же значение, даже если выделено несколько разных документов.

Давайте подробно проанализируем эту ситуацию, выясним причину такого поведения системы и рассмотрим правильные архитектурные подходы к решению задачи.

Анализ ошибки: почему выводится одно и то же значение?

Когда мы формируем печатную форму, типовые механизмы 1С передают в процедуру печати массив ссылок на выделенные документы — МассивОбъектов. Алгоритм в цикле обходит этот массив и формирует макет для каждого документа.

Если в этот алгоритм добавить собственный запрос без жесткой привязки к текущему документу, он выберет данные вообще по всем документам в базе (или первую/последнюю попавшуюся запись). В результате, при переборе документов для печати, в макет будет попадать значение из одного и того же (например, последнего) документа в выборке.

Чтобы этого избежать, запрос должен обязательно принимать массив распечатываемых объектов в качестве параметра. Посмотрим на пример корректного условия:


Запрос.Текст = 
"ВЫБРАТЬ
|    ВедомостьВБанк.Ссылка КАК ДокументСсылка,
|    ВедомостьВБанк.СтатьяФинансирования КАК Финансирование
|ИЗ
|    Документ.ВедомостьВБанк КАК ВедомостьВБанк
|ГДЕ
|    ВедомостьВБанк.Ссылка В(&МассивОбъектов)";

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

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

Почему запрос оказался вообще не нужен?

Если мы внимательно посмотрим на архитектуру документа Ведомость в банк в 1С:ЗКГУ (при включенном учете по статьям финансирования), мы обнаружим, что данные о финансировании уже находятся в самом документе. Эта аналитика может храниться либо в шапке документа, либо быть детально разбитой по строкам в табличной части Зарплата.

Так как в типовую процедуру печати уже передается МассивОбъектов, и система сама обходит эти объекты, нам совершенно не нужно делать дополнительное обращение к базе данных через SQL-запросы. Для вывода статьи финансирования достаточно обратиться к свойствам самого объекта (или его табличной части) прямо в процессе заполнения параметров макета.

Правильные способы модификации печатных форм в современных 1С

Рассмотрим методически верные подходы к добавлению новых полей в печатные формы, чтобы наши доработки были безопасными и не ломались при обновлениях конфигурации.

  1. Отказ от использования &Вместо для целых модулей. Перекрывать объемные типовые алгоритмы печати директивой &Вместо — крайне плохая практика. При обновлении 1С фирма-разработчик может добавить в типовую форму важные изменения (например, новые реквизиты, штрихкоды или изменения, связанные с законодательством). Ваш перекрытый код просто не узнает об этих изменениях, и печатная форма перестанет соответствовать стандартам.
  2. Использование директивы &После. Если вы все же решили делать доработку через расширение конфигурации, используйте аннотацию &После для процедуры, которая возвращает итоговый ТабличныйДокумент. В этом случае система отработает стандартный алгоритм, сформирует базовый макет, а вы в своей процедуре сможете просто найти нужные ячейки в уже готовом документе и точечно добавить туда текст (например, дописать статью финансирования рядом с названием организации).
  3. Создание Внешней печатной формы (ВПФ). Самым надежным и популярным решением является разработка Внешней печатной формы на базе БСП (Библиотеки стандартных подсистем). Вы копируете типовой макет и алгоритм в отдельную внешнюю обработку, добавляете туда свои поля и колонки, а затем подключаете ее в режиме предприятия (через раздел «Администрирование» -> «Печатные формы, отчеты и обработки»). Это гарантирует, что типовой код конфигурации останется нетронутым.

Особенности работы с макетом «Списка перечислений»

Типовой макет списка перечислений в 1С имеет жестко заданную структуру. При добавлении поля Финансирование важно определиться с тем, куда именно его выводить:

Применяя эти знания на практике, вы сможете безопасно и эффективно расширять функционал типовых печатных форм в 1С без написания избыточного кода и тяжелых запросов в цикле.

← На главную