Универсальная пакетная печать документов для типовых конфигураций 1С 8.2 - 8.3

Печать - Пакетная печать

Производит печать печатных форм для любых типовых документов конфигурации.
Выбираете тип документа (Реализация товаров и услуг, Заказ клиента).
Выбираете нужные для печати печатные формы.
Нажимаете кнопки Все или Выделенные (печатаем все документы, что попадают в фильтр списка, или выделяем нужные строки для печати).
Если нужно сразу отправить на принтер, то ставим галку На принтер.

А теперь с самого начала разберемся, как она работает по внутренностям.

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

	МетаданныеДокументы = Метаданные.Документы;	
	КоллекцияКомандПечати = УправлениеПечатью.СоздатьКоллекциюКомандПечати();
	
	Для Каждого Эл Из МетаданныеДокументы Цикл 
		КоллекцияКомандПечати.Очистить();
		Попытка
			Документы[Эл.Имя].ДобавитьКомандыПечати(КоллекцияКомандПечати);
			Если КоллекцияКомандПечати.Количество() > 0 Тогда
				Элементы.ВидДокументов.СписокВыбора.Добавить(Эл.Имя, Эл.Синоним);
				Элементы.ГруппаПечФормы.Видимость = Ложь;
			КонецЕсли;	
		Исключение
		КонецПопытки;			
	КонецЦикла;		


По изменению типа документа отрисовываем все необходимое, добавляем программно реквизиты формы и элементы формы методами ИзменитьРеквизиты и  Элементы.Добавить(Эл.Имя, Тип("ПолеФормы"), ТаблицаФормы)

	Если Элементы.Найти(ИмяРеквизита) = Неопределено Тогда
		РеквизитДобавлен = Ложь;						
		ОписаниеТиповДляРеквизита = Новый ОписаниеТипов("ДинамическийСписок");	
		ТаблЗначений = Новый РеквизитФормы(ИмяРеквизита, ОписаниеТиповДляРеквизита);		
		ДобавляемыеРеквизиты = Новый Массив;
		ДобавляемыеРеквизиты.Добавить(ТаблЗначений);		
		ИзменитьРеквизиты(ДобавляемыеРеквизиты);  			
	КонецЕсли;
	
	РеквизитТаблЗначений = ЭтаФорма[ИмяРеквизита];
	РеквизитТаблЗначений.ОсновнаяТаблица = ТаблицаРеквизита;        
	
	Если РеквизитДобавлен Тогда
		Элементы.Удалить(Элементы[ИмяРеквизита]);
	КонецЕсли;	
	
	ТаблицаФормы = Элементы.Добавить(ИмяРеквизита, Тип("ТаблицаФормы"), Элементы.ГруппаДокСписок);
	ТаблицаФормы.ПутьКДанным = ИмяРеквизита;
		
	Для Каждого Эл Из Метаданные.Документы[Имядок].СтандартныеРеквизиты Цикл
		Если Эл.Имя = "Ссылка" Тогда
			Продолжить;
		КонецЕсли;			
		НоваяКолонкаТаблицы = Элементы.Добавить(Эл.Имя, Тип("ПолеФормы"), ТаблицаФормы);    
		НоваяКолонкаТаблицы.ПутьКДанным = ИмяРеквизита + "."+ Строка(Эл.Имя);
	КонецЦикла;


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

Проше говоря, создаем программно СКД, берем настройки динамического списка методами ПолучитьИсполняемуюСхемуКомпоновкиДанных и ПолучитьИсполняемыеНастройкиКомпоновкиДанных и далее выводим полученное в таблицу через ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений

	СхемаКомпоновкиДанных = Элементы[РеквТабл].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	НастройкиКомпоновкиДанных = Элементы[РеквТабл].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	НастройкиКомпоновкиДанных.Структура.Очистить();
	
	ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    АвтоВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Структура[0].Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	
    ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(Макет);
	
	ТаблицаСсылок = Новый ТаблицаЗначений;
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаСсылок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);

 

И по кнопке печать формируем печатные формы, тут все почти стандартно 

	Для Каждого Эл Из СписокДок Цикл		
		Для Каждого СтрПечФорма Из СтрокиПечать Цикл
			ОбъектыПечати = Новый Массив();
			ОбъектыПечати.Добавить(Эл);
			СтрПечФорма.ОбъектыПечати = ОбъектыПечати;

			УправлениеПечатьюСлужебныйКлиент.ВыполнитьПодключаемуюКомандуПечатиЗавершение(Истина, СтрПечФорма);
			
		КонецЦикла;
	КонецЦикла;	
 

Скачать файлы

Наименование Файл Версия Размер
Универсальная пакетная печать документов
.epf 10,23Kb
16.01.16
62
.epf 1.0 10,23Kb 62 Скачать

См. также

Комментарии
1. Славик Лавин (LavinVadik) 61 07.01.16 05:15 Сейчас в теме
не мешало бы добавить , флаг для выбора документов в левом окне

на
1С:Предприятие 8.3 (8.3.6.2390)
Бухгалтерия предприятия, редакция 3.0 (3.0.41.51

выдает ошибку
{ОбщийМодуль.УправлениеПечатью.Модуль(1274)}: При формировании печатной формы "УниверсальныйПередаточныйДокумент" возникла ошибка. Обратитесь к администратору.
{ОбщийМодуль.УправлениеПечатью.Модуль(1274)}: При формировании печатной формы "СчетФактура" возникла ошибка. Обратитесь к администратору.

если раскопаю в чем причина дополнительно напишу
2. Nilch Nilch (Free_Danial) 9 07.01.16 14:37 Сейчас в теме
Спасиб за комментарий.
Баги пификсены, модератор скоро выложит свежую версию.
Флаг для выбора документов ожидает скоро в новых версиях.
3. Валерий Березуцких (spec8s) 225 07.01.16 19:52 Сейчас в теме
4. Славик Лавин (LavinVadik) 61 07.01.16 23:20 Сейчас в теме
(3) spec8s,

наверно в этом
"UPD: Для Бухгалтерии 3.0 обработки не будет, ввиду ограничения самой конфигурации."
5. Константин Юрин (kostyaomsk) 70 31.05.16 12:34 Сейчас в теме
Плюс автору что не поленился описать типовые алгоритмы для пакетной печати. Сейчас сам думаю как лучше начать. Надо чтоб для БП 2.0 было, но на управляемой форме и чтоб безболезненно перевести на БП 3.0. Пока надо изучить типовые механизмы.
Оставьте свое сообщение