Как программно вызвать печать комплекта печатных форм БСП из другого документа?

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

При разработке в конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как Управление торговлей 11 или ERP, часто возникает задача вызвать печать документов одного вида из другого. Например, из документа ЗаданиеНаПеревозку необходимо распечатать комплект документов, относящихся к связанным с ним РеализацияТоваровУслуг. Разберем по шагам, как решить эту задачу правильно.

Понимание архитектуры БСП

Прежде чем приступать к написанию кода, важно осознать разделение ответственности в БСП. Печатные формы и команды печати регистрируются в МодульМенеджера документа через процедуру ДобавитьКомандыПечати. Однако сама логика печати комплектов вынесена в общие модули, такие как УправлениеПечатьюУТКлиент. Основная сложность заключается в том, что процедура печати ожидает на вход структуру ОписаниеКоманды, которая в штатном режиме заполняется системой автоматически при клике пользователя в меню «Печать».

Решение проблемы через вызов клиентского метода

Если мы хотим инициировать печать программно (например, по нажатию своей кнопки), нам необходимо сформировать структуру ОписаниеКоманды вручную. Если этого не сделать, методы БСП не смогут идентифицировать задачу и «вылетят» с ошибкой.

Рассмотрим пример кода для вызова процедуры печати комплекта:


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

Передача дополнительных данных

Иногда требуется передать в процедуру печати специфические настройки, которые выходят за рамки стандартного массива ОбъектыПечати. В таких случаях используйте свойство ДополнительныеПараметры внутри структуры ОписаниеКоманды. Этот механизм позволяет пробросить любую структуру данных прямо в процедуру формирования печатных форм.

Использование этого метода выглядит следующим образом:


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

Далее, в вызываемой функции общего модуля, вы сможете получить доступ к этим данным через аргумент ОписаниеКоманды.ДополнительныеПараметры.

Почему не стоит менять типовой код?

При работе с БСП помните, что любая попытка «сломать» типовую логику и принудительно переписать работу команд печати может привести к проблемам при обновлении конфигурации. Лучшими практиками считаются:

  1. Использование внешних печатных форм (ВПФ) — это самый безопасный способ добавления новых форм печати в систему.
  2. Если задача требует сложной логики, лучше внедрять свои команды через механизм ДобавитьКомандыПечати, а не дублировать кнопки на форме документа.
  3. Если стандартная функциональность НастройкаПечатиКомплекта вызывает сложности, проверьте, чтобы ваш МассивОбъектов состоял из ссылок на документы, для которых в регистре сведений НастройкиПечатиОбъектов уже есть корректные записи.

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

← На главную