Универсальная пакетная печать документов для типовых конфигураций 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 не будет опубликован. Обязательные поля помечены *