|
Результаты запроса в JSON. | ☑ | ||
---|---|---|---|---|
0
Naps2
05.02.20
✎
17:06
|
Пару лет назад написал небольшой внутренний веб-сервис, дабы скрестить 1С с со СКУД и в целом иметь оперативный доступ к некоторым данным. Тогда конфигурация была Аренда и управление недвижимостью 1.6 и данные я брал напрямую из базы SQL.
Теперь прешли на трёшку, в ней есть удобные http сервисы и логично брать данные через них. Накидал простейшее расширение, которое отдаёт чуть-чуть данных. Функция tenantsGetget(Запрос) Запрос = Новый Запрос("ВЫБРАТЬ |Контрагенты.Наименование КАК Наименование, |МАКСИМУМ(АР_ЗаключениеДоговораАренды.ДатаОкончанияДоговора) КАК ДатаОкончанияДоговора, |Контрагенты.Код КАК Код |ИЗ |Документ.АР_ЗаключениеДоговораАренды КАК АР_ЗаключениеДоговораАренды | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты | ПО (ДоговорыКонтрагентов.Владелец = Контрагенты.Ссылка) | ПО (АР_ЗаключениеДоговораАренды.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка) |ГДЕ |ДоговорыКонтрагентов.АР_АрендныйДоговор = Истина |СГРУППИРОВАТЬ ПО |Контрагенты.Наименование, |Контрагенты.Код |УПОРЯДОЧИТЬ ПО | Наименование;"); тзРезультат = Запрос.Выполнить().Выгрузить(); мОтвет = Новый Массив; Для Каждого ТекСтрока Из тзРезультат Цикл Структура = Новый Структура; Структура.Вставить("Name",ТекСтрока.Получить(0)); Структура.Вставить("Finish",ТекСтрока.Получить(1)); Структура.Вставить("Code",ТекСтрока.Получить(2)); мОтвет.Добавить(Структура); КонецЦикла; ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб)); ЗаписатьJSON(ЗаписьJSON, мОтвет); Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Accept-Charset", "utf-8"); Ответ.Заголовки.Вставить("Content-Type", "application/json;charset=utf-8"); Ответ.Заголовки["Cache-Control"] = "no-cache"; Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть()); Возврат Ответ; КонецФункции Всё работает, но вот каждый раз описывать структуру может быть лень когда полей станет сильно больше. На php это выглядело бы так: $Q=DB->prepare("ЗАПРОС"); $Q->execute(); $data=$Q->fetchAll(); return(json_encode($data)); Собственно вопрос, есть ли в 1С аналог fetchAll что бы скопом засунуть результат запроса в массив, который потом можно сериализировать. |
|||
1
080808Ник
05.02.20
✎
17:11
|
(0) ОбщегоНазначения.ТаблицаЗначенийВМассив(Запрос.Выполнить().Выгрузить());
|
|||
2
080808Ник
05.02.20
✎
17:11
|
// Преобразует таблицу значений в массив.
// Может использоваться для передачи на клиента данных, полученных // на сервере в виде таблицы значений в том случае, если таблица // значений содержит только такие значения, которые могут // быть переданы на клиента // // Полученный массив содержит структуры, каждая из которых повторяет // структуру колонок таблицы значений. // // Не рекомендуется использовать для преобразования таблиц значений // с большим количеством строк. // // Параметры: // ТаблицаЗначений - ТаблицаЗначений // // Возвращаемое значение: // Массив |
|||
3
080808Ник
05.02.20
✎
17:19
|
(0) а зачем описывать структуру?
делаешь так: РезультатЗапроса = Запрос.Выполнить(); ТаблицаДанных = РезультатЗапроса.Выгрузить(); ДЛя Каждого Стр из таблицаДанных Цикл Структура = Новый Структура; Для Каждого Колонка из РезультатЗапроса.Колонки Цикл Структура.Вставить(Колонка.Имя,Стр[Колонка.Имя]); КонецЦикла; КонецЦикла; |
|||
4
unenu
05.02.20
✎
17:34
|
(0) может вам к OData
https://its.1c.ru/db/fresh#content:19956692:1 |
|||
5
Naps2
06.02.20
✎
08:38
|
(1) Спасибо, идеально подходит.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |