При разработке внешних обработок в экосистеме «1С:Предприятие» программисты часто сталкиваются с задачей вывода списка документов на форму с возможностью их последующей печати. Стандартный механизм БСП (Библиотеки стандартных подсистем) предоставляет мощные инструменты для интеграции печати, однако попытки вызвать процедуры печати напрямую часто приводят к ошибкам вроде «недостаточно параметров "ПараметрыПечати"». Кроме того, возникают сложности с реализацией множественного выбора документов для групповой отправки на принтер.
В этой статье мы подробно разберем по шагам, как правильно интегрировать подсистему печати БСП в вашу внешнюю обработку, выясним причины типичных ошибок и научимся передавать список выделенных строк управляемой формы на печать.
Рассмотрим ситуацию, когда разработчик пытается вызвать метод печати напрямую из модуля менеджера документа, например:
Документы.РеализацияТоваровУслуг.Печать(МассивОбъектов);
Такой вызов приводит к ошибке выполнения. Давайте проанализируем причину. В конфигурациях, использующих БСП (начиная с версий 2.4/3.0 и выше), процедура Печать в модуле менеджера объекта имеет строго определенную сигнатуру со множеством обязательных параметров. В типовом варианте она выглядит так:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если вам действительно необходимо выполнить программную печать на сервере без привлечения стандартных диалоговых форм БСП, вам придется инициализировать все эти параметры вручную:
УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИмяМакета").СписокЗначений для связывания объектов и печатных форм.УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода().Прямой вызов оправдан только тогда, когда вам нужно незаметно для пользователя сформировать табличный документ на сервере. Если же ваша цель — вывести стандартную кнопку «Печать» (с подменю выбора форм: УПД, Накладная, Комплект документов) на управляемую форму внешней обработки, следует использовать механизмы подключаемых команд БСП.
Попытки вручную наполнить коллекцию команд печати через метод ДобавитьКомандыПечати() и ожидать появления кнопок на форме бессмысленны, так как БСП требует явной регистрации элементов управления. Чтобы вывести стандартное меню печати документа (например, «Реализация товаров и услуг») на форму нашей внешней обработки, выполним следующие шаги.
Шаг 1. Создание элементов на форме.
В окне редактора управляемой формы нашей внешней обработки добавим в нужную командную панель новую группу с типом Группа - подменю. Присвоим ей имя, например, ГруппаПечать. Именно в это подменю БСП автоматически поместит все доступные команды печати для выбранного типа документа.
Шаг 2. Инициализация команд на сервере.
В обработчике события формы ПриСозданииНаСервере мы должны настроить параметры размещения команд. Поскольку наша форма является внешней, нам нужно явно указать БСП, для какого метаданного мы хотим получить команды печати. Посмотрим на пример кода:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Инициализируем параметры размещения подключаемых команд
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
// Явно указываем источник команд печати - документ Реализации
ПараметрыРазмещения.Источники = Метаданные.Документы.РеализацияТоваровУслуг;
// Указываем элемент формы (наше подменю), куда будут выведены кнопки
ПараметрыРазмещения.КоманднаяПанель = Элементы.ГруппаПечать;
// Подключаем команды БСП к форме
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
КонецПроцедуры
Этот код динамически заполнит ваше подменю ГруппаПечать всеми доступными командами (включая внешние печатные формы, подключенные к документу через справочник «Дополнительные отчеты и обработки»).
Шаг 3. Обработка нажатия на кнопку команды.
При генерации кнопок БСП привязывает их к стандартному клиентскому обработчику. Нам достаточно объявить на клиенте процедуру с предопределенным именем:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
// Передаем управление общему модулю БСП
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.СписокРеализаций);
КонецПроцедуры
Здесь крайне важен третий параметр — Источник. Давайте разберем подробнее, как правильно передавать данные динамического списка, чтобы избежать проблем с печатью единичных или множественных строк.
Частой ошибкой при реализации печати из списков является неверное определение источника данных. Рассмотрим два варианта передачи источника в процедуру ПодключаемыеКомандыКлиент.ВыполнитьКоманду:
Вариант 1 (Неверный для групповой печати):
Источник = Элементы.СписокРеализаций.ТекущиеДанные;
В данном случае свойство ТекущиеДанные возвращает строку, на которой в данный момент установлен курсор (активная строка). Даже если пользователь выделил в списке 10 документов, на печать будет отправлен только один текущий документ. Это происходит потому, что БСП получает одиночную структуру данных вместо коллекции.
Вариант 2 (Правильный):
Источник = Элементы.СписокРеализаций;
Когда мы передаем в качестве источника непосредственно сам элемент управления формы ТаблицаФормы (связанный с динамическим списком), клиентские механизмы БСП обращаются к свойству таблицы ВыделенныеСтроки. Система автоматически собирает массив уникальных идентификаторов (ссылок) всех выделенных пользователем документов и корректно передает их в серверную процедуру печати. В результате на экран или принтер выводится общий комплект документов для всей выделенной группы.
Если ваша задача состоит исключительно в том, чтобы расширить список печатных форм документа «Реализация товаров и услуг» новой формой, вам не обязательно создавать отдельную внешнюю обработку со своим динамическим списком. Гораздо проще и правильнее использовать механизм Дополнительных отчетов и обработок БСП.
Для этого достаточно создать внешнюю печатную форму (ВПФ) со следующей структурой:
СведенияОВнешнейОбработке(), в которой указать назначение обработки (Документ.РеализацияТоваровУслуг) и тип команды (Печатная форма).Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода), которая будет отвечать за заполнение табличного документа.После регистрации такой обработки в режиме «1С:Предприятие» новая печатная форма автоматически появится во всех стандартных списках и формах документов реализации. При этом вам не придется вносить изменения в конфигурацию или писать код по обработке динамических списков на форме — всю рутину БСП возьмет на себя.