Внешний отчет для прикрепления его в стандартную обработку рассылка отчетов.
Необходимо
1. Добавить внешний отчет. Администрирование/ печатные формы, отчеты и обработки/ Дополнительные отчеты и обработки.
2. Во встроенной обработке "Рассылка отчетов" выбрать новый внешний отчет (на вкладке отчеты/Еще/Подобрать дополнительный отчет, рис.1). Рассылка делается всем пользователям из выбранных в списке Получатели рассылки(вкладка Доставка), у которых до даты начала отпуска осталось от 18 до 24 дней из регистра Плановые ежегодные отпуска. Отправляется три печатные формы: Уведомление, Подтверждение и Заявление на перенос.
Рассылка тестировалась в Зарплата и управление персоналом, редакция 3.1 (3.1.18.189).
Отчет формируется посредством СКД, для вывода в необходимой форме в процедуре ПриКомпоновкеРезультата описан следующий код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ДеревоРезультата = Новый ДеревоЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДеревоРезультата);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
МакетУведомление = ПолучитьМакет("ПФ_MXL_УведомлениеОбОтпуске");
ОбластьУведомление = МакетУведомление.ПолучитьОбласть("Уведомление");
ОбластьПодтверждение = МакетУведомление.ПолучитьОбласть("Подтверждение");
ОбластьЗаявлениеНаПеренос = МакетУведомление.ПолучитьОбласть("ЗаявлениеНаПеренос");
ВыводитьРазделитель = Ложь;
Для Каждого СтрокаДанных Из ДеревоРезультата.Строки Цикл
Если ВыводитьРазделитель = Истина Тогда
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
Иначе
ВыводитьРазделитель = Истина;
КонецЕсли;
//Параметры Уведомление
ЗаполнитьЗначенияСвойств(ОбластьУведомление.Параметры,СтрокаДанных);
//Вывести Уведомление
ДокументРезультат.Вывести(ОбластьУведомление);
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
//Параметры Подтверждение
ЗаполнитьЗначенияСвойств(ОбластьПодтверждение.Параметры,СтрокаДанных);
//Вывести Подтверждение
ДокументРезультат.Вывести(ОбластьПодтверждение);
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
//Параметры ЗаявлениеНаПеренос
ЗаполнитьЗначенияСвойств(ОбластьЗаявлениеНаПеренос.Параметры,СтрокаДанных);
//Вывести ЗаявлениеНаПеренос
ДокументРезультат.Вывести(ОбластьЗаявлениеНаПеренос);
КонецЦикла;
КонецПроцедуры