Где найти код и как программно сформировать Счет-фактуру или УПД в 1С:Бухгалтерия 3.0

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

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

Основные модули и архитектура печати НДС

В БП 3.0 вся логика, связанная с расчетом НДС и формированием регламентированных печатных форм, вынесена в специализированные общие модули. Рассмотрим их подробнее:

  1. Общий модуль УчетНДС: Это «сердце» подсистемы. Именно здесь сосредоточены экспортные процедуры, которые собирают данные из различных документов (Реализация, Счет-фактура выданный, Корректировка реализации) и преобразуют их в формат, понятный макету.
  2. Модули менеджеров документов: В модулях менеджеров таких документов, как Документ.СчетФактураВыданный или Документ.РеализацияТоваровУслуг, находятся функции формирования текстов запросов. Они называются примерно так: ТекстЗапросаПечатьСчетовФактур.
  3. Общие макеты: В отличие от простых документов, макеты УПД и Счет-фактур хранятся не в самом документе, а в ветке Общие -> Общие макеты под именами ПФ_MXL_УПД, ПФ_MXL_СчетФактура1137 и т.д.

Проанализируем ситуацию: если нам нужно изменить алгоритм заполнения конкретного поля, нам недостаточно просто поправить макет. Нам нужно найти место, где данные помещаются в структуру параметров этого макета.

Поиск нужных функций в модуле УчетНДС

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

Выясним причину, почему в типовом коде часто встречаются индексы вроде 981 или 534. Это номера постановлений Правительства РФ, которые вносят изменения в бланки. Для актуальных релизов БП 3.0 (с поддержкой прослеживаемости товаров) следует ориентироваться на функции с постфиксом 534.

Пример программного формирования УПД во внешней обработке

Рассмотрим подробнее пример кода, который можно использовать в процедуре Печать внешней печатной формы. Этот код обращается к типовым механизмам конфигурации, что позволяет избежать дублирования сложной бизнес-логики.


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ПараметрыПечати = Новый Структура;
    
    // Проверяем, нужно ли печатать УПД со статусом 1 (Счет-фактура + Первичный документ)
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УПДСтатус1") Тогда
        
        // Получаем текст запроса из менеджера документа Счет-фактура выданный
        ТекстЗапроса = Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(Истина, Истина, Истина);
        
        // Формируем табличный документ с помощью типовой функции модуля УчетНДС
        ТабДок = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов(
            МассивОбъектов, 
            ОбъектыПечати, 
            ТекстЗапроса, 
            Ложь, // Статус 2? Нет, статус 1
            , 
            ПараметрыПечати
        );
        
        // Выводим результат в коллекцию
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм, 
            "УПДСтатус1", 
            "УПД (статус 1)", 
            ТабДок, 
            , 
            "ПФ_MXL_УПД"
        );
        
    КонецЕсли;

КонецПроцедуры

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

Как изменить заполнение конкретных полей (реквизитов)

Допустим, нам нужно изменить порядок вывода ответственных лиц или добавить дополнительные сведения в область подписей. Разберем по шагам, как это сделать во внешней обработке:

  1. Копирование макета: Скопируйте общий макет ПФ_MXL_УПД в свою внешнюю обработку. Переименуйте его, например, в МакетУПД_Кастом.
  2. Перенос логики заполнения: Поскольку функция ЗаполнитьПараметрыУПД в общем модуле может быть неэкспортной (приватной), вам придется скопировать её код в модуль вашей внешней обработки.
  3. Подмена макета в коде: В вашей копии функции печати вместо обращения к УправлениеПечатью.Макет(...) используйте ЭтотОбъект.ПолучитьМакет("МакетУПД_Кастом").
  4. Модификация данных: Найдите в коде заполнение структуры СведенияОЛицах. Типовая БП 3.0 получает эти данные через ОбщегоНазначенияБП.СведенияОЛицах. Вы можете программно подменить ФИО или должность непосредственно перед выводом в макет.

Работа с прослеживаемостью (РНПТ)

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

Если вы модифицируете ТекстЗапроса, будьте осторожны: типовой механизм УчетНДС ожидает определенный набор полей. Если вы удалите поле НомерСтроки или КоличествоПрослеживаемости, функция печати может завершиться с ошибкой или вывести пустые значения в графах 11-13.

Посмотрим на пример того, как в новых версиях вызывается печать с учетом постановления №534:


// Пример вызова для новых версий БП 3.0
ТабДок = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов1137(
    МассивОбъектов, 
    ОбъектыПечати, 
    "УПД_Статус1", 
    ПараметрыПечати, 
    "534" // Версия постановления
);

Советы по отладке

Если вы «не нашли» нужную функцию, как автор сообщения на форуме, воспользуйтесь следующей методикой:

Таким образом, создание внешней печатной формы УПД или Счет-фактуры в 1С:Бухгалтерии 3.0 требует глубокого понимания взаимодействия между модулем менеджера документа и общим модулем УчетНДС. Использование типовых функций позволяет сохранить соответствие печатной формы актуальному законодательству, а правильное копирование макета и процедур заполнения во внешнюю обработку дает необходимую гибкость для кастомизации под требования бизнеса.

← На главную