1С — Отчет на почту по расписанию.
Задача: сформировать отчет и отправить его по почте раз в день (отчёт на почту по расписанию).
Используем для этого регламентные задания.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
Функция ПолучитьКомментарий(Магазин,Номенклатура,Дата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"); Подключение=новый ИнтернетПочта; Попытка Подключение.Подключиться(ПараметрыПочты); Подключение.Послать(Письмо); возврат истина; Исключение возврат ложь; КонецПопытки; КонецФункции |