Как программно настроить групповую печать документов из динамического списка во внешней обработке 1С

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

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

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

Почему возникает ошибка недостаточности параметров при прямом вызове?

Рассмотрим ситуацию, когда разработчик пытается вызвать метод печати напрямую из модуля менеджера документа, например:

Документы.РеализацияТоваровУслуг.Печать(МассивОбъектов);

Такой вызов приводит к ошибке выполнения. Давайте проанализируем причину. В конфигурациях, использующих БСП (начиная с версий 2.4/3.0 и выше), процедура Печать в модуле менеджера объекта имеет строго определенную сигнатуру со множеством обязательных параметров. В типовом варианте она выглядит так:


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если вам действительно необходимо выполнить программную печать на сервере без привлечения стандартных диалоговых форм БСП, вам придется инициализировать все эти параметры вручную:

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

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

Как правильно вывести стандартные команды печати на форму внешней обработки

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

Шаг 1. Создание элементов на форме.

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

Шаг 2. Инициализация команд на сервере.

В обработчике события формы ПриСозданииНаСервере мы должны настроить параметры размещения команд. Поскольку наша форма является внешней, нам нужно явно указать БСП, для какого метаданного мы хотим получить команды печати. Посмотрим на пример кода:


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

Этот код динамически заполнит ваше подменю ГруппаПечать всеми доступными командами (включая внешние печатные формы, подключенные к документу через справочник «Дополнительные отчеты и обработки»).

Шаг 3. Обработка нажатия на кнопку команды.

При генерации кнопок БСП привязывает их к стандартному клиентскому обработчику. Нам достаточно объявить на клиенте процедуру с предопределенным именем:


&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    
    // Передаем управление общему модулю БСП
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.СписокРеализаций);
    
КонецПроцедуры

Здесь крайне важен третий параметр — Источник. Давайте разберем подробнее, как правильно передавать данные динамического списка, чтобы избежать проблем с печатью единичных или множественных строк.

Решение проблемы множественного выбора (групповая печать)

Частой ошибкой при реализации печати из списков является неверное определение источника данных. Рассмотрим два варианта передачи источника в процедуру ПодключаемыеКомандыКлиент.ВыполнитьКоманду:

Вариант 1 (Неверный для групповой печати):

Источник = Элементы.СписокРеализаций.ТекущиеДанные;

В данном случае свойство ТекущиеДанные возвращает строку, на которой в данный момент установлен курсор (активная строка). Даже если пользователь выделил в списке 10 документов, на печать будет отправлен только один текущий документ. Это происходит потому, что БСП получает одиночную структуру данных вместо коллекции.

Вариант 2 (Правильный):

Источник = Элементы.СписокРеализаций;

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

Альтернативный вариант решения: Внешние печатные формы (ВПФ)

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

Для этого достаточно создать внешнюю печатную форму (ВПФ) со следующей структурой:

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

После регистрации такой обработки в режиме «1С:Предприятие» новая печатная форма автоматически появится во всех стандартных списках и формах документов реализации. При этом вам не придется вносить изменения в конфигурацию или писать код по обработке динамических списков на форме — всю рутину БСП возьмет на себя.

← На главную