@milofaq
c# , java developer

1с передача текста запроса в http-service, возврат рузультат в json?

Привет, нашел в инте такой http сервис под 1с. Робочий.

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


Но нужно модифицирвать так, чтоб текст лобого!!! запроса я передавал в параметре запроса, а он мне б возвращал результат в json (ето какби консоль запросов через rest)
Сам не програмист 1с, только java/c#
  • Вопрос задан
  • 3356 просмотров
Пригласить эксперта
Ответы на вопрос 3
@nuctoh
Функция ВыполнитьЗапрос(ТекстЗапроса, ПараметрыJSON)
	
	Запрос = Новый Запрос(ТекстЗапроса);
	
	//Тут парсим ПараметрыJSON
	
	тзРезультат = Запрос.Выполнить().Выгрузить();
	
	мОтвет = Новый Массив;
	
	Для Каждого ТекСтрока Из тзРезультат Цикл
		НовСтрокаОтвета = Новый Массив;
		Для Каждого ТекКолонка Из тзРезультат.Колонки Цикл
			НовСтрокаОтвета.Добавить(Новый Структура("key, val", ТекКолонка.Имя, XMLСтрока(ТекСтрока[ТекКолонка.Имя]));
		КонецЦикла;
		мОтвет.Добавить(НовСтрокаОтвета);
	КонецЦикла;
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб));
	ЗаписатьJSON(ЗаписьJSON, мОтвет);
	
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции
Ответ написан
Комментировать
nki
@nki
bezkart.ru готовая система лояльности
Видимо придется писать обработчик для каждого запроса.
Ответ написан
Комментировать
@milofaq Автор вопроса
c# , java developer
Наверно можно както обойти написание обработчик для каждого запроса.
От пример web-сервиса которий так и работает , но вертает Таблицу а нэ 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;
	Возврат Истина;
КонецФункции
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы