В начало

HTTP-сервис с параметрами запроса

 

Рис. Шаблон и метод

 

Листинг. Модуль сервиса

 

Функция СписокПереносовПлановойДаты(Знач ссЗаявка)

           

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |            ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗначениеДоИзменения КАК ЗначениеДоИзменения,

                        |           ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Период КАК Период,

                        |            ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗначениеПослеИзменения КАК ЗначениеПослеИзменения,

                        |           ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Резолюция КАК Резолюция,

                        |            ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Ответственный.Наименование КАК ОтветственныйНаименование,

                        |            ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.Ответственный.ИдентификаторПользователяИБ КАК ОтветственныйИД

                        |ИЗ

                        |           РегистрСведений.ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения КАК ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения

                        |ГДЕ

                        |           ЕДС_ИсторияПереносаПлановойДатыНачалаВыполнения.ЗаявкаЕДС = &ЗаявкаЕДС";

           

            Запрос.УстановитьПараметр("ЗаявкаЕДС", ссЗаявка);

           

            Результат = Запрос.Выполнить();  

            Выборка = Результат.Выбрать();

           

            мСписок = Новый Массив;

           

            Пока Выборка.Следующий() Цикл

                       

                        стСписок = Новый Структура;

                       

                        //+++ Сотрудник с идентификатором

                        стСотрудникСИД = Новый Структура;

                                   стСотрудникСИД.Вставить("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.НеИспользовать);

           

            Возврат Ответ;

КонецФункции