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

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

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

1. Понимание связи УПД и документа "Реализация"

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

  1. УПД со статусом "1" ("Счет-фактура и передаточный документ"): Формируется, если в документе "Реализация" выделен НДС (указана ставка НДС). В этом случае система автоматически регистрирует "Счет-фактуру выданный" на основании текущей реализации. Именно этот "Счет-фактура выданный" и будет основным источником данных для печатной формы УПД.
  2. УПД со статусом "2" ("Передаточный документ"): Формируется, если НДС в документе "Реализация" не выделен (например, операция без НДС). В этом случае отдельный "Счет-фактура выданный" не формируется, и данные для УПД берутся непосредственно из документа "Реализация". Такой УПД служит только первичным учетным документом.

Наша первостепенная задача как разработчиков ВПФ — понять, какой из этих сценариев применяется в конкретном случае, чтобы правильно найти источник данных.

2. Как получить объект "Счет-фактура выданный" на основании "Реализации"?

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

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


Функция ПолучитьСсылкуНаСФВыданнуюПоРеализации(СсылкаНаРеализацию) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    СчетФактураВыданный.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.СчетФактураВыданный КАК СчетФактураВыданный
        |ГДЕ
        |    СчетФактураВыданный.ДокументОснование = &ДокументОснование
        |    И СчетФактураВыданный.Проведен
        |
        |УПОРЯДОЧИТЬ ПО
        |    СчетФактураВыданный.Дата УБЫВ"; // Берем самый свежий, если их несколько

    Запрос.УстановитьПараметр("ДокументОснование", СсылкаНаРеализацию);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Ссылка;
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции

// Пример использования:
// Если мы находимся в модуле объекта документа "РеализацияТоваровУслуг"
// СсылкаНаТекущуюРеализацию = ЭтотОбъект.Ссылка;
// Или если у нас есть уже ссылка на документ:
// СсылкаНаТекущуюРеализацию = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ00-000001", Дата("20230101"));

// СсылкаНаСФВыданную = ПолучитьСсылкуНаСФВыданнуюПоРеализации(СсылкаНаТекущуюРеализацию);

// Если СсылкаНаСФВыданную <> Неопределено Тогда
//     Сообщить("Найдена связанная Счет-фактура выданная: " + СсылкаНаСФВыданную);
//     // Далее используем СФВыданную для получения данных
// Иначе
//     Сообщить("Связанная Счет-фактура выданная не найдена. Вероятно, УПД имеет статус 2.");
//     // Далее используем саму реализацию для получения данных
// КонецЕсли;

Таким образом, мы программно "отлавливаем" нужный объект, который будет являться основным источником данных для нашей ВПФ.

3. Источники данных и процедуры для формирования запроса

После того как мы определили, какой объект (либо "Счет-фактура выданный", либо сама "Реализация") будет источником данных, мы можем обратиться к стандартным механизмам конфигурации для получения этих данных.

3.1. Если УПД формируется на основании "Счет-фактура выданный" (Статус 1)

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

  1. ПолучитьДанныеДляПечатнойФормыСчетФактура в модуле менеджера документа СчетФактураВыданный. Эта процедура вернет структуру или табличный документ с уже подготовленными данными.
  2. Общий модуль УчетНДС, процедура ПодготовитьДанныеДляПечатиСчетовФактур. Эта процедура является более общей и может вызываться из разных мест для подготовки данных для печати счетов-фактур. Внутри она, вероятно, обратится к менеджеру документа "Счет-фактура выданный".

Для создания собственной ВПФ на основе этих данных, вы можете:

  1. Вызвать упомянутую процедуру, передав ей объект "Счет-фактура выданный".
  2. Проанализировать ее исходный код, чтобы понять структуру запросов и состав данных, которые она возвращает. Это позволит вам создать свой собственный запрос, если требуется изменить логику или добавить новые поля.

Пример гипотетического вызова:


// Предположим, у нас есть СсылкаНаСФВыданную
Если СсылкаНаСФВыданную <> Неопределено Тогда
    
    // Получаем менеджер объекта для вызова статических методов
    МенеджерСФ = Документы.СчетФактураВыданный; 
    
    // Вызываем процедуру получения данных. 
    // Обычно она ожидает массив ссылок или сам объект.
    МассивОбъектов = Новый Массив();
    МассивОбъектов.Добавить(СсылкаНаСФВыданную);
    
    // Типичный вызов (может отличаться в деталях для вашей версии БП)
    СтруктураДанныхДляПечати = МенеджерСФ.ПолучитьДанныеДляПечатнойФормыСчетФактура(МассивОбъектов);
    
    // Теперь СтруктураДанныхДляПечати содержит все необходимые данные 
    // (например, табличные части, шапку документа)
    // и может быть использована для заполнения вашего ТабличногоДокумента.

Иначе
    // Обработка случая УПД со статусом 2
КонецЕсли;

3.2. Если УПД является "чисто передаточным" (Статус 2, без НДС)

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

  1. В модуле менеджера документа РеализацияТоваровУслуг или в связанном с ним общем модуле локализации, например, РеализацияТоваровУслугЛокализация. Сообщение на форуме указывает на процедуру ПолучитьДанныеДляПечатнойФормыУПД в этом модуле.
  2. В общем модуле УчетНДС, который может иметь универсальные процедуры для формирования данных УПД независимо от наличия счета-фактуры.

Пример гипотетического вызова:


// Если СсылкаНаСФВыданную == Неопределено, значит УПД имеет статус 2.
// В этом случае данные берем из самой реализации.
// Предположим, у нас есть СсылкаНаТекущуюРеализацию

    МенеджерРеализации = Документы.РеализацияТоваровУслуг;
    
    // Поиск процедуры в модуле менеджера или локализации
    // (название может варьироваться в зависимости от версии БП)
    // Например, если есть такая процедура в РеализацияТоваровУслугЛокализация:
    СтруктураДанныхДляПечати = РеализацияТоваровУслугЛокализация.ПолучитьДанныеДляПечатнойФормыУПД(СсылкаНаТекущуюРеализацию);
    
    // Или более общий вариант через УчетНДС, если он поддерживает оба статуса
    // СтруктураДанныхДляПечати = УчетНДС.ПолучитьДанныеДляПечатиУПД(СсылкаНаТекущуюРеализацию, СтатусУПД_2);

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

4. Механизмы печати и роль ВПФ

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

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

Общая схема вызова ВПФ для печати может выглядеть так:

  1. Пользователь нажимает "Печать" в документе "Реализация".
  2. Система определяет, какая ВПФ должна быть вызвана (например, ваша ВПФ "УПД").
  3. Вызывается экспортная процедура вашей ВПФ, например, Печать(), которой передается ссылка на документ "Реализация".
  4. Внутри вашей процедуры Печать():
    1. Вы анализируете данные "Реализации", чтобы определить статус УПД (например, есть ли НДС, установлен ли флаг УПД).
    2. Если УПД со статусом 1: ищете связанный Документ.СчетФактураВыданный, как показано в п.2. Затем вызываете процедуру получения данных из менеджера СчетФактураВыданный (п.3.1).
    3. Если УПД со статусом 2: вызываете процедуру получения данных непосредственно из РеализацияТоваровУслугЛокализация или УчетНДС (п.3.2), передавая ссылку на документ "Реализация".
    4. Полученные данные (обычно в виде структуры или запроса) используются для заполнения вашего макета и формирования ТабличногоДокумента.
  5. Сформированный ТабличныйДокумент возвращается системой и отображается пользователю.

Для более глубокого понимания механизма печати, вы можете изучить код стандартных общих модулей, таких как ПечатьДокументов, УчетНДС, а также модулей менеджеров документов СчетФактураВыданный и РеализацияТоваровУслуг. Эти модули содержат весь необходимый функционал по сбору и подготовке данных для различных печатных форм, включая УПД.

Мы видим, что печать УПД из "Реализации" в 1С:БП — это комплексный процесс, который тесно связан с учетом НДС и механизмом создания "Счет-фактур выданных". Понимая эту внутреннюю логику и используя описанные процедуры и объекты, мы сможем эффективно создавать и настраивать собственные печатные формы УПД.

← На главную