ОткрытьИнцидент (БСП)

Автор: 1С
ОбщийМодуль.ИнцидентыЦККСервер
1С БСП

Открыть инцидент. Открывает инцидент. Если адрес ЦКК не указан, ничего не делает. Если инцидент отсылается чаще

// Открывает инцидент. Если адрес ЦКК не указан, ничего не делает. Если инцидент отсылается чаще 
// указанных в типе ограничений, такая отсылка будет проигнорирована без вызова исключений. 
// Если указано Асинхронно=Истина, то метод будет выполнен с помощью менеджера фоновых заданий.
//
// Параметры:
//  ТипИнцидента		- Строка - Идентификатор типа инцидента. Должен быть среди зарегистрированных типов.
//  КодИнцидента		- Строка - Строковый идентификатор инцидента. Должен быть уникален внутри типа. Если повторяется, считается, что инцидент еще раз и счетчик срабатываний его в ЦКК увеличится.
//  ТекстСообщения		- Строка - текст сообщения инцидента
//  ИнформационнаяБаза	- Строка - контекст информационной базы для инцидента
//  Кластер				- Строка - контекст кластера для инцидента.
//
Процедура ОткрытьИнцидент(Знач ТипИнцидента, Знач КодИнцидента, Знач ТекстСообщения, Знач Асинхронно = Ложь) Экспорт
	
	Если ПустаяСтрока(ТипИнцидента) Тогда	
		ВызватьИсключение НСтр("ru = 'Не указан тип инцидента'"); 
	КонецЕсли;
	Если ПустаяСтрока(КодИнцидента) Тогда	
		ВызватьИсключение НСтр("ru = 'Не указан код инцидента'"); 
	КонецЕсли;
	Если ПустаяСтрока(ТекстСообщения) Тогда	
		ВызватьИсключение НСтр("ru = 'Не указано сообщение инцидента'"); 
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина); 
	
	Если ПустаяСтрока(Константы.АдресЦКК.Получить()) ИЛИ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда	
		Возврат; 
	КонецЕсли;
	
	Если Асинхронно Тогда
		Параметры = Новый Массив();
		Параметры.Добавить(ТипИнцидента);
		Параметры.Добавить(КодИнцидента);
		Параметры.Добавить(ТекстСообщения);
		Параметры.Добавить(Ложь);
		ФоновыеЗадания.Выполнить("ИнцидентыЦККСервер.ОткрытьИнцидент", Параметры);
		Возврат;
	КонецЕсли;
	
	Если НЕ Константы.ТипыИнцидентовЦККАктуальны.Получить() Тогда
		
		НачатьТранзакцию();
		Попытка
			Блокировка = Новый БлокировкаДанных;
			ЭлементБлокировки = Блокировка.Добавить("Константа.ТипыИнцидентовЦККАктуальны");
			ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
			Блокировка.Заблокировать();		
			
			ЗарегистрироватьТипыИнцидентовВЦКК();
			Константы.ТипыИнцидентовЦККАктуальны.Установить(Истина);
			
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ВызватьИсключение;
		КонецПопытки;
			
	КонецЕсли;
	
	СписокТипов = ПолучитьТипыИнцидентов();
	Для Каждого ТекТип Из СписокТипов Цикл
		Если ТекТип.Ключ = ТипИнцидента Тогда
			
			Если ТекТип.Значение.МинутМеждуИнцидентами > 0 Тогда
				
				ЗаписьИОСО = РегистрыСведений.ИнцидентыОграничениеСкоростиОтсылки.СоздатьМенеджерЗаписи();
				ЗаписьИОСО.ТипИнцидента = ТипИнцидента;
				ЗаписьИОСО.Прочитать();
				Если ЗаписьИОСО.Выбран() Тогда
					Если ТекущаяДатаСеанса() < ЗаписьИОСО.ПоследняяОтсылка + (ТекТип.МинутМеждуИнцидентами * 60) Тогда
						Возврат; //предотвращаем более частую отсылку, чем указано в типе инцидента
					КонецЕсли;
				КонецЕсли;
				ЗаписьИОСО.ПоследняяОтсылка = ТекущаяДатаСеанса();
				ЗаписьИОСО.Записать(Истина);
				
			КонецЕсли;
			
			Инцидент = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.1c.ru/1cFresh/Incidents/1_0_1_1", "Incident"));
			Инцидент.Type		= ТипИнцидента;
			Инцидент.Id 		= КодИнцидента;
			Инцидент.Message	= ТекстСообщения;
			Инцидент.Count		= 1;
			Инцидент.Infobase	= "";
			Инцидент.Cluster	= "";
			
			Если ТекТип.Значение.КонтекстИнформационнойБазы Тогда
				ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы());
				Если ПараметрыСоединения.Свойство("Ref") И ПараметрыСоединения.Свойство("Srvr") Тогда
					Инцидент.Infobase	= ВРег(ПараметрыСоединения.Ref);
					Инцидент.Cluster	= ВРег(ПараметрыСоединения.Srvr);
				КонецЕсли;
			КонецЕсли;
			
			ВыполнитьЗапрос("Open", Инцидент);
			
			Если НЕ ПустаяСтрока(ТекТип.Значение.ПроцедураПроверки) Тогда
				
				Запись = РегистрыСведений.ИнцидентыОткрытые.СоздатьМенеджерЗаписи();
				Запись.ТипИнцидента = ТипИнцидента;
				Запись.КодИнцидента = КодИнцидента;
				Запись.ИнцидентАктуален = Истина;
				Запись.Записать(Истина);
				
			КонецЕсли;
			
			Возврат;
			
		КонецЕсли;
	КонецЦикла;
	ВызватьИсключение СтрШаблон(
		НСтр("ru = 'Тип инцидента %1 не зарегистрирован'"), 
		ТипИнцидента);
	
КонецПроцедуры

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

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

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

ПередатьТипыИнцидентовВЦКК (БСП)

ЗарегистрироватьТипыИнцидентовВЦКК (БСП)

ПометитьИнцидентКакНеактуальный (БСП)

СписокТиповИнцидентовПереопределяемый (БСП)

СписокТиповИнцидентовСлужебный (БСП)

СоздатьОписаниеТипаИнцидента (БСП)

ТипИнцидента_НеНайденаУслугаПоИдентификаторуУслугиИИдентификаторуПоставщика (БСП)

СоздатьЗаписьТипа (БСП)

ОткрытьОкно (БСП)

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