При разработке внешних печатных форм или модификации типовых алгоритмов печати универсального передаточного документа (УПД) в конфигурации «1С:Управление торговлей 11» разработчики нередко сталкиваются с ситуацией: запросы в модуле менеджера документа РеализацияТоваровУслуг скорректированы, табличная часть Товары заменена на кастомную, однако на печать упорно выводятся типовые строки с исходными данными номенклатуры. Проанализируем архитектуру формирования данных для печати счетов-фактур и УПД, выясним причины такого поведения и рассмотрим корректные способы решения задачи.
В типовых решениях линейки ERP 2 / КА 2 / УТ 11 печатные формы регламентированных документов (счета-фактуры, УПД, накладные) формируются не напрямую из основной табличной части Товары. Для целей партионного учета, разделения по номерам ГТД, странам происхождения и налогообложению используется служебная табличная часть — ВидыЗапасов.
Разберем ключевые особенности этого механизма:
ВидыЗапасов (или соответствующем регистре) фиксируются ставки и суммы НДС, номера таможенных деклараций (ГТД), признак комиссионного товара и конкретный поставщик.Товары и строки ВидыЗапасов сопоставляются между собой по служебному полю КлючСвязи (или по номеру строки). При проведении документа на одну строку товара может приходиться несколько строк видов запасов (например, если списание произошло с разных партий или ГТД).ПоместитьВременнуюТаблицуТоваров или ПолучитьДанныеДляПечатнойФормыУПД) выборка идет с объединением или внутренним соединением с таблицей ВидыЗапасов. Если изменить только ТЧ Товары, но не трогать служебную таблицу, алгоритм печати продолжает вытягивать данные партий и аналитик из ВидыЗапасов.СчетФактураВыданный, который также опирается на движения и аналитики видов запасов.Если задача заключается в создании внешней печатной формы (ВПФ) с кастомным составом колонок или строк, наиболее надежным и безопасным путем является перехват готовой таблицы значений до момента ее передачи в макет.
Рассмотрим порядок действий:
ЗаполнитьТабличныйДокументУПД.Посмотрим на пример структуры вызова:
// Получаем типовую структуру данных для печати
ДанныеДляПечати = ОбработкаПечати.ПолучитьДанныеДляПечатнойФормыУПД(ПараметрыПечати, МассивОбъектов);
// Обходим полученные документы и модифицируем строки
Для Каждого СтрДокумента Из ДанныеДляПечати.ДанныеДокументов Цикл
// СтрДокумента.ТаблицаТовары содержит результирующий список строк
ТаблицаТоваров = СтрДокумента.ТаблицаТовары;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
// Применяем пользовательскую логику изменения полей
СтрокаТовара.НоменклатураНаименование = "Модифицированное наименование";
КонецЦикла;
КонецЦикла;
// Выводим данные в табличный документ
ЗаполнитьТабличныйДокументУПД(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, КомплектыПечати);
Если печатная форма переписывается полностью и логика строится на собственном пакете запросов, необходимо явно учитывать соединение с табличной частью ВидыЗапасов. Выясним, как выглядит типовое соединение таблиц в запросе печати:
ВЫБРАТЬ
Товары.Ссылка КАК Ссылка,
Товары.НомерСтроки КАК НомерСтроки,
Товары.Номенклатура КАК Номенклатура,
Товары.Количество КАК Количество,
ВидыЗапасов.НомерГТД КАК НомерГТД,
ВидыЗапасов.СтранаПроисхождения КАК СтранаПроисхождения,
ВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
ВидыЗапасов.СуммаНДС КАК СуммаНДС
ПОМЕСТИТЬ ВтТоварыИЗапасы
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ВидыЗапасов КАК ВидыЗапасов
ПО Товары.Ссылка = ВидыЗапасов.Ссылка
И Товары.КлючСвязи = ВидыЗапасов.КлючСвязи
ГДЕ
Товары.Ссылка В(&МассивДокументов)
При замене ТЧ Товары на собственную таблицу необходимо либо отказаться от соединения с ВидыЗапасов (если данные по ГТД и странам берутся из других источников), либо обеспечить корректное заполнение реквизита КлючСвязи в кастомной табличной части и актуализировать данные видов запасов при проведении документа.
При разработке в расширении конфигурации перехватывать логику формирования УПД рекомендуется с помощью аннотаций &Вместо или &После:
Документ.РеализацияТоваровУслуг переопределяем процедуру ПоместитьВременнуюТаблицуТоваров, подменяя текст запроса к источникам данных.ПечатьОбщихФорм перехватываем функцию заполнения реквизитов строки универсального документа, дополняя результирующий ТабличныйДокумент нестандартными полями.Таким образом, при работе с печатью УПД в УТ 11 необходимо всегда учитывать разделение данных между пользовательской табличной частью Товары и учетной табличной частью ВидыЗапасов.