1С — Отчет на почту по расписанию.
Задача: сформировать отчет и отправить его по почте раз в день (отчёт на почту по расписанию).
Используем для этого регламентные задания.
Код:
Функция ПолучитьКомментарий(Магазин,Номенклатура,Дата1,Дата2)
сообщить(Номенклатура);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваров.Комментарий,
| РеализацияТоваров.Номер
|ИЗ
| Документ.РеализацияТоваров КАК РеализацияТоваров
|ГДЕ
| РеализацияТоваров.Проведен = ИСТИНА
| И РеализацияТоваров.Дата МЕЖДУ &Дата1 И &Дата2
| И РеализацияТоваров.Товары.Номенклатура = &Номенклатура
| И РеализацияТоваров.Магазин = &Магазин";
Запрос.УстановитьПараметр("Магазин", Магазин);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Дата1",НачалоДня(Дата1));
Запрос.УстановитьПараметр("Дата2",КонецДня(Дата2));
РезультатЗапроса = Запрос.Выполнить();
ком="";
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ком=ком+"Реализация №"+ВыборкаДетальныеЗаписи.Номер+"("+ВыборкаДетальныеЗаписи.Комментарий+")"+символы.ПС;
конеццикла;
возврат ком;
КонецФункции
Функция ОстатокНаСкладах(Магазин,Номенклатура,Дата)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата1, ) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Склад.Магазин = &Магазин
| И ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Магазин", Магазин);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Дата1",КонецДня(Дата));
РезультатЗапроса = Запрос.Выполнить();
кол=0;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
кол=ВыборкаДетальныеЗаписи.КоличествоОстаток;
конеццикла;
возврат кол;
КонецФункции
Функция СформироватьКомплексныйОтчет()
ТабДок=Новый ТабличныйДокумент;
Магазин=Справочники.Магазины.НайтиПоНаименованию("Вологда Торговля");
ДатаНачала=НачалоДня(ТекущаяДата());
ДатаКонец=КонецДня(ТекущаяДата());
Макет=ПолучитьОбщийМакет("КомплексныйОтчетГрибов");
ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Магазин=Магазин;
ОбластьШапка.Параметры.Период="с "+ДатаНачала+" по "+ДатаКонец;
ТабДок.Вывести(ОбластьШапка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
| СУММА(РеализацияТоваровТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровТовары.Сумма) КАК Сумма,
| СУММА(РеализацияТоваровТовары.СуммаАвтоматическойСкидки) КАК СуммаАвтоматическойСкидки,
| СУММА(РеализацияТоваровТовары.СуммаРучнойСкидки) КАК СуммаРучнойСкидки
|ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
|ГДЕ
| РеализацияТоваровТовары.Ссылка.Магазин = &Магазин
| И РеализацияТоваровТовары.Ссылка.Проведен = ИСТИНА
| И РеализацияТоваровТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровТовары.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
Запрос.УстановитьПараметр("Магазин", Магазин);
Запрос.УстановитьПараметр("Дата1", ДатаНачала);
Запрос.УстановитьПараметр("Дата2",ДатаКонец);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
кл=0;
сумскид=0;
сумбезск=0;
колво=0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
кл=кл+1;
Область=Макет.ПолучитьОбласть("ТаблПродажи");
Область.Параметры.Номенклатура=ВыборкаДетальныеЗаписи.Номенклатура;
если ВыборкаДетальныеЗаписи.СуммаАвтоматическойСкидки<>0 тогда
Область.Параметры.сумскид=ВыборкаДетальныеЗаписи.Сумма+ВыборкаДетальныеЗаписи.СуммаАвтоматическойСкидки;
иначе
Область.Параметры.сумскид=ВыборкаДетальныеЗаписи.Сумма+ВыборкаДетальныеЗаписи.СуммаРучнойСкидки;
конецесли;
Область.Параметры.сумбезск=ВыборкаДетальныеЗаписи.Сумма;
Область.Параметры.колво=ВыборкаДетальныеЗаписи.Количество;
Область.Параметры.номер=кл;
сумскид=сумскид+Область.Параметры.сумскид;
сумбезск=сумбезск+ВыборкаДетальныеЗаписи.Сумма;
колво=колво+ВыборкаДетальныеЗаписи.Количество;
если Область.Параметры.сумскид=Область.Параметры.сумбезск тогда
Область.Параметры.сумскид=0;
иначе
Область.Параметры.комментарий=ПолучитьКомментарий(Магазин,ВыборкаДетальныеЗаписи.Номенклатура,ДатаНачала,ДатаКонец);
конецесли;
Область.Параметры.остаток=ОстатокНаСкладах(Магазин,ВыборкаДетальныеЗаписи.Номенклатура,ДатаКонец);
ТабДок.Вывести(Область);
КонецЦикла;
Область=Макет.ПолучитьОбласть("ПодвалПродажи");
Область.Параметры.сумскид=сумскид;
Область.Параметры.сумбезск=сумбезск;
Область.Параметры.колво=колво;
ТабДок.Вывести(Область);
// заполняем возвраты
Область=Макет.ПолучитьОбласть("ВозвратыШапка");
ТабДок.Вывести(Область);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВозвратТоваровОтПокупателяТовары.Количество,
| ВозвратТоваровОтПокупателяТовары.Сумма,
| ВозвратТоваровОтПокупателяТовары.СуммаРучнойСкидки,
| ВозвратТоваровОтПокупателяТовары.СуммаАвтоматическойСкидки,
| ВозвратТоваровОтПокупателяТовары.Номенклатура,
| ВозвратТоваровОтПокупателяТовары.Ссылка.Комментарий
|ИЗ
| Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
|ГДЕ
| ВозвратТоваровОтПокупателяТовары.Ссылка.Проведен = ИСТИНА
| И ВозвратТоваровОтПокупателяТовары.Ссылка.Магазин = &Магазин
| И ВозвратТоваровОтПокупателяТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2";
Запрос.УстановитьПараметр("Магазин", Магазин);
Запрос.УстановитьПараметр("Дата1", ДатаНачала);
Запрос.УстановитьПараметр("Дата2",ДатаКонец);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
всумбезск=0;
всумвозвр=0;
вколво=0;
кл=0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
кл=кл+1;
Область=Макет.ПолучитьОбласть("ВозврТабл");
Область.Параметры.Номенклатура=ВыборкаДетальныеЗаписи.Номенклатура;
если ВыборкаДетальныеЗаписи.СуммаАвтоматическойСкидки<>0 тогда
Область.Параметры.сумвозвр=ВыборкаДетальныеЗаписи.Сумма+ВыборкаДетальныеЗаписи.СуммаАвтоматическойСкидки;
иначе
Область.Параметры.сумвозвр=ВыборкаДетальныеЗаписи.Сумма+ВыборкаДетальныеЗаписи.СуммаРучнойСкидки;
конецесли;
Область.Параметры.сумбезск=ВыборкаДетальныеЗаписи.Сумма;
Область.Параметры.колво=ВыборкаДетальныеЗаписи.Количество;
Область.Параметры.Комментарий=ВыборкаДетальныеЗаписи.Комментарий;
Область.Параметры.номер=кл;
если Область.Параметры.сумвозвр=Область.Параметры.сумбезск тогда
Область.Параметры.сумбезск=0;
конецесли;
всумбезск=всумбезск+Область.Параметры.сумбезск;
всумвозвр=всумвозвр+Область.Параметры.сумвозвр;
вколво=вколво+Область.Параметры.колво;
ТабДок.Вывести(Область);
КонецЦикла;
//итого возвраты
Область=Макет.ПолучитьОбласть("ВозврИтого");
Область.Параметры.сумбезск=всумбезск;
Область.Параметры.сумвозвр=всумвозвр;
Область.Параметры.колво =вколво;
ТабДок.Вывести(Область);
// финансовый результат
Область=Макет.ПолучитьОбласть("ИтогоОбщий");
Область.Параметры.сумпроднал=сумбезск;
Область.Параметры.сумпродбезнал="пока не доступно";
Область.Параметры.сумвозвр=всумвозвр;
Область.Параметры.Выручка=Область.Параметры.сумпроднал-Область.Параметры.сумвозвр;
ТабДок.Вывести(Область);
возврат ТабДок;
КонецФункции
Функция СформироватьИОтправитьОтчетПоПродажам() Экспорт
ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Информация, "Формирование отчетов", "Данные", "Запуск задания", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
Таб =СформироватьКомплексныйОтчет();
Таб.Записать("c:\temp\finresult.xls",ТипФайлаТабличногоДокумента.XLS);
ЗаписьЖурналаРегистрации("Событие", УровеньЖурналаРегистрации.Информация, "Формирование отчетов", "Данные", "Закончили выгрузку", РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
// отправляем письмо всем кому попало
плогин="billing@укаукаука.ru";
ппароль="укаукаукаук";
пснмп="mail.укаукаук.ru";
побратный="укаук@куаукаука.ru";
пполучатель="укаукаука@mail.ru";
ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
ПараметрыПочты.АдресСервераSMTP = пснмп;
ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
ПараметрыПочты.ПользовательSMTP = плогин;
ПараметрыПочты.ПарольSMTP=ппароль;
Письмо=новый ИнтернетПочтовоеСообщение;
Письмо.Тема="Комплексный отчет по продажам в магазине Вологда Торговля";
Письмо.ИмяОтправителя="1С отправка отчетов";
Письмо.Отправитель=побратный;
Письмо.Получатели.Добавить(пполучатель);
Письмо.Получатели.Добавить("укаукаук@mail.ru");
Письмо.Тексты.Добавить("Комплексный отчет по продажам в магазине Вологда Торговля");
Письмо.Вложения.Добавить("c:\temp\finresult.xls");
Подключение=новый ИнтернетПочта;
Попытка
Подключение.Подключиться(ПараметрыПочты);
Подключение.Послать(Письмо);
возврат истина;
Исключение
возврат ложь;
КонецПопытки;
КонецФункции