Данная обработка состоит из 2х внешних обработок: ПакетнаяПечатьПоСпискуДокументов.epf и ВызовПакетнойПечати.epf
Первая обработка является полноценной разработкой, позволяющей выполнить пакетную печать или сохранение произвольных (штатных и печатных форм, добавленных через внешние обработки) печатных форм документов, перечисленных на "Документы"
Вторая - это рабочий пример, позволяющий вызвать и передать в Пакетную печать список документов "Реализация товаров и услуг" из списка документов. Разработка аналогичных обработок для других документов имеет минимальную трудоемкость и позволяет передать любые документы, с подключенными печатными формами, работающими через штатные механизмы БСП.
Установка
1. Добавьте внешнюю обработку ПакетнаяПечатьПоСпискуДокументов.epf в Дополнительные отчеты и обработки
Обратите внимание, что размещение "Не определено", т.е. интерактивный вызов это обработки не предусмотрен, хотя и не запрещен
2.Добавьте внешнюю обработку ВызовПакетнойПечати.epf в Дополнительные отчеты и обработки
Обратите внимание, что эта обработка уже запускается из списка документов "Реализация товаров и услуг"
В принципе, на этом и вся установка!
В список печатных форм документов Реализация товаров и услуг добавилась "*Пакетная печать". Вызовом этой обработки нужно выделить документы, которые планируется напечатать (или сохранить)
Описание работы обработки ПакетнаяПечатьПоСпискуДокументов.epf
После вызова обработки *Пакетная печать автоматически открывается обработка ПакетнаяПечатьПоСпискуДокументов с уже заполненными документами для печати
В принципе, документы можно добавлять и вручную через кнопку "Добавить". В этом случае после добавления всех документов нужно нажать кнопку "Обновить список печатных форм". При переходе из списка документов "Реализация товаров и услуг" документы на этой вкладки и выполнение "Обновить список печатных форм" происходит автоматически. В таблице есть колонка "Номер пакета" она используется при включенной опции "Разобрать по копиям". Следует указывать одну и ту же цифру для документов, которые следует обрабатывать как единый документ, в частности "Реализацию товаров и услуг" и "Счет покупателю", созданные для этой реализации следует объединять в один пакет.
Далее необходимо выбрать список печатных форм выбранных документов
Список доступных печатных форм совпадает со списков печатных форм доступных в меню "Печать". Обращаю внимание, что не все печатные формы доступные для печати, так как в процессе вызова может происходить перенаправление, запрос доп. параметров и др. В этом случае, необходимо вносить корректировки в обработку.
Таким образом доступны все печатных формы, которые были добавлены самостоятельно и не входили в штатную поставку.
На этой вкладке необходимо поставить метку на напротив интересующих Вас печатных форм, указать количество экземпляров и сортировку для печати. При необходимости можно сохранить настройки
На вкладке "Настройка печати" необходимо указать Вариант вывода печатной форма при необходимости заполнить другие настройки на вкладке.
После заполнения параметров необходимо нажать либо "ПЕЧАТЬ" (в верхнем ЛЕВОМ углу) или "Печать на один лист" (в верхнем ПРАВОМ углу) При нажатии на кнопку "ПЕЧАТЬ" каждая печатная форма выводится или сохраняется, как отдельный документ.
При нажатии "Печать на один лист" все печатные формы выводятся в один документ, с помощью этой кнопки решалась задача вывода УПД и Счета на один лист для экономии бумаги.
Описание работы обработки ВызовПакетнойПечати.epf
&НаСервере
Функция ПодключитьВнешняяОбработкаПакетнаяПечать()
ИмяОбработки=Неопределено;
ПакетнаяПечатьРеестраНачислений=Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПакетнаяПечатьПоСпискуДокументов",Истина);
Если НЕ ПакетнаяПечатьРеестраНачислений.Пустая() Тогда
ОбработкаДвоичныеДанные=ПакетнаяПечатьРеестраНачислений.ХранилищеОбработки.Получить();
АдресВременногоХранилища=ПоместитьВоВременноеХранилище(ОбработкаДвоичныеДанные);
ИмяОбработки = ВнешниеОбработки.Подключить(АдресВременногоХранилища,,Ложь);
КонецЕсли;
Возврат ИмяОбработки;
КонецФункции
&НаСервере
Функция ПоместитьТЗДокументовВоВременноеХранилище(СписокДокументов, ТолькоИзмененыеДокументы=Ложь)
ТЗДляПараметра=Новый ТаблицаЗначений;
ТЗДляПараметра.Колонки.Добавить("СсылкаНаДокумент", Документы.ТипВсеСсылки());
ТЗДляПараметра.Колонки.Добавить("НомерПакета", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10)));
НомерПоПорядку=1;
Для Каждого Документ из СписокДокументов Цикл
СтрокаТЗДляПараметра=ТЗДляПараметра.Добавить();
СтрокаТЗДляПараметра.СсылкаНаДокумент=Документ;
СтрокаТЗДляПараметра.НомерПакета=НомерПоПорядку;
НомерПоПорядку=НомерПоПорядку+1;
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(ТЗДляПараметра);
КонецФункции
&НаКлиенте
Процедура Печать( ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
Если ИдентификаторКоманды="ПакетнаяПечать" Тогда
ИмяОбработки=ПодключитьВнешняяОбработкаПакетнаяПечать();
ПараметрыДляФормы=Новый Структура("АдресТЗСпискаДокументов,СтруктураПараметров");
СтруктураПараметров=Новый Структура();
ПараметрыДляФормы.СтруктураПараметров=СтруктураПараметров;
ПараметрыДляФормы.АдресТЗСпискаДокументов=ПоместитьТЗДокументовВоВременноеХранилище(ОбъектыНазначенияМассив,Ложь);
ОткрытьФорму("ВнешняяОбработка."+ИмяОбработки+".Форма.Форма",ПараметрыДляФормы,,,,,,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецЕсли;
КонецПроцедуры
Это код модуля формы обработки ВызовПекетнойФормы.epf Как видите механизм вызова достаточно универсальный и достаточно добавить документ в список "Размещение"
Для более сложных вызовов необходимо немного скорректировать код. В частности, более сложный вызов мы использовали при печати реестра начислений по аренде.
Тестирование проводилось на 1С:Комплексная автоматизация 2 (2.5.8.232).