В начало

Выгрузка на почту XSLX-файла

 

Листинг. Модуль формы внешней обработки

 

&НаСервере

Функция ВыгрузитьДанные_вТЗ()

           

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

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

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

            |           УКЕДС_Заявки.Фамилия КАК ФИО,

            |           УКЕДС_Заявки.УКЖКХ_АдресАЗ.Владелец.ФИАС_КодЗдания КАК КодФИАС,

            |           УКЕДС_Заявки.Телефоны КАК Телефоны

            |ИЗ

            |           Документ.УКЕДС_Заявки КАК УКЕДС_Заявки

            |ГДЕ

            |           УКЕДС_Заявки.Дата >= &ДатаНачала

            |           И УКЕДС_Заявки.Дата <= &ДатаОкончания

            |           И УКЕДС_Заявки.Телефоны <> """"

            |           И УКЕДС_Заявки.УКЖКХ_АдресАЗ.Владелец.ФИАС_КодЗдания <> """"

            |           И УКЕДС_Заявки.Фамилия <> """"";

           

            Запрос.Параметры.Вставить("ДатаНачала", НачалоДня(ТекущаяДата() - 86400*120));

            Запрос.Параметры.Вставить("ДатаОкончания", КонецДня(ТекущаяДата() - 86400*120));

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

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

           

            Если Выборка.Следующий() Тогда

                        Возврат Результат.Выгрузить();

            Иначе

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

            КонецЕсли;

           

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

 

&НаСервере

Функция ТабличныйДокументИзТаблицыЗначений(Знач ТЗ)

           

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

           

    // Выводим заголовок таблицы

    КолонкаИндекс = 0;

    Пока КолонкаИндекс < ТЗ.Колонки.Количество() Цикл

        Колонка = ТЗ.Колонки[КолонкаИндекс];

                        ОбластьКолонки = ТабДокумент.Область(1, КолонкаИндекс + 1, 1, КолонкаИндекс + 1);

                        Если ПустаяСтрока(Колонка.Заголовок) Тогда

                                   ОбластьКолонки.Текст = Колонка.Имя;

                        Иначе

                                   ОбластьКолонки.Текст = Колонка.Заголовок;

                        КонецЕсли;

                        ОбластьКолонки.ШиринаКолонки = Колонка.Ширина;

        КолонкаИндекс = КолонкаИндекс + 1;

    КонецЦикла;

   

    // Выводим строки таблицы

    СтрокаИндекс = 0;

    Пока СтрокаИндекс < ТЗ.Количество() Цикл

        Таблица_Строка = ТЗ[СтрокаИндекс];

        КолонкаИндекс = 0;

        Пока КолонкаИндекс < ТЗ.Колонки.Количество() Цикл

            Колонка = ТЗ.Колонки[КолонкаИндекс];

            ТабДокумент.Область(СтрокаИндекс + 2, КолонкаИндекс + 1, СтрокаИндекс + 2, КолонкаИндекс + 1).Текст = Таблица_Строка[Колонка.Имя];  // + 2, т.к. в первой строке выведен заголовок

            КолонкаИндекс = КолонкаИндекс + 1;

        КонецЦикла;       

        СтрокаИндекс = СтрокаИндекс + 1;

    КонецЦикла;

   

    Возврат ТабДокумент;

           

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

 

&НаСервере

Процедура ОтправитьПочтовоеСообщение(Знач ФайлСТелефонами)

           

            ПочтовыйПрофиль = новый ИнтернетПочтовыйПрофиль;

    ПочтовыйПрофиль.ВремяОжидания = 300;

            ПочтовыйПрофиль.Пользователь = "obmen_eds_dzfz";

           

            //SMTP

            ПочтовыйПрофиль.АдресСервераSMTP = "mail.gktower.ru";

            ПочтовыйПрофиль.ПортSMTP = 587;

            ПочтовыйПрофиль.ПользовательSMTP = "obmen_eds_dzfz";

            ПочтовыйПрофиль.ПарольSMTP = "+HBeo8V~MoCWkRDX"; 

            ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

           

            //IMAP

            ПочтовыйПрофиль.АдресСервераIMAP = "mail.gktower.ru";

            ПочтовыйПрофиль.ПортIMAP = 993;

            ПочтовыйПрофиль.ПользовательIMAP = "obmen_eds_dzfz";

            ПочтовыйПрофиль.ПарольIMAP = "+HBeo8V~MoCWkRDX";

           

           

            Отправитель1 = "obmen_eds_dzfz@gktower.ru";    

            Сообщение = Новый ИнтернетПочтовоеСообщение;

            Сообщение.ИмяОтправителя = Отправитель1;

            Сообщение.Отправитель = Отправитель1;

            Сообщение.Тема = "Тестовая тема";

            Сообщение.Получатели.Добавить("obmen_eds_dzfz@gktower.ru");

            Сообщение.Тексты.Добавить("Тестовое сообщение");

            Сообщение.Вложения.Добавить(ФайлСТелефонами, "Список телефонов");

           

            Почта = Новый ИнтернетПочта;

            Попытка

                        Почта.Подключиться(ПочтовыйПрофиль);

                        Почта.Послать(Сообщение);

            Исключение

                        //Сообщить("Ошибка ...",СтатусСообщения.ОченьВажное);

                        //Сообщить(""+ОписаниеОшибки());

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

           

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

 

&НаСервере

Процедура Отправить_НаСервере()

           

            ТЗ = ВыгрузитьДанные_вТЗ();

           

            Если ЗначениеЗаполнено(ТЗ) Тогда

                        ТабДок = ТабличныйДокументИзТаблицыЗначений(ТЗ);

                        ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");

                        ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);

                       

                                   //Отправляем файл

                                   ОтправитьПочтовоеСообщение(ИмяФайла);

                                  

                        УдалитьФайлы(ИмяФайла);

            КонецЕсли;   

 

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

 

&НаКлиенте

Процедура Отправить(Команда)

            Отправить_НаСервере();

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

 

 

Рис. Пример выгрузки