Как программно вывести УПД и ТОРГ-12 из произвольной формы в 1С:УТ 11.5 через флаги

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

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

В этой статье мы подробно разберем, как реализовать механизм пакетной печати по выбранным флагам, проанализируем причины возникновения типичных ошибок вроде «Метод объекта не обнаружен (НайтиПоЗначению)» и выясним, как правильно подготовить структуру данных для менеджера печати.

Анализ проблемы: почему возникают ошибки при печати

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

Обычно разработчики совершают три критические ошибки:

  1. Инициализируют переменную ОбъектыПечати как Структура или Массив. В БСП этот параметр обязательно должен иметь тип СписокЗначений.
  2. Передают в менеджер печати ссылку на самописный документ вместо ссылки на типовой документ (Реализацию или Счет-фактуру).
  3. Не заполняют структуру ПараметрыПечати необходимыми ключами, на которые завязана логика в Обработка.ПечатьОбщихФорм.

Проанализируем ошибку Метод объекта не обнаружен (НайтиПоЗначению). Она возникает внутри общего модуля УправлениеПечатью, когда система пытается сопоставить печатную форму с конкретным объектом ссылки. Метод НайтиПоЗначению существует только у объекта типа СписокЗначений. Если вы передали туда структуру, выполнение кода прервется.

Правильная инициализация параметров печати

Для того чтобы типовой механизм печати УПД или ТОРГ-12 отработал корректно, нам необходимо подготовить среду вызова. Начнем с инициализации ключевых переменных на сервере. Разберем по шагам, как должен выглядеть программный блок.

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


// Инициализируем коллекцию и список объектов
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УПД, ТОРГ12");
ОбъектыПечати = Новый СписокЗначений; // Ключевой момент: именно СписокЗначений!

// Подготовка параметров печати
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ВыводитьУслуги", Ложь);
ПараметрыПечати.Вставить("ДополнитьПолученнымиСчетамиФактуры", Истина);

Формирование печатной формы УПД

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

Рассмотрим пример кода для вывода УПД:


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

Обратите внимание: если в ПараметрыПечати не будет ключа ДополнитьПолученнымиСчетамиФактуры, типовой код может выдать ошибку «Значение не является значением объектного типа (Свойство)», так как он пытается проверить настройки печати через метод Свойство(), предполагая, что параметры — это всегда структура.

Особенности формирования ТОРГ-12

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

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


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

Объединение документов и вывод на экран

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

Проанализируем процедуру завершения печати на клиенте:


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

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

Итоговые рекомендации

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

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

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

← На главную