|
Функция СписокПереносовПлановойДаты(Знач ссЗаявка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗначениеДоИзменения
КАК ЗначениеДоИзменения,
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Период
КАК Период,
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗначениеПослеИзменения
КАК ЗначениеПослеИзменения,
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Резолюция
КАК Резолюция,
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Ответственный.Наименование
КАК ОтветственныйНаименование,
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Ответственный.ИдентификаторПользователяИБ
КАК ОтветственныйИД
|ИЗ
| РегистрСведений.ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения
КАК ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения
|ГДЕ
| ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗаявкаЕДС
= &ЗаявкаЕДС";
Запрос.УстановитьПараметр("ЗаявкаЕДС", ссЗаявка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
мСписок = Новый Массив;
Пока Выборка.Следующий() Цикл
стСписок = Новый
Структура;
//+++ Сотрудник с идентификатором
стСотрудникСИД =
Новый Структура;
стСотрудникСИД.Вставить("fullname", Выборка.ОтветственныйНаименование);
стСотрудникСИД.Вставить("id", Строка(Выборка.ОтветственныйИД));
//---
Сотрудник с идентификатором
стСписок.Вставить("datetime", Выборка.Период);
стСписок.Вставить("executionAfter", Выборка.ЗначениеПослеИзменения);
стСписок.Вставить("executionBefore", "");//???
стСписок.Вставить("resolution", Выборка.Резолюция);
стСписок.Вставить("postponedBy", стСотрудникСИД);
мСписок.Добавить(стСписок);
КонецЦикла;
Возврат мСписок;
КонецФункции
Функция ЗаявкиВИнтервалеGET(Запрос)
//======================================================================
// Запрос
исторических данных
//-
Интервал: произвольный диапазон дат.
//-
Используется для первичной загрузки или повторной синхронизации.
//-
Запрашивается по 1000 элементов на странице.
//======================================================================
//Строка для браузера
//1.2.3.4:8080/eds_test_copy/hs/zayavki/summary?from=20240204&to=20240205&offset=100&batch=200&page=1
//======================
//Параметры запроса
//======================
стрДатаНачала = Запрос.ПараметрыЗапроса.Получить("from");
Если ЗначениеЗаполнено(стрДатаНачала) Тогда
Если СтрНайти(стрДатаНачала, "T") = 0 Тогда
ДатаНачала
= Дата(стрДатаНачала);
Иначе
ДатаНачала
= XMLЗначение(Тип("Дата"), стрДатаНачала);//XMLЗначение(Тип("Дата"),
"2024-02-04T00:00:00Z")
КонецЕсли;
Иначе
ДатаНачала =
Дата(1, 1, 1);
КонецЕсли;
стрДатаОкончания = Запрос.ПараметрыЗапроса.Получить("to");
Если ЗначениеЗаполнено(стрДатаОкончания) Тогда
Если СтрНайти(стрДатаОкончания, "T") = 0 Тогда
ДатаОкончания
= Дата(стрДатаОкончания);
Иначе
ДатаОкончания
= XMLЗначение(Тип("Дата"), стрДатаОкончания);
КонецЕсли;
Иначе
ДатаОкончания = ТекущаяДата();
КонецЕсли;
стрOffset = Запрос.ПараметрыЗапроса.Получить("offset");
Если ЗначениеЗаполнено(стрOffset) Тогда
Попытка
чOffset
= Число(стрOffset);
Исключение
чOffset
= 0;
КонецПопытки;
Иначе
чOffset = 0;//По
умолчанию 0
КонецЕсли;
стрBatch = Запрос.ПараметрыЗапроса.Получить("batch");
Если ЗначениеЗаполнено(стрBatch) Тогда
Попытка
чBatch
= Число(стрBatch);
Исключение
чBatch
= 1000;
КонецПопытки;
Иначе
чBatch = 1000;//по умолчанию 1000
КонецЕсли;
стрPage = Запрос.ПараметрыЗапроса.Получить("page");
Если ЗначениеЗаполнено(стрPage) Тогда
Попытка
чPage
= Число(стрPage);
чPage
= ?(чPage < 1, 1, чPage);
Исключение
чPage
= 1;
КонецПопытки
Иначе
Page = "1";//по умолчанию 1
КонецЕсли;
Запрос2 = Новый Запрос;
Запрос2.Текст = ТекстЗапроса();
//Для выборки
Если ТипЗнч(чPage) = Тип("Число") И
ТипЗнч(чBatch) =
Тип("Число") Тогда
//Запрос2.Текст = СтрЗаменить(Запрос2.Текст,
"5555", Формат(чOffset + чPage*чBatch, "ЧН=0;
ЧГ="));//Разрядность и прочее
Запрос2.Текст = СтрЗаменить(Запрос2.Текст,
"5555", Формат(чPage*чBatch,
"ЧН=0; ЧГ="));//Разрядность и прочее
КонецЕсли;
//Для исключения
Если ТипЗнч(чPage) = Тип("Число") И
ТипЗнч(чBatch) =
Тип("Число") Тогда
//Запрос2.Текст = СтрЗаменить(Запрос2.Текст,
"7777", Формат(чOffset + (чPage - 1)*чBatch, "ЧН=0;
ЧГ="));//Разрядность и прочее
//Запрос2.Текст = СтрЗаменить(Запрос2.Текст,
"7777", Формат((чPage - 1)*чBatch, "ЧН=0; ЧГ="));//Разрядность и прочее
Запрос2.Текст = СтрЗаменить(Запрос2.Текст,
"7777", "0");//Буду делить на странице в цикле
КонецЕсли;
Запрос2.УстановитьПараметр("ДатаНачала",
ДатаНачала);
Запрос2.УстановитьПараметр("ДатаОкончания",
ДатаОкончания);
Результат = Запрос2.Выполнить();
Выборка = Результат.Выбрать();
ТЗ = Результат.Выгрузить();
МассивЗаявок = Новый Массив;
Для Индекс = (чPage - 1)*чBatch По Мин(чPage*чBatch, ТЗ.количество()) - 1
Цикл
стЗаявки = Новый
Структура;
стЗаявки.Вставить("id", Строка(ТЗ[Индекс].Ссылка.УникальныйИдентификатор()));
стЗаявки.Вставить("number", Формат(ТЗ[Индекс].Номер, "ЧГ="));
стЗаявки.Вставить("datetime", XMLСтрока(ТЗ[Индекс].Дата));//"2025-07-01T08:15:00Z"
стЗаявки.Вставить("status", ТЗ[Индекс].Статус);
стЗаявки.Вставить("type", Строка(ТЗ[Индекс].ВидЗаявки));
стЗаявки.Вставить("category", Строка(ТЗ[Индекс].ТематикаДокумента));
стЗаявки.Вставить("description", ТЗ[Индекс].Содержание);
стЗаявки.Вставить("executionAfter", XMLСтрока(ТЗ[Индекс].ПлановаяДатаНачалаВыполнения));//"2025-07-01T08:15:00Z"
стЗаявки.Вставить("executionBefore",
XMLСтрока(ТЗ[Индекс].ПлановаяДатаОкончанияВыполнения));//"2025-07-01T08:15:00Z"
//+++Исполнитель заявки
стИсполнительЗаявки
= Новый Структура;
стИсполнительЗаявки.Вставить("name", Строка(ТЗ[Индекс].Исполнитель));
стИсполнительЗаявки.Вставить("id", Строка(ТЗ[Индекс].Исполнитель.УникальныйИдентификатор()));
стИсполнительЗаявки.Вставить("inn", Строка(ТЗ[Индекс].ИсполнительИНН));
стИсполнительЗаявки.Вставить("isContractor", "");
//---Исполнитель заявки
//+++Адрес
стАдреса = Новый
Структура;
стАдреса.Вставить("city", Строка(ТЗ[Индекс].Город));
стАдреса.Вставить("locality", Строка(ТЗ[Индекс].НаселенныйПункт));
стАдреса.Вставить("street", Строка(ТЗ[Индекс].Улица));
стАдреса.Вставить("buildingNumber", Строка(ТЗ[Индекс].НомерДома));
стАдреса.Вставить("buildingCorp", Строка(ТЗ[Индекс].Корпус));
стАдреса.Вставить("buildingBlock", Строка(ТЗ[Индекс].Строение));
стАдреса.Вставить("room", Строка(ТЗ[Индекс].НомерПомещения));
стАдреса.Вставить("entrance", ТЗ[Индекс].НомерПодъезда);//Число
стАдреса.Вставить("floor", ТЗ[Индекс].Этаж);//Число
стАдреса.Вставить("fiasId", Строка(ТЗ[Индекс].КодФИАС));
стАдреса.Вставить("internalId", Строка(ТЗ[Индекс].Внешнийкод));//Внутренний
идентификатор адреса - Непонятно что это?
стАдреса.Вставить("maintainer", стИсполнительЗаявки);
стЗаявки.Вставить("address", стАдреса);
//---Адрес
//+++Сотрудник БЕЗ идентификатора
стСотрудникБезИД
= Новый Структура;
стСотрудникБезИД.Вставить("fullname", Строка(ТЗ[Индекс].ОператорОткрытия));
//---Сотрудник БЕЗ идентификатора
//+++ Сотрудник с идентификатором
стСотрудникСИД =
Новый Структура;
стСотрудникСИД.Вставить("fullname", Строка(ТЗ[Индекс].ОператорОткрытия));
стСотрудникСИД.Вставить("id", Строка(ТЗ[Индекс].ИдентификаторПользователяИБ));
//---
Сотрудник с идентификатором
//+++Источник поступления заявки
стИсточникПоступленияЗаявки
= Новый Структура;
стИсточникПоступленияЗаявки.Вставить("channel", Строка(ТЗ[Индекс].ИсточникПоступленияЗаявки));
стИсточникПоступленияЗаявки.Вставить("operator", стСотрудникСИД);
стЗаявки.Вставить("source", стИсточникПоступленияЗаявки);
//---Источник поступления заявки
//+++Информация о заявителе
стИнформацияОЗаявителе
= Новый Структура;
стИнформацияОЗаявителе.Вставить("fullname", ТЗ[Индекс].ФИО);
стИнформацияОЗаявителе.Вставить("telephone", ТЗ[Индекс].Телефон);
стИнформацияОЗаявителе.Вставить("email", ТЗ[Индекс].email);
стИнформацияОЗаявителе.Вставить("address", стАдреса);
стЗаявки.Вставить("requestor", стИнформацияОЗаявителе);
//---Информация о заявителе
//==================
//==================
//Исполнение заявки
//==================
//==================
//+++Принял заявку
стПринялЗаявку =
Новый Структура;
стПринялЗаявку.Вставить("fullname", Строка(ТЗ[Индекс].Исполнение_ПринялЗаявку));
//---Принял заявку
//+++Назначен сотрудник
стНазначенСотрудник
= Новый Структура;
стНазначенСотрудник.Вставить("fullname", Строка(ТЗ[Индекс].Исполнение_НазначенСотрудник));
//---Назначен сотрудник
//+++Принял исполнение
стПринялИсполнение
= Новый Структура;
стПринялИсполнение.Вставить("fullname", Строка(ТЗ[Индекс].Исполнение_ПринялИсполнение));
//---Принял исполнение
//+++Мастер
стМастер = Новый
Структура;
стМастер.Вставить("fullname", Строка(ТЗ[Индекс].МастерНаименование));
стМастер.Вставить("id", Строка(ТЗ[Индекс].МастерКод));
//---Мастер
//+++Работник
стРаботник =
Новый Структура;
стРаботник.Вставить("fullname", Строка(ТЗ[Индекс].РаботникНаименование));
стРаботник.Вставить("id", Строка(ТЗ[Индекс].РаботникКод));
//---Работник
//+++Итоговая информация о выполнении заявки
стИтоговаяИнформацияОВыполнении
= Новый Структура;
стИтоговаяИнформацияОВыполнении.Вставить("isDeclined", ТЗ[Индекс].ПризнакОтказаИсполнения);
стИтоговаяИнформацияОВыполнении.Вставить("declineReason", Строка(ТЗ[Индекс].ПричинаОтказа));
стИтоговаяИнформацияОВыполнении.Вставить("description", ТЗ[Индекс].ВыполненныеРаботы);
стИтоговаяИнформацияОВыполнении.Вставить("isWarantyGiven", ТЗ[Индекс].ПредоставленаГарантия);
стИтоговаяИнформацияОВыполнении.Вставить("warantyGivenDays", ТЗ[Индекс].СрокГарантии);
стИтоговаяИнформацияОВыполнении.Вставить("isWarantyServiceDeclined",
ТЗ[Индекс].ОтказВГарантийномОбслуживании);
стИтоговаяИнформацияОВыполнении.Вставить("warantyServiceDeclinedReason",
ТЗ[Индекс].ПричинаОтказаВГарантийномОбслуживании);
стИтоговаяИнформацияОВыполнении.Вставить("comment", ТЗ[Индекс].ПровереноКомментарий);
стИтоговаяИнформацияОВыполнении.Вставить("executionComment", ТЗ[Индекс].Исполнение_Комментарий);
//---Итоговая информация о выполнении
заявки
//+++Данные о процессе исполнения заявки
стИсполнениеЗаявки
= Новый Структура;
стИсполнениеЗаявки.Вставить("recievedDatetime",
XMLСтрока(ТЗ[Индекс].Исполнение_ПринялЗаявкуДатаВремя));//2025-07-01T08:20:00Z
стИсполнениеЗаявки.Вставить("assignmentDatetime", XMLСтрока(ТЗ[Индекс].Исполнение_НазначенСотрудникДатаВремя));//2025-07-01T08:20:00Z
стИсполнениеЗаявки.Вставить("executionDatetime", XMLСтрока(ТЗ[Индекс].Исполнение_ПринялИсполнениеДатаВремя));
стИсполнениеЗаявки.Вставить("closeDatetime", XMLСтрока(ТЗ[Индекс].ДатаВремяЗакрытия));//2025-07-02T09:00:00Z
стИсполнениеЗаявки.Вставить("checkedDatetime", XMLСтрока(ТЗ[Индекс].ПровереноДатаВремя));//2025-07-02T09:00:00Z
стИсполнениеЗаявки.Вставить("isReopened", ТЗ[Индекс].ПовторноеИсполнение);
стИсполнениеЗаявки.Вставить("recievedBy", стПринялЗаявку);
стИсполнениеЗаявки.Вставить("executor", стНазначенСотрудник);
стИсполнениеЗаявки.Вставить("submitedBy", стПринялИсполнение);
стИсполнениеЗаявки.Вставить("masterEmployee", стМастер);
стИсполнениеЗаявки.Вставить("employee", стРаботник);
стИсполнениеЗаявки.Вставить("isWarantyService", ТЗ[Индекс].Гарантийная);
стИсполнениеЗаявки.Вставить("warantyExtensionDays", ТЗ[Индекс].ПродлениеГарантии);
стИсполнениеЗаявки.Вставить("executorOrg", стИсполнительЗаявки);
стИсполнениеЗаявки.Вставить("resolution", стИтоговаяИнформацияОВыполнении);
стЗаявки.Вставить("execution", стИсполнениеЗаявки);
//---Данные о процессе исполнения заявки
стЗаявки.Вставить("postponements", СписокПереносовПлановойДаты(ТЗ[Индекс].Ссылка));
МассивЗаявок.Добавить(стЗаявки);
КонецЦикла;
стДок = Новый Структура;
стДок.Вставить("total", Мин(чPage*чBatch, ТЗ.количество()) - (чPage - 1)*чBatch);
стДок.Вставить("items", МассивЗаявок);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, стДок);
СтрокаДляОтвета = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type",
"application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета,
КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
|