Как оценить и реализовать доработку печатной формы УПД с дополнительными реквизитами в 1С:Бухгалтерия?

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

Задачи по модификации стандартных печатных форм, таких как Универсальный передаточный документ (УПД), являются одними из самых частых в практике разработчика 1С. Казалось бы, задача примитивна: добавить пару полей и вывести их на печать. Однако, когда речь заходит о конфигурации 1С:Бухгалтерия предприятия 3.0 (БП), в игру вступают механизмы БСП, жесткие требования законодательства и нюансы обновлений. В этой статье мы проанализируем, как правильно подойти к такой задаче, сколько времени это может занять и какие технические решения будут наиболее эффективными.

Анализ технического задания и выбор стратегии

Рассмотрим исходную ситуацию: необходимо добавить реквизиты в справочник Номенклатура, в шапку и табличную часть документа Реализация (акты, накладные, УПД). По специальному флажку на форме должна подменяться стандартная печатная форма УПД на модифицированную, где добавлены новые колонки и изменен подвал для вывода итогов в разрезе ставок НДС.

Прежде всего, нам необходимо определиться с методом реализации. Разберем три основных подхода:

  1. Использование штатного механизма «Дополнительные реквизиты»: Это позволяет добавить поля без программирования. Однако штатный вывод этих полей в УПД ограничен, и для сложного макета с «итогами по НДС» этого будет недостаточно.
  2. Прямая модификация конфигурации: Быстрый, но «грязный» метод. Он усложняет последующие обновления программы и может привести к потере данных при невнимательном объединении форм.
  3. Создание расширения конфигурации: Наиболее современный и правильный метод. Мы не снимаем базу с поддержки, сохраняем возможность легкого обновления и локализуем все изменения в отдельном объекте.

Шаг 1: Добавление реквизитов через расширение

Проанализируем процесс создания реквизитов. Нам нужно добавить их в три места:

При использовании расширения важно помнить, что для отображения новых реквизитов на форме документа нам придется заимствовать саму форму ФормаДокументаОбщая или ФормаДокументаТовары. Программно добавлять элементы на форму — более надежный способ, так как это снижает вероятность конфликтов при обновлении интерфейса поставщиком.

Шаг 2: Модификация логики печати

Печать УПД в БП 3.0 реализована через менеджер печати. Выясним причину, почему это сложно: макет УПД не является статичным, он собирается динамически из множества областей. Нам нужно перехватить процедуру формирования данных.

Рассмотрим пример кода в расширении для модуля менеджера документа РеализацияТоваровУслуг. Нам нужно переопределить метод ДобавитьКомандыПечати или вмешаться в процесс формирования коллекции печатных форм:


&После("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати) Экспорт
    // Здесь мы можем добавить свою команду или изменить условия существующих
КонецПроцедуры

Однако автор задачи хочет, чтобы форма подменялась автоматически при наличии флажка. Это означает, что в процедуре печати нам нужно проверить значение реквизита ИспользоватьСвойУПД и, если оно истинно, направить поток выполнения к нашему кастомному макету.

Шаг 3: Работа с макетом и расчет итогов по НДС

Это самая трудозатратная часть. Макет УПД содержит множество скрытых параметров и строго определенные области. Разберем по шагам, как добавить секцию с итогами по НДС в подвал:

  1. Копирование макета: Скопируем стандартный макет УПД в наше расширение.
  2. Добавление колонок: Если добавляются колонки в табличную часть, придется пересчитывать ширину всех остальных колонок, чтобы документ уместился на лист А4.
  3. Расчет данных: Для вывода итогов по ставкам НДС нам потребуется написать запрос к табличной части документа. Посмотрим на пример алгоритма:

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	РеализацияТовары.СтавкаНДС КАК СтавкаНДС,
    |	СУММА(РеализацияТовары.Сумма) КАК Сумма,
    |	СУММА(РеализацияТовары.СуммаНДС) КАК СуммаНДС
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
    |ГДЕ
    |	РеализацияТовары.Ссылка = &Ссылка
    |СГРУППИРОВАТЬ ПО
    |	РеализацияТовары.СтавкаНДС";

Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
РезультатЗапроса = Запрос.Выполнить();

Полученные данные нужно будет вывести в новую область макета (например, ИтогоПоСтавкам), которую мы создадим в нижней части документа.

Сложности ЭДО и юридические риски

Важно проанализировать ситуацию с электронным документооборотом (ЭДО). Как справедливо замечено в обсуждении, формат электронного УПД строго регламентирован ФНС. Если ваш клиент захочет отправлять этот «персональный» УПД через ЭДО, стандартный визуализатор на стороне получателя все равно покажет документ по типовому шаблону.

Совет: Если данные из новых реквизитов критичны для контрагента, их следует передавать в «Информационном поле» электронного документа. Это специальные поля формата XML, предназначенные для передачи произвольных данных (артикулов, кодов складов и т.д.).

С точки зрения закона (Постановление №1137), добавлять свои поля в УПД можно. Но рекомендуется делать это так, чтобы не нарушать структуру основной части документа, которая находится в «жирной рамке». Дополнительные сведения лучше выносить в правую часть или за пределы основной формы.

Оценка трудозатрат: почему такой разброс?

В дискуссии на форуме оценки варьировались от 1 часа до 40 часов. Проанализируем, что стоит за этими цифрами:

Выясним причину, по которой опытные специалисты закладывают больше времени: они учитывают стоимость владения. Качественная доработка через расширение, использующая методы Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода), позволит клиенту обновлять программу в автоматическом режиме, не вызывая программиста каждый месяц.

Резюме

При реализации подобной задачи мы рекомендуем:

  1. Использовать только расширения.
  2. Не копировать весь модуль менеджера, а использовать аннотации &Вместо или &После для минимального вмешательства в типовой код.
  3. Помнить о динамической природе макета УПД — добавление одной колонки тянет за собой изменение всей структуры строк.
  4. Заранее уточнить у клиента необходимость передачи этих данных через ЭДО, чтобы не пришлось переделывать работу дважды.

Оптимальное время для качественной реализации данной задачи в среде 1С:Бухгалтерия 3.0 составляет от 8 до 16 рабочих часов, в зависимости от сложности логики в подвале макета.

← На главную