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