ДоставитьСообщения (БСП)

Автор: 1С
ОбщийМодуль.ОбменСообщениями
БСП

Доставить сообщения. Выполняет немедленную отправку быстрых сообщений из общей очереди сообщений.

// Выполняет немедленную отправку быстрых сообщений из общей очереди сообщений.
// Отправка сообщений выполняется в цикле до тех пор, пока из очереди сообщений не будут отправлены все быстрые
// сообщения.
// На время отправки сообщений блокируется немедленная отправка сообщений из других сеансов.
//
Процедура ДоставитьСообщения() Экспорт
	
	Если ТранзакцияАктивна() Тогда
		ВызватьИсключение НСтр("ru = 'Доставка быстрых сообщений системы не может выполняться в активной транзакции.'");
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если Не НачатьОтправкуБыстрыхСообщений() Тогда
		Возврат;
	КонецЕсли;
	
	ТекстЗапроса = "";
	СправочникиСообщений = ОбменСообщениямиПовтИсп.ПолучитьСправочникиСообщений();
	Для Каждого СправочникСообщений Из СправочникиСообщений Цикл
		
		ЭтоПервыйФрагмент = ПустаяСтрока(ТекстЗапроса);
		
		Если Не ЭтоПервыйФрагмент Тогда
			
			ТекстЗапроса = ТекстЗапроса + "
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|"
			
		КонецЕсли;
		
		ТекстЗапроса = ТекстЗапроса
			+ "ВЫБРАТЬ
			|	ТаблицаИзменений.Узел КАК КонечнаяТочка,
			|	ТаблицаИзменений.Ссылка КАК Сообщение
			|[ПОМЕСТИТЬ]
			|ИЗ
			|	[СправочникСообщений].Изменения КАК ТаблицаИзменений
			|ГДЕ
			|	ТаблицаИзменений.Ссылка.ЭтоБыстроеСообщение
			|	И ТаблицаИзменений.НомерСообщения ЕСТЬ NULL
			|	И НЕ ТаблицаИзменений.Узел В (&НедоступныеКонечныеТочки)";
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СправочникСообщений]", СправочникСообщений.ПустаяСсылка().Метаданные().ПолноеИмя());
		Если ЭтоПервыйФрагмент Тогда
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПОМЕСТИТЬ]", "ПОМЕСТИТЬ ВТ_Изменения");
		Иначе
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПОМЕСТИТЬ]", "");
		КонецЕсли;		
	КонецЦикла;
	
	ТекстЗапроса = ТекстЗапроса + "
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_Изменения.КонечнаяТочка КАК КонечнаяТочка,
	|	ВТ_Изменения.Сообщение
	|ИЗ
	|	ВТ_Изменения КАК ВТ_Изменения
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВТ_Изменения.Сообщение.Код
	|ИТОГИ ПО
	|	КонечнаяТочка";
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	НедоступныеКонечныеТочки = Новый Массив;
	
	Попытка
		
		Пока Истина Цикл
			
			Запрос.УстановитьПараметр("НедоступныеКонечныеТочки", НедоступныеКонечныеТочки);
			
			РезультатЗапроса = РаботаВМоделиСервиса.ВыполнитьЗапросВнеТранзакции(Запрос);
			
			Если РезультатЗапроса.Пустой() Тогда
				Прервать;
			КонецЕсли;
			
			Группы = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
			
			Для Каждого Группа Из Группы.Строки Цикл
				
				Сообщения = Группа.Строки.ВыгрузитьКолонку("Сообщение");
				
				Попытка
					
					ДоставитьСообщенияПолучателю(Группа.КонечнаяТочка, Сообщения);
					
					УдалитьРегистрациюИзменений(Группа.КонечнаяТочка, Сообщения);
					
				Исключение
					
					НедоступныеКонечныеТочки.Добавить(Группа.КонечнаяТочка);
					
					ЗаписьЖурналаРегистрации(ОбменСообщениямиВнутренний.СобытиеЖурналаРегистрацииЭтойПодсистемы(),
											УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
				КонецПопытки;
				
			КонецЦикла;
			
		КонецЦикла;
		
	Исключение
		ОтменитьОтправкуБыстрыхСообщений();
		ВызватьИсключение;
	КонецПопытки;
	
	ЗавершитьОтправкуБыстрыхСообщений();
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

ДоставитьБыстрыеСообщения (БСП)

ЗагрузитьСообщение (БСП)

ОтправитьСообщение (БСП)

НовоеСообщение (БСП)

СформироватьСообщение (БСП)

СообщениеПрогресса (БСП)

ЗагрузитьСообщения (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом