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

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

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

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

 МетаданныеДокументы = Метаданные.Документы;
КоллекцияКомандПечати = УправлениеПечатью.СоздатьКоллекциюКомандПечати();

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

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

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

РеквизитТаблЗначений = ЭтаФорма[ИмяРеквизита];
РеквизитТаблЗначений.ОсновнаяТаблица = ТаблицаРеквизита;

Если РеквизитДобавлен Тогда
Элементы.Удалить(Элементы[ИмяРеквизита]);
КонецЕсли;

ТаблицаФормы = Элементы.Добавить(ИмяРеквизита, Тип("ТаблицаФормы"), Элементы.ГруппаДокСписок);
ТаблицаФормы.ПутьКДанным = ИмяРеквизита;

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


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

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

 СхемаКомпоновкиДанных = Элементы[РеквТабл].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
НастройкиКомпоновкиДанных = Элементы[РеквТабл].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
НастройкиКомпоновкиДанных.Структура.Очистить();

ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Структура[0].Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Ссылка");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет);

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

 

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

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

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

КонецЦикла;
КонецЦикла;
 

6 Comments

  1. LavinVadik

    не мешало бы добавить , флаг для выбора документов в левом окне

    на

    1С:Предприятие 8.3 (8.3.6.2390)

    Бухгалтерия предприятия, редакция 3.0 (3.0.41.51

    выдает ошибку

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

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

    если раскопаю в чем причина дополнительно напишу

    Reply ↓
  2. Free_Danial

    Спасиб за комментарий.

    Баги пификсены, модератор скоро выложит свежую версию.

    Флаг для выбора документов ожидает скоро в новых версиях.

    Reply ↓
  3. spec8s

    В чем отличие от этой?

    Reply ↓
  4. LavinVadik

    (3) spec8s,

    наверно в этом

    «UPD: Для Бухгалтерии 3.0 обработки не будет, ввиду ограничения самой конфигурации.»

    Reply ↓
  5. jobkostya1c8

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

    Reply ↓
  6. gitty

    в обработке, которую я скачала есть только две кнопки печати, ни выбора документа/справочника ни выбора печатных форм, какой смысл было выкладывать это для скачивания?

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *