В начало

Регламентное задание с отправкой отчета

 

            Пример регламентного задания, в котором формируется отчет программным способом, затем файл отчета сохраняется в формате Иксель и последующей отправкой данного файла по почте.

            Ниже приведена структура отчета, хотя в данном случает отчет может быть любой.

Рис. Отчет «ДинамикаДЗдляИнцидента»

 

            Также нужно будет создать регламентное задание, которое будет запускать процедуру, расположенную в общем модуле.

Рис. Регламентное задание «ИнцидентВзрывнаяДЗ»

 

            И наконец, далее приведен листинг внешнего модуля с функциями и процедурами, необходимыми для выполнения данного регламентного задания.

 

Листинг. Общий модуль «Инциденты»

&НаСервере

Процедура СоздатьОтчетИСохранитьВИксель()

            ТабДок = Новый ТабличныйДокумент();

           

            СКД=Отчеты.ДинамикаДЗдляИнцидента.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

            Настройки=СКД.НастройкиПоУмолчанию;

           

            Параметр1 = Настройки.ПараметрыДанных.Элементы.Найти("МесяцНачисления");

            Параметр1.Значение=НачалоМесяца(ТекущаяДата());

            Параметр1.Использование = Истина;

           

            Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;

            КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;   

           

            //Передаем в макет компоновки схему, настройки и данные расшифровки

            МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, Расшифровка);   

            ВнешниеПараметры = Новый Структура;   

           

            //Выполним компоновку с помощью процессора компоновки

            ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

            ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);   

           

            //Выводим результат в табличный документ

            ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

            ПроцессорВывода.УстановитьДокумент(ТабДок);   

            ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);                

           

            ТабДок.Записать(КаталогВременныхФайлов() + "ДинамикаДЗдляИнцидентов.xls", ТипФайлаТабличногоДокумента.XLS);

КонецПроцедуры

 

&НаСервере

Процедура ОтправитьПочтовоеСообщениеСИнцидентом(Знач Сообщение)  

Попытка         

    АдресПолучателя = "info@pochta.ru";

            АдресОтвета ="";

            ТемаПисьма ="Инцидент - Взрывная дебиторская задолженность";

            ТекстПисьма = Сообщение; 

           

            МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями");

            УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();       

           

            ПараметрыПисьма = Новый Структура;

            ПараметрыПисьма.Вставить("Кому", АдресПолучателя);

            ПараметрыПисьма.Вставить("УчетнаяЗапись", УчетнаяЗапись);                                                               

            ПараметрыПисьма.Вставить("АдресОтвета", АдресОтвета);

            ПараметрыПисьма.Вставить("Тема", ТемаПисьма);          

            ПараметрыПисьма.Вставить("Тело", ТекстПисьма);

            ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");

 

            Вложения = Новый Соответствие;

            Вложения.Вставить("ДинамикаДЗдляИнцидентов.xls", Новый ДвоичныеДанные(КаталогВременныхФайлов() + "ДинамикаДЗдляИнцидентов.xls"));

            ПараметрыПисьма.Вставить("Вложения", Вложения);        

                                  

            РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);

Исключение

КонецПопытки;

КонецПроцедуры

 

&НаСервере

Функция РасчетДЗвРазрезеГородов()

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |          УК_СостояниеРасчетов.МесяцНачисления КАК МесяцНачисления,

                        |          Партнеры.F1_Город КАК Город,

                        |          Партнеры.F1_Дом КАК Дом,

                        |          УК_ПоставщикиУслуг.Ссылка КАК УК,

                        |          СУММА(УК_СостояниеРасчетов.Сумма - УК_Оплаты.Сумма) КАК ДЗ_ПредМесяц

                        |ПОМЕСТИТЬ втПредМесяц

                        |ИЗ

                        |          РегистрСведений.УК_СостояниеРасчетов КАК УК_СостояниеРасчетов

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

                        |                     ПО УК_СостояниеРасчетов.ПоставщикРЦ.Поставщик = УК_ПоставщикиУслуг.Ссылка

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УК_Оплаты КАК УК_Оплаты

                        |                     ПО УК_СостояниеРасчетов.ЛС = УК_Оплаты.Абонент

                        |                                 И УК_СостояниеРасчетов.МесяцНачисления = УК_Оплаты.Период

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры

                        |                     ПО УК_СостояниеРасчетов.ЛС = Партнеры.Ссылка

                        |ГДЕ

                        |          УК_СостояниеРасчетов.МесяцНачисления = ДОБАВИТЬКДАТЕ(&МесяцНачисления, МЕСЯЦ, -1)

                        |

                        |СГРУППИРОВАТЬ ПО

                        |          Партнеры.F1_Город,

                        |          Партнеры.F1_Дом,

                        |          УК_ПоставщикиУслуг.Ссылка,

                        |          УК_СостояниеРасчетов.МесяцНачисления

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |          УК_СостояниеРасчетов.МесяцНачисления КАК МесяцНачисления,

                        |          Партнеры.F1_Город КАК Город,

                        |          Партнеры.F1_Дом КАК Дом,

                        |          УК_ПоставщикиУслуг.Ссылка КАК УК,

                        |          СУММА(УК_СостояниеРасчетов.Сумма - УК_Оплаты.Сумма) КАК ДЗ_ТекМесяц

                        |ПОМЕСТИТЬ втТекМесяц

                        |ИЗ

                        |          РегистрСведений.УК_СостояниеРасчетов КАК УК_СостояниеРасчетов

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

                        |                     ПО УК_СостояниеРасчетов.ПоставщикРЦ.Поставщик = УК_ПоставщикиУслуг.Ссылка

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УК_Оплаты КАК УК_Оплаты

                        |                     ПО УК_СостояниеРасчетов.ЛС = УК_Оплаты.Абонент

                        |                                 И УК_СостояниеРасчетов.МесяцНачисления = УК_Оплаты.Период

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры

                        |                     ПО УК_СостояниеРасчетов.ЛС = Партнеры.Ссылка

                        |ГДЕ

                        |          УК_СостояниеРасчетов.МесяцНачисления = &МесяцНачисления

                        |

                        |СГРУППИРОВАТЬ ПО

                        |          Партнеры.F1_Город,

                        |          Партнеры.F1_Дом,

                        |          УК_ПоставщикиУслуг.Ссылка,

                        |          УК_СостояниеРасчетов.МесяцНачисления

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ

                        |          втТекМесяц.Город КАК Город,

                        |          втТекМесяц.Дом КАК Дом,

                        |          втТекМесяц.УК КАК УК,

                        |          втТекМесяц.МесяцНачисления КАК МесяцНачисления,

                        |          втТекМесяц.ДЗ_ТекМесяц КАК ДЗ_ТекМесяц,

                        |          втПредМесяц.ДЗ_ПредМесяц КАК ДЗ_ПредМесяц,

                        |          ВЫБОР

                        |                     КОГДА втПредМесяц.ДЗ_ПредМесяц <> 0

                        |                                 ТОГДА (втТекМесяц.ДЗ_ТекМесяц - втПредМесяц.ДЗ_ПредМесяц) / втПредМесяц.ДЗ_ПредМесяц * 100

                        |                     ИНАЧЕ 0

                        |          КОНЕЦ КАК ПроцентИзмененияДЗ

                        |ПОМЕСТИТЬ втИзменениеДЗ

                        |ИЗ

                        |          втТекМесяц КАК втТекМесяц

                        |                     ЛЕВОЕ СОЕДИНЕНИЕ втПредМесяц КАК втПредМесяц

                        |                     ПО втТекМесяц.Город = втПредМесяц.Город

                        |                                 И втТекМесяц.Дом = втПредМесяц.Дом

                        |                                 И втТекМесяц.УК = втПредМесяц.УК

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ

                        |          втИзменениеДЗ.Город КАК Город,

                        |          СУММА(втИзменениеДЗ.ПроцентИзмененияДЗ) КАК ПроцентИзмененияДЗ

                        |ИЗ

                        |          втИзменениеДЗ КАК втИзменениеДЗ

                        |ГДЕ

                        |          втИзменениеДЗ.ПроцентИзмененияДЗ > 20

                        |

                        |СГРУППИРОВАТЬ ПО

                        |          втИзменениеДЗ.Город

                        |

                        |УПОРЯДОЧИТЬ ПО

                        |          втИзменениеДЗ.Город.Наименование";

           

            Запрос.УстановитьПараметр("МесяцНачисления", НачалоМесяца(ТекущаяДата()));   

            Результат = Запрос.Выполнить();

            Выборка = Результат.Выбрать();

           

            СЗ = Новый СписокЗначений;

 

            Пока Выборка.Следующий() Цикл

                        СЗ.Добавить(Строка(Выборка.Город) + "   " + Строка(Формат(Выборка.ПроцентИзмененияДЗ, "ЧЦ=10; ЧДЦ=2")) + " %");

            КонецЦикла;                   

                       

            Если НЕ Результат.Пустой() Тогда

                        Возврат СЗ;

            Иначе

                        Возврат Неопределено;

            КонецЕсли

           

КонецФункции

 

&НаСервере

Процедура ИнцидентВзрывнаяДЗ() Экспорт 

//Проверяем, есть ли вообще дебиторская задолженность

СЗ = РасчетДЗвРазрезеГородов();

 

//Если ДЗ есть, тогда создаем отчет и высылаем его по почте

Если СЗ <> Неопределено Тогда    

            СоздатьОтчетИСохранитьВИксель();

            ОтправитьПочтовоеСообщениеСИнцидентом("Инцидент - Взрывная ДЗ");

КонецЕсли;

 

КонецПроцедуры

 

            Затем все это протестируем в пользовательском режиме, чтобы убедиться, что все работает.

 

Рис. Фрагмент почтового сообщения с приложенным отчетом в формате Иксель