При разработке внешних печатных форм (ВПФ) в конфигурации 1С:Бухгалтерия предприятия 3.0 (БП 3.0) разработчики часто сталкиваются с необходимостью кастомизации типовых документов, таких как Универсальный передаточный документ (УПД) или Счет-фактура. Поскольку эти формы жестко регламентированы законодательством, их программная логика сложна и распределена по нескольким модулям. В этой статье мы подробно разберем, где искать исходный код заполнения, какие функции использовать и как перенести эту логику в свою обработку.
В БП 3.0 вся логика, связанная с расчетом НДС и формированием регламентированных печатных форм, вынесена в специализированные общие модули. Рассмотрим их подробнее:
УчетНДС: Это «сердце» подсистемы. Именно здесь сосредоточены экспортные процедуры, которые собирают данные из различных документов (Реализация, Счет-фактура выданный, Корректировка реализации) и преобразуют их в формат, понятный макету.Документ.СчетФактураВыданный или Документ.РеализацияТоваровУслуг, находятся функции формирования текстов запросов. Они называются примерно так: ТекстЗапросаПечатьСчетовФактур.ПФ_MXL_УПД, ПФ_MXL_СчетФактура1137 и т.д.Проанализируем ситуацию: если нам нужно изменить алгоритм заполнения конкретного поля, нам недостаточно просто поправить макет. Нам нужно найти место, где данные помещаются в структуру параметров этого макета.
Для начала откроем общий модуль УчетНДС и воспользуемся глобальным поиском по тексту. Нас интересуют ключевые слова «Печать», «УПД» или «Универсальный». Разберем основные процедуры, которые мы обнаружим:
ПечатьУниверсальныхПередаточныхДокументов — основная функция для формирования УПД по постановлению №1137.ПодготовитьДанныеДляПечатиУниверсальногоПередаточногоДокумента — функция, подготавливающая структуру данных (шапку и табличную часть).ЗаполнитьПараметрыУПД — именно здесь происходит непосредственное сопоставление данных из выборки запроса с именами ячеек макета.Выясним причину, почему в типовом коде часто встречаются индексы вроде 981 или 534. Это номера постановлений Правительства РФ, которые вносят изменения в бланки. Для актуальных релизов БП 3.0 (с поддержкой прослеживаемости товаров) следует ориентироваться на функции с постфиксом 534.
Рассмотрим подробнее пример кода, который можно использовать в процедуре Печать внешней печатной формы. Этот код обращается к типовым механизмам конфигурации, что позволяет избежать дублирования сложной бизнес-логики.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыПечати = Новый Структура;
// Проверяем, нужно ли печатать УПД со статусом 1 (Счет-фактура + Первичный документ)
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УПДСтатус1") Тогда
// Получаем текст запроса из менеджера документа Счет-фактура выданный
ТекстЗапроса = Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(Истина, Истина, Истина);
// Формируем табличный документ с помощью типовой функции модуля УчетНДС
ТабДок = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов(
МассивОбъектов,
ОбъектыПечати,
ТекстЗапроса,
Ложь, // Статус 2? Нет, статус 1
,
ПараметрыПечати
);
// Выводим результат в коллекцию
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"УПДСтатус1",
"УПД (статус 1)",
ТабДок,
,
"ПФ_MXL_УПД"
);
КонецЕсли;
КонецПроцедуры
В данном примере мы используем УчетНДС.ПечатьУниверсальныхПередаточныхДокументов. Важно понимать, что эта функция внутри себя выполняет запрос к базе данных, создает табличный документ, находит макет и заполняет его. Если ваша задача — изменить ФИО руководителя или добавить логотип, вам придется «вклиниться» внутрь этого процесса.
Допустим, нам нужно изменить порядок вывода ответственных лиц или добавить дополнительные сведения в область подписей. Разберем по шагам, как это сделать во внешней обработке:
ПФ_MXL_УПД в свою внешнюю обработку. Переименуйте его, например, в МакетУПД_Кастом.ЗаполнитьПараметрыУПД в общем модуле может быть неэкспортной (приватной), вам придется скопировать её код в модуль вашей внешней обработки.УправлениеПечатью.Макет(...) используйте ЭтотОбъект.ПолучитьМакет("МакетУПД_Кастом").СведенияОЛицах. Типовая БП 3.0 получает эти данные через ОбщегоНазначенияБП.СведенияОЛицах. Вы можете программно подменить ФИО или должность непосредственно перед выводом в макет.Проанализируем ситуацию с современными требованиями к УПД. С 2021 года в документах обязательны колонки для прослеживаемых товаров (РНПТ, единица измерения прослеживаемости, количество). Код для обработки этих данных крайне сложен, так как он использует временные таблицы в запросах.
Если вы модифицируете ТекстЗапроса, будьте осторожны: типовой механизм УчетНДС ожидает определенный набор полей. Если вы удалите поле НомерСтроки или КоличествоПрослеживаемости, функция печати может завершиться с ошибкой или вывести пустые значения в графах 11-13.
Посмотрим на пример того, как в новых версиях вызывается печать с учетом постановления №534:
// Пример вызова для новых версий БП 3.0
ТабДок = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов1137(
МассивОбъектов,
ОбъектыПечати,
"УПД_Статус1",
ПараметрыПечати,
"534" // Версия постановления
);
Если вы «не нашли» нужную функцию, как автор сообщения на форуме, воспользуйтесь следующей методикой:
СчетФактураВыданный) в процедуре Печать.УчетНДС или ПечатьСБП, где происходит основная магия формирования документа.ВыборкаДанных — это именно те данные, которые попадут в ваш макет.Таким образом, создание внешней печатной формы УПД или Счет-фактуры в 1С:Бухгалтерии 3.0 требует глубокого понимания взаимодействия между модулем менеджера документа и общим модулем УчетНДС. Использование типовых функций позволяет сохранить соответствие печатной формы актуальному законодательству, а правильное копирование макета и процедур заполнения во внешнюю обработку дает необходимую гибкость для кастомизации под требования бизнеса.