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

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

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

Анализ проблемы

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

Решение: передача связанных объектов

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

Для начала, проанализируем структуру функции, которая корректно отрабатывает формирование печатной формы:


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

    ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);
    
    // Возвращаем первый сформированный табличный документ
    Возврат ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;      
КонецФункции

Важные рекомендации по реализации

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

Следуя этим рекомендациям и правильно передавая структуру объектов, вы обеспечите стабильную работу подсистемы печати, которая будет корректно обновляться вместе с конфигурацией.

← На главную