Реализация алгоритма выполнения запроса 1С поверх HTTP.
Warning
Данная статья не претендует на оригинальность и не является конечным решением. Подходы решения задач и примеры программного кода несут исключительно обучающий характер. |
// получим html из таблици значений при помощи построителя отчетов
Функция ТаблицаЗначенийВHTML(ТаблицаДанных)
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных);
ДокументРезультат = Новый ТабличныйДокумент;
Построительотчета.Вывести(ДокументРезультат);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("HTML");
ДокументРезультат.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.HTML4);
// тут уже вформированный HTML
Возврат ИмяВременногоФайла;
КонецФункции
// тут все просто
Функция СформироватьИВыполнитьЗапрос(ТекстЗапроса, ПараметрыЗапроса)
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Для Каждого ОписаниеПараметра Из Запрос.НайтиПараметры() Цикл
Запрос.УстановитьПараметр(ОписаниеПараметра.Имя, ПараметрыЗапроса.Получить(ОписаниеПараметра.Имя));
КонецЦикла;
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса.Выгрузить();
КонецФункции
Функция Ext_1CSQLQuery(Запрос)
// предлологается что текст запроса будет установлен в параметр textquery
ТекстЗапроса = Запрос.ПараметрыЗапроса.Получить("textquery");
// проверим его наличие
Если ТекстЗапроса = Неопределено Тогда
Возврат Новый HTTPСервисОтвет(400);
КонецЕсли;
// новый ответ
Ответ = Новый HTTPСервисОтвет(200);
// установим тип содержимого ответа
Ответ.Заголовки["Content-Type"] = "text/html; charset=utf-8";
// выполним запрос 1с и выгрузим ответ
ТаблицаДанных = СформироватьИВыполнитьЗапрос(ТекстЗапроса ,Запрос.ПараметрыЗапроса);
// преобразуем ответ в HTML стандартными средсвами 1С
Ответ.УстановитьИмяФайлаТела(ТаблицаЗначенийВHTML(ТаблицаДанных));
// вернем ответ от сервера
Возврат Ответ;
КонецФункции
Пример Get зароса:
http://centos-s-1vcpu/1CDB_test1/hs/1CSQLExecuter/query?textquery=Выбрать%20%26Параметр1%20как%20поле1&Параметр1=999
Подробное описание реализации:
- Клиент или web браузер делает Get запрос на сервер, где опубликован сервис;
- В параметрах Get запроса передаются текст и параметры запроса;
- На сервере создается новый запрос, результат запроса выгружается в построитель отчета;
- Построитель отчета выгружает отчет в табличный документ;
- Табличный документ сохраняем как документ HTML;
- Возвращаем HTML клиенту.
Для передачи теста запроса кириллицей и спецсимволов, нужно обработать URL Encode.
Как же отучать от использования временных файлов.
Эквивалент на потоках
Меняем на:
Ответ.
Меняем на:
Ответ.
(1)это не ко мне, как только табличный документ сможет записываться в html через поток, буду использовать его. На 8.3.12 ваш пример не сработает.
(2) действительно хтмл не могёт. Забавно — бред!!! Проверил на 8.3.13
И главное нигде про это не написано, только «При работе на мобильной платформе возможно сохранение только в форматах MXL и PDF.»
Хотя проверял на сервере.