gifts2017

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

Опубликовал Nilch Nilch (Free_Danial) в раздел Печать - Пакетная печать

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

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

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

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


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

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


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

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

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

 

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Вадик Лавин (LavinVadik) 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) 07.01.16 14:37
Спасиб за комментарий.
Баги пификсены, модератор скоро выложит свежую версию.
Флаг для выбора документов ожидает скоро в новых версиях.
3. Валерий Березуцких (spec8s) 07.01.16 19:52
4. Вадик Лавин (LavinVadik) 07.01.16 23:20
(3) spec8s,

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