Открыть инцидент. Открывает инцидент. Если адрес ЦКК не указан, ничего не делает. Если инцидент отсылается чаще
// Открывает инцидент. Если адрес ЦКК не указан, ничего не делает. Если инцидент отсылается чаще
// указанных в типе ограничений, такая отсылка будет проигнорирована без вызова исключений.
// Если указано Асинхронно=Истина, то метод будет выполнен с помощью менеджера фоновых заданий.
//
// Параметры:
// ТипИнцидента - Строка - Идентификатор типа инцидента. Должен быть среди зарегистрированных типов.
// КодИнцидента - Строка - Строковый идентификатор инцидента. Должен быть уникален внутри типа. Если повторяется, считается, что инцидент еще раз и счетчик срабатываний его в ЦКК увеличится.
// ТекстСообщения - Строка - текст сообщения инцидента
// ИнформационнаяБаза - Строка - контекст информационной базы для инцидента
// Кластер - Строка - контекст кластера для инцидента.
//
Процедура ОткрытьИнцидент(Знач ТипИнцидента, Знач КодИнцидента, Знач ТекстСообщения, Знач Асинхронно = Ложь) Экспорт
Если ПустаяСтрока(ТипИнцидента) Тогда
ВызватьИсключение НСтр("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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПередатьТипыИнцидентовВЦКК (БСП)
ЗарегистрироватьТипыИнцидентовВЦКК (БСП)
ПометитьИнцидентКакНеактуальный (БСП)
СписокТиповИнцидентовПереопределяемый (БСП)
СписокТиповИнцидентовСлужебный (БСП)
СоздатьОписаниеТипаИнцидента (БСП)
ТипИнцидента_НеНайденаУслугаПоИдентификаторуУслугиИИдентификаторуПоставщика (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)