1. В конфигурацию необходимо добавить регистр сведений "ОтправкаОтчетов" (регистр "Непереодический", "Независимый").
1.1 Добавить измерение "Внешняя обработка" (тип "СправочникСсылка.ВнешниеОбработки")
1.2 Добавить ресурс "ДатаОтправки" (Тип "Дата);
2. В модуле обычного приложения добавить процедуру "Отправка отчетов".
2.1. Данная процедура получает внешнюю обработку по имени
2.2. Запускает процедуру внешней обработки (В моем примере все внешние обработки имеют процедуру "СформироватьОтчет()"
2.3. Обновляет в регистре сведений дату отправки.
Процедура ОтправкаОтчетов() экспорт
Если СокрЛП(Константы.ИмяКомпьютераРеглЗаданий.Получить())<>Строка(ПользователиИнформационнойБазы.ТекущийПользователь()) Тогда
Возврат;
КонецЕсли;
//Выборка списка отчетов
СписокОтчетов=РегистрыСведений.ОтправкаОтчетов.Выбрать();
Пока СписокОтчетов.Следующий() Цикл
НадоОтправлять=ложь;
Если НачалоДня(СписокОтчетов.ДатаОтправки)<НачалоДня(ТекущаяДата()) тогда
Дт1=НачалоДня(СписокОтчетов.ДатаОтправки);
Дт2=КонецДня(СписокОтчетов.ДатаОтправки);
НадоОтправлять=Истина;
ИначеЕсли (НачалоДня(СписокОтчетов.ДатаОтправки)=НачалоДня(ТекущаяДата())) и (СписокОтчетов.ДатаОтправки<=ТекущаяДата()) Тогда
Дт1=НачалоДня(ТекущаяДата());
Дт2=КонецДня(ТекущаяДата());
НадоОтправлять=Истина;
КонецЕсли;
Если НадоОтправлять=Истина Тогда
ИмяФайла="C:\Temp\"+СокрЛП(СписокОтчетов.ВнешняяОбработка.Наименование)+".epf";
ВнешнийФайл=СписокОтчетов.ВнешняяОбработка.ХранилищеВнешнейОбработки.Получить();
ВнешнийФайл.Записать(ИмяФайла);
Обработка=ВнешниеОбработки.Создать(ИмяФайла);
Обработка.Дт1=Дт1;
Обработка.Дт2=Дт2;
Обработка.СформироватьОтчет();
//Обновляем регистрСведений
МенеджерЗаписи=СписокОтчетов.ПолучитьМенеджерЗаписи();
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.ДатаОтправки=СписокОтчетов.ДатаОтправки+60*60*24;
МенеджерЗаписи.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
3. В модуле обычного приложения необходимо подключить обработчик ожидания
ПодключитьОбработчикОжидания("ОтправкаОтчетов",120);
4. Пример Процедуры внешней обработки. (В приведенном примере, внешняя обработка производит формирования данных по продажам на основании универсального отчета) (Процедура должна находиться в модуле обработки)
Процедура СформироватьОтчет() экспорт
//Формирования Тотал
СЗФайлы=Новый СписокЗначений;
Табл=Новый ТабличныйДокумент;
УниверсальныйОтчет=Отчеты.УниверсальныйОтчет.Создать();//.ЭтотОбъект.СформироватьОтчет(Табл);
/////////////////////////
УниверсальныйОтчет.мНазваниеОтчета = СокрЛП("Продажи");
УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.ИмяРегистра = "Продажи";
УниверсальныйОтчет.ДобавитьПолеГруппировка("НоменклатураБазоваяЕдиницаИзмерения", "Номенклатура", "БазоваяЕдиницаИзмерения", "Базовая единица измерения");
// Заполнение начальных настроек универсального отчета
УниверсальныйОтчет.УстановитьНачальныеНастройки(Истина);
УниверсальныйОтчет.ПоказыватьЗаголовок=Истина;
ВалютаУпр = Константы.ВалютаУправленческогоУчета.Получить().Наименование;
УниверсальныйОтчет.ДобавитьПоказатель("КоличествоОборот","Количество", Истина);
УниверсальныйОтчет.ДобавитьПоказатель("НДСОборот", "НДС", Ложь);
УниверсальныйОтчет.ДобавитьПоказатель("СтоимостьБезСкидокОборот", "Сумма продажи без скидок в " + ВалютаУпр,ложь);
УниверсальныйОтчет.ДобавитьПоказатель("КоличествоОборот","Количество", Истина);
//УниверсальныйОтчет.ДобавитьПоказатель("Контрагент", "Контрагент", Истина);
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подразделение");
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("ДокументПродажи.Ответственный");
//УниверсальныйОтчет.ДобавитьИзмерениеСтроки("ДокументПродажи");
УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
УниверсальныйОтчет.ДобавитьОтбор("Проект");
УниверсальныйОтчет.ДобавитьОтбор("Подразделение");
УниверсальныйОтчет.ДобавитьПорядок("Контрагент.Наименование");
УниверсальныйОтчет.ДобавитьПорядок("Номенклатура.Наименование");
УниверсальныйОтчет.ДобавитьДополнительноеПоле("НоменклатураБазоваяЕдиницаИзмерения");
//
//УниверсальныйОтчет.ИмяРегистра="Продажи";
УниверсальныйОтчет.ДатаНач=НачалоДня(Дт1);//Дата('20080801000000');
УниверсальныйОтчет.ДатаКон=КонецДня(Дт2);//Дата('20080801235959');
УниверсальныйОтчет.СформироватьОтчет(Табл);
УниверсальныйОтчет.УправлениеОтображениемЗаголовка(УниверсальныйОтчет, Табл);
КаталогНаДиске = Новый Файл("C:\Otchet1C");
Если не КаталогНаДиске.Существует() Тогда
СоздатьКаталог("C:\Otchet1C");
КонецЕсли;
ИмяФайла="ТОТАЛ_"+Строка(Формат(УниверсальныйОтчет.ДатаНач,"ДФ=ddMMyy"))+".xls";
Табл.Записать("C:\Otchet1C\"+ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
СЗФайлы.Добавить("C:\Otchet1C\"+ИмяФайла,ИмяФайла);
ИПП = Новый ИнтернетПочтовыйПрофиль;
ИПП.АдресСервераSMTP ="Свои данные";
ИПП.ПарольSMTP = "пароль";
ИПП.ПользовательSMTP = "пользователь";
ИПП.ПортSMTP = 25;
ИПП.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("Эл.адрес получателя");
Сообщение.Получатели.Добавить("Эл.адрес получателя");
Сообщение.Получатели.Добавить("Эл.адрес получателя");
Сообщение.Отправитель.Адрес = "Адрес отправителя";
Сообщение.Тема = "Тотал продаж за период с "+Строка(Формат(Дт1,"ДФ=dd.MM.yyyy"))+" по "+Строка(Формат(дт2,"ДФ=dd.MM.yyyy"));
//СЗФайлы=Новый СписокЗначений;
Для каждого СписокФайлов из СЗФайлы Цикл
ДД=Новый ДвоичныеДанные("C:\Otchet1C\"+СписокФайлов);
Сообщение.Вложения.Добавить(ДД,ИмяФайла);
КонецЦикла;
Сообщение.Тексты.Добавить("Данные сформированы автоматически - "+ТекущаяДата());
Почта = Новый ИнтернетПочта;
Почта.Подключиться(ИПП);
Почта.Послать(Сообщение);
Почта.Отключиться();
КонецПроцедуры