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