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

Вывод данных через HTTP сервис

Автор jediAlex1985, 10 сен 2024, 10:41

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

jediAlex1985

Здравствуйте. Есть конфигурация 1С РМ (Управление проектами) Требуется сделать НТТР сервисы для обмена данными со сторонним ПО. Сделал сервис и общий модуль, в котором прописал функцию возврата данных. Даные требуются в формате JSON. Ниже текст функции общего модуля:
Функция GetPortfolios()Экспорт
// Вставить содержимое обработчика.
ЗапросПортфелей = Новый Запрос;
ЗапросПортфелей.Текст = "ВЫБРАТЬ
                        | ВЫРАЗИТЬ(упоПортфелиПроектов.Код КАК СТРОКА(50)) КАК GUID,
                        | ВЫРАЗИТЬ(упоПортфелиПроектов.Наименование КАК СТРОКА(50)) КАК Portfolio,
                        | ВЫРАЗИТЬ(упоПортфелиПроектов.ПолноеНаименование КАК СТРОКА(50)) КАК PortfolioFullName
                        |ИЗ
                        | Справочник.упоПортфелиПроектов КАК упоПортфелиПроектов";
Выборка = ЗапросПортфелей.Выполнить().Выбрать();
 

МассивДанных = новый Массив; //массив для записи итоговых данных запроса и возврата в виде JSON строки

Пока Выборка.Следующий()Цикл
СтруктураДанных =Новый Структура("GUID, Portfolio, PortfolioFullName");
ЗаполнитьЗначенияСвойств(СтруктураДанных, Выборка);
      МассивДанных.Добавить(СтруктураДанных);

КонецЦикла;
  ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивДанных);
СтрокаJSON = ЗаписьJSON.Закрыть();

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

КонецФункции
Так при тестировании сервис выдает ошибку: ГИАП_ДанныеДляВитроПланер ОбщийМодуль.Витро_МодульДляОбменаДанными.Модуль(28)}: Ошибка при вызове метода контекста (ЗаписатьJSON)

Если из запроса убрать ПолноеНаименование, т.е. сделать такой запрос:
ЗапросПортфелей.Текст = "ВЫБРАТЬ
                        | ВЫРАЗИТЬ(упоПортфелиПроектов.Код КАК СТРОКА(50)) КАК GUID,
                        | ВЫРАЗИТЬ(упоПортфелиПроектов.Наименование КАК СТРОКА(50)) КАК Portfolio"
, то работает нормально
Вот текст самого обработчика сервиса, который вызывает функцию общего модуля:
Функция GetPortfoliosGetPortfolios(Запрос)
Ответ = Новый HTTPСервисОтвет(200); 
СтрокаJSON = Витро_МодульДляОбменаДанными.GetPortfolios();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
КонецФункции

 Что не так может быть с выводом ПолногоНаименования (тип - строка(100))? Помогите, пожалуйста

wise

(0) вероятно, у Вас где-то ПУСТОе полное наименование.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

jediAlex1985

Цитата: wise от 10 сен 2024, 11:49(0) вероятно, у Вас где-то ПУСТОе полное наименование.
Оно может быть пустым, теоретически

Максим75

jediAlex1985, а в жсоне не может быть пустым.
надо чем-то заполнить
проще всего если пустое, то обычным наименованием заполнить.

antoneus

Да нормально жсон пустую строку записывает, чего вы. Скорее всего, в выборку попадает группа, а так как ПолноеНаименование - для элемента, то у группы там сидит null, а вот его уже жсон не переваривает.

jediAlex1985

antoneus, да именно дело оказалось в группе. Добавил в запрос НЕ...ЭтоГрруппа и заработало

Теги:

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

Рейтинг@Mail.ru

Поиск