Выполнить рассылки фоновом задании. Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом
// Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом
// режиме вызывается напрямую, в клиент-серверном - через фоновое задание.
//
// Параметры:
// ПараметрыВыполнения - Структура - выполняемые рассылки и их параметры.
// * МассивРассылок - Массив из СправочникСсылка.РассылкиОтчетов - выполняемые рассылки.
// * ПредварительныеНастройки - Структура - параметры см. РассылкаОтчетов.ВыполнитьРассылкуОтчетов.
// АдресРезультата - Строка - адрес во временном хранилище, по которому будет размещен результат.
//
Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт
МассивРассылок = ПараметрыВыполнения.МассивРассылок;
ПредварительныеНастройки = ПараметрыВыполнения.ПредварительныеНастройки;
// Выбираем все рассылки, включая вложенные, исключая группы.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РассылкиОтчетов.Ссылка КАК Рассылка,
| РассылкиОтчетов.Представление КАК Представление,
| ВЫБОР
| КОГДА РассылкиОтчетов.Подготовлена = ИСТИНА
| И РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК Подготовлена,
| ЛОЖЬ КАК Выполнена,
| ЛОЖЬ КАК СОшибками
|ИЗ
| Справочник.РассылкиОтчетов КАК РассылкиОтчетов
|ГДЕ
| РассылкиОтчетов.Ссылка В ИЕРАРХИИ(&МассивРассылок)
| И РассылкиОтчетов.ЭтоГруппа = ЛОЖЬ";
Запрос.УстановитьПараметр("МассивРассылок", МассивРассылок);
ТаблицаРассылок = Запрос.Выполнить().Выгрузить();
Подготовленные = ТаблицаРассылок.НайтиСтроки(Новый Структура("Подготовлена", Истина));
Выполнено = 0;
СОшибками = 0;
МассивСообщений = Новый Массив;
Для Каждого СтрокаТаблицы Из Подготовленные Цикл
ПараметрыЖурнала = Новый Структура("МассивОшибок", Новый Массив);
СтрокаТаблицы.Выполнена = ВыполнитьРассылкуОтчетов(
СтрокаТаблицы.Рассылка,
ПараметрыЖурнала,
ПредварительныеНастройки);
СтрокаТаблицы.СОшибками = (ПараметрыЖурнала.МассивОшибок.Количество() > 0);
Если СтрокаТаблицы.СОшибками Тогда
МассивСообщений.Добавить("---" + Символы.ПС + Символы.ПС + СтрокаТаблицы.Представление + ":"); // Заголовок
Для Каждого Сообщение Из ПараметрыЖурнала.МассивОшибок Цикл
МассивСообщений.Добавить(Сообщение);
КонецЦикла;
КонецЕсли;
Если СтрокаТаблицы.Выполнена Тогда
Выполнено = Выполнено + 1;
Если СтрокаТаблицы.СОшибками Тогда
СОшибками = СОшибками + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Всего = ТаблицаРассылок.Количество();
Подготовлено = Подготовленные.Количество();
НеВыполнено = Подготовлено - Выполнено;
Если Всего = 0 Тогда
ТекстСообщения = НСтр("ru = 'Выбранные группы не содержат рассылок отчетов.'");
ИначеЕсли Всего <= 5 Тогда
ТекстСообщения = "";
Для Каждого СтрокаТаблицы Из ТаблицаРассылок Цикл
Если Не СтрокаТаблицы.Подготовлена Тогда
ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" не подготовлена.'");
ИначеЕсли Не СтрокаТаблицы.Выполнена Тогда
ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" не выполнена.'");
ИначеЕсли СтрокаТаблицы.СОшибками Тогда
ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" выполнена с ошибками.'");
Иначе
ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" выполнена.'");
КонецЕсли;
ШаблонСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СтрокаТаблицы.Представление);
Если ТекстСообщения = "" Тогда
ТекстСообщения = ШаблонСообщения;
Иначе
ТекстСообщения = ТекстСообщения + Символы.ПС + Символы.ПС + ШаблонСообщения;
КонецЕсли;
КонецЦикла;
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подготовлено рассылок: %1 из %2
|Выполнено: %3
|С ошибками: %4
|Не выполнено: %5'"),
Формат(Подготовлено, "ЧН=0; ЧГ=0"), Формат(Всего, "ЧН=0; ЧГ=0"),
Формат(Выполнено, "ЧН=0; ЧГ=0"),
Формат(СОшибками, "ЧН=0; ЧГ=0"),
Формат(НеВыполнено, "ЧН=0; ЧГ=0"));
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Рассылки", ТаблицаРассылок.ВыгрузитьКолонку("Рассылка"));
Результат.Вставить("Текст", ТекстСообщения);
Результат.Вставить("Подробно", СтрокаСообщенийПользователю(МассивСообщений));
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыполнитьОтложенныйОбработчик (БСП)
ВыполнитьПроверкиВФоновомЗадании (БСП)
ВыполнитьСейчасВФонеЗавершение (БСП)