Загрузка данных
Функция Расш1_AddNewIncidentPost(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТелоЗапроса);
НовыйДокумент = Документы.Инцидент.СоздатьДокумент();
Массив = РазобратьJSON(ТелоЗапроса);
Если Массив.Количество() Тогда
ТекСоот = Массив[0];
// {+} ЦФ Амбарцумов 12.10.2026
Если НЕ ТекСоот.Получить("ExternalId") = Неопределено Тогда
НайденноеОбращение = Документы.Инцидент.НайтиПоРеквизиту("ВнешнийID", ТекСоот.Получить("ExternalId"));
Если НайденноеОбращение <> Документы.Инцидент.ПустаяСсылка() Тогда
Ответ.УстановитьТелоИзСтроки(ЗаписатьВJSONДокументИнцидентДетально(НайденноеОбращение).Закрыть());
Возврат Ответ;
Иначе
НовыйДокумент.ВнешнийID = ТекСоот.Получить("ExternalId");
КонецЕсли;
КонецЕсли;
Если НЕ ТекСоот.Получить("TypeOfAppel") = Неопределено Тогда
ТипОбращения = ТекСоот.Получить("TypeOfAppel");
Если ТипОбращения = "Incident" Тогда
НовыйДокумент.Тип = Справочники.ИТ_ТипыИнцидентов.НайтиПоНаименованию("Инцидент", Истина);
ИначеЕсли ТипОбращения = "ChangeRequest" Тогда
НовыйДокумент.Тип = Справочники.ИТ_ТипыИнцидентов.НайтиПоНаименованию("Запрос на изменение", Истина);
КонецЕсли;
КонецЕсли;
// {-} ЦФ Амбарцумов 12.10.2026
Если НЕ ТекСоот.Получить("Topic") = Неопределено Тогда
НовыйДокумент.ТемаОбращения = ТекСоот.Получить("Topic");
КонецЕсли;
Если НЕ ТекСоот.Получить("Data") = Неопределено Тогда
НовыйДокумент.Дата = Дата(ТекСоот.Получить("Data"));
КонецЕсли;
Если НЕ ТекСоот.Получить("Description") = Неопределено Тогда
НовыйДокумент.Описание = ТекСоот.Получить("Description");
КонецЕсли;
Если ТипЗнч(ТекСоот.Получить("MembershipServices")) = Тип("Соответствие") И
ТекСоот.Получить("MembershipServices").Получить("UID") <> Неопределено И
Не ПустаяСтрока(Строка(ТекСоот.Получить("MembershipServices").Получить("UID")) ) Тогда
НовыйДокумент.КомпонентаУслуги = Справочники.СоставУслуг.ПолучитьСсылку(
Новый УникальныйИдентификатор(ТекСоот.Получить("MembershipServices").Получить("UID")));
НовыйДокумент.Услуга = НовыйДокумент.КомпонентаУслуги.Владелец;
КонецЕсли;
Если ТипЗнч(ТекСоот.Получить("Category")) = Тип("Соответствие") И
ТекСоот.Получить("Category").Получить("UID") <> Неопределено И
Не ПустаяСтрока(Строка(ТекСоот.Получить("Category").Получить("UID") )) Тогда
НовыйДокумент.Категория = Справочники.ИТ_Категории.ПолучитьСсылку(
Новый УникальныйИдентификатор(ТекСоот.Получить("Category").Получить("UID")));
КонецЕсли;
Если ТипЗнч(ТекСоот.Получить("ConfigurationItems")) = Тип("Массив") Тогда
Для каждого Соот Из ТекСоот.Получить("ConfigurationItems") Цикл
НовыйДокумент.КонфигурационныеЕдиницы.Добавить().КЕ =
Справочники.ОбъектыОбслуживания.ПолучитьСсылку(Новый УникальныйИдентификатор(
Соот.Получить("UID")
));
КонецЦикла;
КонецЕсли;
// {+} ЦФ Амбарцумов 12.10.2026
// {+} ЦФ Амбарцумов 26.10.2026
Если ТекСоот.Получить("IsMassIncident") <> Неопределено Тогда
НовыйДокумент.ЦФ_ПодозрениеНаМассовуюПроблему = ТекСоот.Получить("IsMassIncident");
КонецЕсли;
// {-} ЦФ Амбарцумов 26.10.2026
Если НЕ ТекСоот.Получить("Initiator") = Неопределено Тогда
НовыйДокумент.КонтактноеЛицо = Справочники.ИТ_КонтактныеЛица.НайтиПоКоду(ТекСоот.Получить("Initiator"));
Иначе
НовыйДокумент.КонтактноеЛицо = ИТ_ГлобальныйМодульСервер.Ит_глЗначениеПеременной("глТекущееКонтактноеЛицо");
КонецЕсли;
// {-} ЦФ Амбарцумов 12.10.2026
НовыйДокумент.Клиент = НовыйДокумент.КонтактноеЛицо.Владелец;
НовыйДокумент.ЧасовойПоясДокумента = ПолучениеЗначенийСервер.ПолучитьПараметр("ИТ_ЧасовойПояс", ИТ_ГлобальныйМодульСервер.Ит_глЗначениеПеременной("глТекущееКонтактноеЛицо"));
НовыйДокумент.ДатаНачалаРегистрации= НовыйДокумент.Дата;
НовыйДокумент.КаналСвязи = Справочники.ИТ_КаналыСвязи.WebИнтерфейс;
//НовыйДокумент.Тип = Константы.ИТ_ТипИнцидента.Получить();
Если ЗначениеЗаполнено(НовыйДокумент.КомпонентаУслуги) И ЗначениеЗаполнено(НовыйДокумент.Услуга) Тогда
Попытка
КураторПоСЛА = ПолучитьКуратораУслуги(НовыйДокумент.Дата, НовыйДокумент.Клиент, НовыйДокумент.КомпонентаУслуги);
СтруктураОтветственного = ПолучитьСтруктуруОтветственного(НовыйДокумент.Дата, НовыйДокумент.Клиент, НовыйДокумент.КомпонентаУслуги, КураторПоСЛА);
НовыйДокумент.Ответственный = СтруктураОтветственного.Ответственный;
НовыйДокумент.ОргПодразделение = СтруктураОтветственного.ОргПодразделение;
Исключение
ЗаписьЖурналаРегистрации("Ошибка автоэскалации портала",
УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки
КонецЕсли;
Если Не ЗначениеЗаполнено(НовыйДокумент.Приоритет) Тогда
НовыйДокумент.Приоритет = Константы.ИТ_ПриоритетИнцидента.Получить();
КонецЕсли;
НовыйДокумент.РабочееМесто = ИТ_ГлобальныйМодульСервер.Ит_глЗначениеПеременной("глТекущееКонтактноеЛицо").РабМесто;
СценарийОбработки = "";
ИТ_ПравилаПереходаСервер.ПолучитьИзменениеСценарийИУстановитьСценарийВПараметр( НовыйДокумент.КомпонентаУслуги,НовыйДокумент.Клиент,
НовыйДокумент.Дата,СценарийОбработки,Ложь);
Если СценарийОбработки = "" Тогда
СценарийОбработки = Константы.ИТ_СценарийПоУмолчанию.Получить();
КонецЕсли;
СтруктураСостояний = ИТ_ПравилаПереходаСервер.ПолучитьСтруктуруСостояний(НовыйДокумент.Тип,СценарийОбработки,"Обращение",
НовыйДокумент.Состояние);
НовыйДокумент.СценарийОбработки = СценарийОбработки;
Если СтруктураСостояний.МассивСостоянийПоУмолчанию.Количество() > 0 Тогда
НовоеСостояние = СтруктураСостояний.МассивСостоянийПоУмолчанию[0];
НовыйДокумент.Состояние = НовоеСостояние;
СписокПравилДляОбработкиПриЗаписиПоСценарию = Новый СписокЗначений;
СписокПравилДляОбработкиПриЗаписиПоСценарию.ЗагрузитьЗначения(СтруктураСостояний.СоответствиеНачальныхСостояний[НовоеСостояние].Неинтерактивное);
Отказ = Ложь;
ИТ_ПравилаОбработкиСервер.ОбработатьПравило(ПредопределенноеЗначение("Перечисление.ИТ_ВидыОбъектов.Обращение"),
ПредопределенноеЗначение("Перечисление.ИТ_СобытияПравил.СценарийОбработки"),
НовыйДокумент,
Отказ ,
,
,
,
СписокПравилДляОбработкиПриЗаписиПоСценарию.ВыгрузитьЗначения() ,
Ложь);
КонецЕсли;
Попытка
ИТ_ОбщийЗакрытый.оз_НастройкаФорм("");
НовыйДокумент.Записать();
//<Форвард Кириченко добавлено 28/04/2023>
фд_ДоработкиСервер.ДобавитьСвязанныеНарядыДляОбращения(НовыйДокумент);
Исключение
Ошибка = ОписаниеОшибки();
МассивСообщений = ПолучитьСообщенияПользователю();
Для Каждого Сообщение Из МассивСообщений Цикл
Ошибка = Ошибка + " " + Сообщение.Текст;
КонецЦикла;
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ПолучитьJSONОшибка("Не удалось записать создаваемый документ"));
Возврат Ответ;
КонецПопытки;
Ответ.УстановитьТелоИзСтроки(ЗаписатьВJSONДокументИнцидентДетально(НовыйДокумент.Ссылка).Закрыть());
Иначе
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ПолучитьJSONОшибка("Не удалось получить детальные данные документа для его регистрации"));
Возврат Ответ;
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ПолучитьКуратораУслуги (ТекДата, Клиент, СоставУслуги)
ПараметрыУслуги = ПолучениеЗначенийСервер.ПолучитьПараметрыУслуги(ТекДата, Клиент, СоставУслуги);
Если ПараметрыУслуги.Свойство("Куратор") Тогда
Возврат ПараметрыУслуги.Куратор;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ПолучитьСтруктуруОтветственного(ТекДата, Клиент, СоставУслуги, КураторПоСЛА)
ОтветственныйПоSLA = ПолучитьРГПоSLA(ТекДата, Клиент, СоставУслуги);
Если ЗначениеЗаполнено(ОтветственныйПоSLA) Тогда
Ответственный = ОтветственныйПоSLA;
ОргПодразделение = ОтветственныйПоSLA;
ИначеЕсли Константы.ИспользоватьКуратора.Получить() И Не ЗначениеЗаполнено(ОргПодразделение) Тогда
Ответственный = КураторПоСЛА;
Подразделения = ПолучениеЗначенийСервер.пзПолучитьСписокПодразделений(Ответственный);
Если Подразделения.Найти(Ответственный) <> Неопределено Тогда
Подразделения.Удалить(Подразделения.Найти(Ответственный));
КонецЕсли;
Если Подразделения.Количество() = 1 Тогда
ОргПодразделение = Подразделения[0];
Иначе
ОргПодразделение = Справочники.ОрганизационныеПодразделения.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
Возврат Новый Структура("Ответственный, ОргПодразделение", Ответственный, ОргПодразделение);
КонецФункции
Функция ПолучитьРГПоSLA(ТекДата, Клиент, СоставУслуги)