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");
		
		Подключение=новый ИнтернетПочта;
		Попытка
		Подключение.Подключиться(ПараметрыПочты);
		Подключение.Послать(Письмо);        
		возврат истина;	 
	Исключение		
			 возврат ложь;	 
	КонецПопытки;	
	 
	 

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.