Как программно распечатать УПД из документа Реализация товаров и услуг в УТ 11.4

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

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

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

Почему стандартная отладка вызывает сложности?

Как справедливо заметили участники форума, попытка пройти по шагам от кнопки "Печать" до формирования макета часто превращается в "квест". Проблема в том, что в УТ 11.4 логика печати сильно разнесена. Программа не просто берет макет и заполняет его. Она выполняет следующие действия:

  1. Формирует описание команд печати.
  2. Собирает массив объектов, которые нужно напечатать.
  3. Передает управление в общие модули подсистемы УправлениеПечатью.
  4. Вызывает менеджер соответствующего документа (или связанного документа, например, СчетФактураВыданный).
  5. Использует временные таблицы в запросах для подготовки данных.

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

Основные компоненты механизма печати

Для решения задачи нам понадобятся знания о нескольких ключевых объектах и методах:

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

Пошаговый алгоритм программного получения УПД

Рассмотрим подробнее, как написать код, который можно вставить в свою обработку или расширение для получения печатной формы.

Шаг 1. Подготовка исходных данных. Нам нужен массив ссылок на документы реализации (даже если документ один, БСП работает с массивами) и параметры печати.

Шаг 2. Инициализация коллекции. Мы должны создать структуру, которую подсистема печати заполнит данными.

Шаг 3. Вызов менеджера печати. Обратимся к модулю менеджера реализации и попросим его сформировать форму.

Рассмотрим пример кода, реализующий этот алгоритм:


// 1. Создаем массив со ссылкой на нашу реализацию
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаРеализацию);

// 2. Подготавливаем коллекцию печатных форм
// Используем стандартную функцию БСП, чтобы создать таблицу нужной структуры
ИмяМакета = "УниверсальныйПередаточныйДокумент";
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИмяМакета);

// 3. Параметры вывода и объекты печати (служебные структуры)
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечати = Новый СписокЗначений;
ПараметрыПечати = Новый Структура; 
// Можно добавить параметр ДополнитьКомплект = Истина, если это необходимо

// 4. Вызываем процедуру Печать из менеджера документа
// Обратите внимание: именно в модуле менеджера Документ.РеализацияТоваровУслуг
// описана экспортная процедура Печать()
Документы.РеализацияТоваровУслуг.Печать(
    МассивОбъектов, 
    ПараметрыПечати, 
    КоллекцияПечатныхФорм, 
    ОбъектыПечати, 
    ПараметрыВывода
);

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

Важные нюансы работы с УПД в 11.4

Проанализируем ситуацию со статусами документа. Как известно, УПД может иметь статус "1" (счет-фактура и передаточный документ) и статус "2" (только передаточный документ). Выясним причину, почему иногда вместо полноценного УПД может напечататься пустая форма или возникнуть ошибка.

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

Если вам нужно напечатать УПД именно со статусом 1, убедитесь, что:

Использование обработки ПечатьОбщихФорм

В сообщении №9 форума упоминается обработка ПечатьОбщихФорм. Это важный момент. В УТ 11 многие унифицированные формы (такие как ТОРГ-12, М-15, УПД) физически хранятся именно в этой обработке. Если вы хотите глубоко изучить, как заполняются поля макета, вам следует заглянуть в Модуль менеджера обработки ПечатьОбщихФорм.

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

Заключение

Мы выяснили, что для программной печати УПД в УТ 11.4 не нужно "изобретать велосипед". Достаточно использовать стандартный интерфейс подсистемы печати, передав корректный Идентификатор макета в менеджер документа РеализацияТоваровУслуг. Помните, что ключевым моментом является правильное заполнение КоллекцииПечатныхФорм и понимание того, что за визуализацию отвечает ТабличныйДокумент, возвращаемый в этой коллекции.

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

← На главную