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