ВыполнитьРассылкиВФоновомЗадании (БСП)

Автор: 1С
ОбщийМодуль.РассылкаОтчетов
БСП

Выполнить рассылки фоновом задании. Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом

// Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом
//   режиме вызывается напрямую, в клиент-серверном - через фоновое задание.
//
// Параметры:
//   ПараметрыВыполнения - Структура - выполняемые рассылки и их параметры.
//       * МассивРассылок - Массив из СправочникСсылка.РассылкиОтчетов - выполняемые рассылки.
//       * ПредварительныеНастройки - Структура - параметры см. РассылкаОтчетов.ВыполнитьРассылкуОтчетов.
//   АдресРезультата - Строка - адрес во временном хранилище, по которому будет размещен результат.
//
Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт
	МассивРассылок           = ПараметрыВыполнения.МассивРассылок;
	ПредварительныеНастройки = ПараметрыВыполнения.ПредварительныеНастройки;
	
	// Выбираем все рассылки, включая вложенные, исключая группы.
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	РассылкиОтчетов.Ссылка КАК Рассылка,
	|	РассылкиОтчетов.Представление КАК Представление,
	|	ВЫБОР
	|		КОГДА РассылкиОтчетов.Подготовлена = ИСТИНА
	|				И РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Подготовлена,
	|	ЛОЖЬ КАК Выполнена,
	|	ЛОЖЬ КАК СОшибками
	|ИЗ
	|	Справочник.РассылкиОтчетов КАК РассылкиОтчетов
	|ГДЕ
	|	РассылкиОтчетов.Ссылка В ИЕРАРХИИ(&МассивРассылок)
	|	И РассылкиОтчетов.ЭтоГруппа = ЛОЖЬ";
	
	Запрос.УстановитьПараметр("МассивРассылок", МассивРассылок);
	ТаблицаРассылок = Запрос.Выполнить().Выгрузить();
	Подготовленные = ТаблицаРассылок.НайтиСтроки(Новый Структура("Подготовлена", Истина));
	Выполнено = 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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ВыполнитьОтложенныйОбработчик (БСП)

ЗаданиеВыполнено (БСП)

ВыполнитьПроверкиВФоновомЗадании (БСП)

ВыполнитьСейчасВФоне (БСП)

ВыполнитьСейчасВФонеЗавершение (БСП)

ВыполнитьРассылку (БСП)

ВыполнитьРассылкуПоРасписанию (БСП)

ВыполнитьСейчас (БСП)

ЗапуститьФоновоеЗадание (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз