Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 22:46

Группировка в http запросе

Автор Sekeretteni, 06 апр 2023, 17:59

0 Пользователей и 1 гость просматривают эту тему.

Sekeretteni

Добрый день! Есть запрос, который отрабатывает и выводит данные без группировки. А как сделать, чтобы выводилась группировка по объекту(отметила на фото стрелками) и выводилось как дерево значений, к примеру.
код:
Функция TestJSON(Запрос)
   
   Объект = Запрос.ПараметрыЗапроса.Получить("Guid");
   Если Не Объект = Неопределено Тогда
      Ответ = Новый HTTPСервисОтвет(200);   
      СтрокаJSON = ВыгрузкаJSON.ПолучитьJSONНаСервере(Объект);
      Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
      Ответ.Заголовки.Вставить("Content-type", "application/json;charset=utf-8");
      Возврат Ответ;
   Иначе
      Ответ = Новый HTTPСервисОтвет(400);
      Ответ.УстановитьТелоИзСтроки("Не задан параметр Guid");
      Возврат Ответ;
   КонецЕсли;
   
КонецФункции 

 Функция ПолучитьJSONНаСервере(Объект) Экспорт
   
    УИ = Новый УникальныйИдентификатор(Объект);
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Объект", УИ);
    Запрос.Текст = "ВЫБРАТЬ
                    |ЭлементыСПП.НаименованиеСПП КАК НаименованиеСПП,
                    |ЭлементыСПП.Наименование КАК Наименование,
                    |ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ЭлементыСПП.Раздел)) КАК Раздел,
                |ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ЭлементыСПП.Родитель)) КАК Объект
                    |ИЗ
                    |Справочник.ЭлементыСПП КАК ЭлементыСПП
                    |ГДЕ
                |УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ЭлементыСПП.Родитель)=&Объект
                    |И ЭлементыСПП.НаименованиеСПП <> ""
                    |И ЭлементыСПП.Наименование <> ""
                    |И ЭлементыСПП.Родитель <> ЗНАЧЕНИЕ(Справочник.ОбъектыЗатрат.ПустаяСсылка)
                |И ЭлементыСПП.Раздел <> ЗНАЧЕНИЕ(Справочник.РазделыПроектов.ПустаяСсылка)               
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |НаименованиеСПП";
   
    Результат = Запрос.Выполнить();   
    Выборка = Результат.Выбрать();
   
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = ЛОЖЬ;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписьJson.ЗаписатьНачалоМассива();
   
    Пока Выборка.Следующий() Цикл
       ЗаписьJSON.ЗаписатьНачалоОбъекта();
      
       ЗаписьJSON.ЗаписатьИмяСвойства("Name");
       ЗаписьJson.ЗаписатьЗначение(Выборка.Наименование);
      
       ЗаписьJSON.ЗаписатьИмяСвойства("Designation");
       ЗаписьJson.ЗаписатьЗначение(Выборка.НаименованиеСПП);
      
       ЗаписьJSON.ЗаписатьИмяСвойства("PartitionGUID");
       ЗаписьJson.ЗаписатьЗначение(Выборка.Раздел);
         
       ЗаписьJSON.ЗаписатьИмяСвойства("ObjectGUID");
       ЗаписьJson.ЗаписатьЗначение(Выборка.Объект);
      
       ЗаписьJSON.ЗаписатьКонецОбъекта();
    КонецЦикла;
   
    ЗаписьJSON.ЗаписатьКонецМассива();

   
   СтрокаJSON = ЗаписьJSON.Закрыть();
   
   Возврат СтрокаJSON;
   
 КонецФункции

Максим75

Sekeretteni, так вроде бы JSON понимает массив, но не дерево.
Если группировку надо по ГУИДу - то вначале ГУИД, а потом под ним массив свойств этого ГУИДа.
Как то так.

antoneus

Ну если массив структур, в которых в один из ключей влепить массив - вполне сойдет за дерево)
По сабжу - не совсем понятна задача ("чтоб выводилось как дерево значений" - выводилось куда?), но думаю, что придется кодить)

Sekeretteni

Максим75, спасибо! то, что нужно!

Afinogen

ну судя по принскрину там неправильно структура задана
по вашему принскрину вы в JSON должны передать структуру
Где

ключ 1  - ObjectGUIDID
Ключ 2 - массив структур

где каждый элемент массива - тип структура  с ключами "name", "Designation", "PartititionGUID"

ваш код упростится

Функция ПолучитьJSONНаСервере()

Шаг  1 - создаете структуру

    СтруктураJSON = Новый Структура; //структура см. выше

    лкЗаписьJSON = Новый ЗаписьJSON;
    лкЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(,Символы.Таб));
    ЗаписатьJSON(лкЗаписьJSON,СтруктураJSON );
       
    СтрокаJSON = лкЗаписьJSON.Закрыть();

Возврат СтрокаJSON

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

Sekeretteni

Afinogen, спасибо большое!
оставлю решение для таких же джунов как я:

     Результат = Запрос.Выполнить();   
     Выборка = Результат.Выбрать();
     НоваяСтруктура = Новый Структура;
     НоваяСтруктура.Вставить("ObjectGUID", Выборка.Объект);
     
     Массив = Новый Массив;
     Структура = Новый Структура;
     
     Пока Выборка.Следующий() Цикл
         НоваяСтруктура.Вставить("ObjectGUID", Выборка.Объект);
         Структура.Вставить("Name",Выборка.Наименование);
         Структура.Вставить("Designation", Выборка.НаименованиеСПП);
         Структура.Вставить("PartitionGUID", Выборка.Раздел);
         Массив.Добавить(Структура);
     КонецЦикла;
     НоваяСтруктура.Вставить("properties", Массив);
     
     лкЗаписьJSON = Новый ЗаписьJSON;
     лкЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(,Символы.Таб));
     ЗаписатьJSON(лкЗаписьJSON,НоваяСтруктура);
     
     СтрокаJSON = лкЗаписьJSON.Закрыть();
     
     Возврат СтрокаJSON
Screenshot_2.png

Afinogen

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

внесите в тело  цикла пока , вы сейчас создали массив с идентичными значениями структур
   
Массив = Новый Массив;   
     
 Пока Выборка.Следующий() Цикл
        Структура = Новый Структура;
         Структура.Вставить("Name",Выборка.Наименование);
         Структура.Вставить("Designation", Выборка.НаименованиеСПП);
         Структура.Вставить("PartitionGUID", Выборка.Раздел);
         Массив.Добавить(Структура);
     КонецЦикла;
 
   
НоваяСтруктура.Вставить("properties", Массив);

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск