I
I
Igor Kuibida2017-12-28 17:08:55
JSON
Igor Kuibida, 2017-12-28 17:08:55

1s passing the request text to the http-service, returning the result in json?

Hi, I found such an http service on the Internet under 1s. Working.

Функция mainGet(Запрос)
  Ответ = Новый HTTPСервисОтвет(200);
  Если НРЕГ(Запрос.ПараметрыЗапроса.Получить("action")) = "getusers" Тогда
    Ответ.УстановитьТелоИзСтроки(ВернутьСписокПользователей());
  КонецЕсли;
  Возврат Ответ;
КонецФункции
Функция ВернутьСписокПользователей()
  Запрос = Новый Запрос;
  Запрос.Текст =
  "ВЫБРАТЬ
  |	Пользователи.Ссылка
  |ИЗ
  |	Справочник.Пользователи КАК Пользователи";
  Выборка = Запрос.Выполнить().Выбрать();
  ОтветМассив = Новый Массив;
  Пока Выборка.Следующий() Цикл
    ОтветМассив.Добавить(Новый Структура("name,id",Выборка.Ссылка.Наименование,""+Выборка.Ссылка.УникальныйИдентификатор()));
  КонецЦикла;
  
  Ответ = Новый ЗаписьJSON;
  Ответ.УстановитьСтроку();
  ЗаписатьJSON(Ответ,ОтветМассив); // сериализует ОтветМассив в формат JSON
  Возврат Ответ.Закрыть();
КонецФункции

But you need to modify so that the text is large !!! I passed the request in the request parameter, and it would return the result to me in json (this is like a query console through the rest) I myself am
not a 1c programmer, only java / c #

Answer the question

In order to leave comments, you need to log in

3 answer(s)
N
nuctoh, 2018-01-17
@nuctoh

Функция ВыполнитьЗапрос(ТекстЗапроса, ПараметрыJSON)
  
  Запрос = Новый Запрос(ТекстЗапроса);
  
  //Тут парсим ПараметрыJSON
  
  тзРезультат = Запрос.Выполнить().Выгрузить();
  
  мОтвет = Новый Массив;
  
  Для Каждого ТекСтрока Из тзРезультат Цикл
    НовСтрокаОтвета = Новый Массив;
    Для Каждого ТекКолонка Из тзРезультат.Колонки Цикл
      НовСтрокаОтвета.Добавить(Новый Структура("key, val", ТекКолонка.Имя, XMLСтрока(ТекСтрока[ТекКолонка.Имя]));
    КонецЦикла;
    мОтвет.Добавить(НовСтрокаОтвета);
  КонецЦикла;
  
  ЗаписьJSON = Новый ЗаписьJSON;
  ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб));
  ЗаписатьJSON(ЗаписьJSON, мОтвет);
  
  Возврат ЗаписьJSON.Закрыть();
  
КонецФункции

K
Konstantin Nagibovich, 2017-12-28
@nki

Probably it is necessary to write the handler for each request.

I
Igor Kuibida, 2017-12-28
@milofaq

Probably you can somehow bypass writing a handler for each request.
From an example of a web service that works like this, but returns a Table and not json

//Возврат результата запроса в JSON
Функция Request1C(Request1C, ТableData, ColumnsData)
  
  Запрос = Новый Запрос;
  ТableData = "";
  Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
  ТекстЗапроса = Сериализатор.ПрочитатьXDTO(Request1C);
  Запрос.Текст = ТекстЗапроса;
  //Запрос.Текст = "ВЫБРАТЬ	Документ1.Ссылка, Документ1.Проведен ИЗ	Документ.Документ1 КАК Документ1";
           
  //Результат - таблица значений			   
  Попытка 
    ТабЗапроса = Запрос.Выполнить().Выгрузить();			   
  Исключение
    ЗаписьЖурналаРегистрации("Request1C",,,,Строка(Request1C) + " !!! "+ОписаниеОшибки());
    Возврат Ложь;
  Конецпопытки;	
  
  //Тестовый вариант
  //РазделительСтрокДляТестирования = Символы.ПС
  РазделительСтрокДляТестирования = "";
 	
  //массив колонок
  Массив = Новый Массив;
  Для каждого колонка Из ТабЗапроса.Колонки Цикл
    Стр = """"+"sTitle"+"""";
    стр = Стр + " : ";
    Стр = Стр + """"+ СокрЛП(колонка.Заголовок) + """";
    Массив.Добавить(Стр);	
  КонецЦикла;	
  Разделитель="";
  Стр="[";
    Для Каждого Элемент Из Массив Цикл
       Стр=Стр+Разделитель+РазделительСтрокДляТестирования+"{"+Элемент+"}";
       Разделитель=","
    КонецЦикла;
    ColumnsData = Стр+РазделительСтрокДляТестирования+"]";
    
  //таблица данных
  Массив.Очистить();
  РазделительСтрок="";
  Стр="["+РазделительСтрокДляТестирования;
  Для строка=0 По ТабЗапроса.Количество()-1 Цикл
    Стр = Стр + РазделительСтрок + "[";
    РазделительСтрок = "]," + РазделительСтрокДляТестирования;
    Разделитель="";
    Для кол=0 По ТабЗапроса.колонки.Количество()-1 Цикл
      Стр = Стр + Разделитель+""""+Строка(ТабЗапроса[строка][кол])+"""";
      Разделитель=",";
    КонецЦикла;
  КонецЦикла;	
  Если ТабЗапроса.Количество() > 0 Тогда
    Стр=Стр+"]";	
  КонецЕсли;	
  ТableData=Стр+РазделительСтрокДляТестирования+"]";
  Возврат Истина;
КонецФункции

//Возврат результата запроса в web table
Функция Request1CWebTable(Request1C, ТableData)
  
  Запрос = Новый Запрос;
  ТableData = "";
  Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
  ТекстЗапроса = Сериализатор.ПрочитатьXDTO(Request1C);
  Запрос.Текст = ТекстЗапроса;
           
  //Результат - таблица значений			   
  Попытка 
    ТабЗапроса = Запрос.Выполнить().Выгрузить();			   
  Исключение
    ЗаписьЖурналаРегистрации("Request1C",,,,Строка(Request1C) + " !!! "+ОписаниеОшибки());
    Возврат Ложь;
  Конецпопытки;	
  
  //строка заголовка
  ТableData = "
";
  Для каждого колонка Из ТабЗапроса.Колонки Цикл
    ТableData = ТableData +  "" + СокрЛП(колонка.Заголовок) + "";
  КонецЦикла;
  ТableData = ТableData +  "";
      
  //таблица данных
  ТableData = ТableData +  "";
  Для строка=0 По ТабЗапроса.Количество()-1 Цикл
    ТableData = ТableData +  "";
    Для кол=0 По ТабЗапроса.колонки.Количество()-1 Цикл
      ТableData = ТableData + "" + Строка(ТабЗапроса[строка][кол]) + "";
    КонецЦикла;
    ТableData = ТableData +  "";
  КонецЦикла;	
  ТableData = ТableData + "";
  ТабЗапроса = 0;
  Возврат Истина;
КонецФункции

Similar questions
K
kocherman2012-07-25 17:44:39
Is it possible to use such construction in html