При доработке макета внешней печатной формы (ВПФ) Универсального передаточного документа (УПД) разработчики часто сталкиваются с ситуацией, когда добавленный параметр или текст не отображается при формировании печатной формы. Рассмотрим по шагам основные причины возникновения такой проблемы, способы их устранения, а также порядок получения реквизитов документа-основания РеализацияТоваровУслуг при печати УПД из Счета-фактуры выданного.
Если в макет внешней печатной формы были внесены изменения (добавлена ячейка, задан параметр), но при формировании документа печатная форма остаётся прежней и ошибки не возникают, проанализируем следующие частые причины:
ПолучитьМакет() используется ПолучитьОбщийМакет(), система будет брать типовой макет из конфигурации, а не доработанный макет из внешнего файла ВПФ. В этом случае все изменения в макете ВПФ просто игнорируются.Область.Параметры.ИмяПараметра = Значение;.Код: [КодТовара].Разберём пример кода модуля внешней печатной формы, где выбирается макет в зависимости от даты документа. Для корректной работы внешнего объекта необходимо обращаться к внутреннему макету обработки через ПолучитьМакет():
Если ДанныеДляПечати.ДатаСчетФактуры < '20171001' Тогда
Макет = ПолучитьМакет("УниверсальныйПередаточныйДокумент");
Иначе
Макет = ПолучитьМакет("УниверсальныйПередаточныйДокумент981");
КонецЕсли;
Обратите внимание: использование метода ПолучитьОбщийМакет() заставляет платформу искать макет в метаданных самой конфигурации, игнорируя макеты, встроенные в файл внешней обработки .epf.
Посмотрим на ситуацию, когда УПД печатается из документа СчетФактураВыданный, но в печатную форму требуется вывести реквизиты из связанного документа РеализацияТоваровУслуг (например, дополнительный код, артикул или подразделение).
Так как при формировании печати из счета-фактуры контекстом является ссылка на счет-фактуру, данные реализации необходимо получать через документ-основание. Рассмотрим по шагам, как организовать получение этих данных:
ЛЕВОЕ СОЕДИНЕНИЕ с таблицей документа продажи по полю ДокументОснование.
ВЫБРАТЬ
СчетФактура.Ссылка КАК Ссылка,
Реализация.Номер КАК НомерРеализации,
Реализация.Дата КАК ДатаРеализации
ИЗ
Документ.СчетФактураВыданный КАК СчетФактура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
ПО СчетФактура.ДокументОснование = Реализация.Ссылка
ГДЕ
СчетФактура.Ссылка = &ТекущийДокумент
АктОбОказанииУслуг или ОтчетКомиссионера), перед обращением к реквизитам реализации проверяем тип объекта:
Если ТипЗнч(Шапка.ДокументОснование) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// Заполняем параметры из документа реализации
ОбластьМакета.Параметры.КодТовара = Шапка.ДокументОснование.КодДополнительный;
КонецЕсли;
Таким образом, правильное обращение к макету обработки через ПолучитьМакет() и корректное соединение с документом-основанием РеализацияТоваровУслуг позволяют вывести любые нужные данные в печатную форму УПД без ошибок.