HTTP Сервис выполнения запросов 1С и получения результата в HTML





Реализация алгоритма выполнения запроса 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.

3 Comments

  1. A_Max

    Как же отучать от использования временных файлов.

    Эквивалент на потоках

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«HTML»);

    Меняем на:

    ИмяВременногоФайла = Новый ПотокВПамяти;

    Ответ.

    УстановитьИмяФайлаТела(…)

    Меняем на:

    Ответ.

    УстановитьТелоИзДвоичныхДанных(ТаблицаЗначенийВHTML(ТаблицаДанных).ЗакрытьИПолучитьДвоичныеДанные () )
    Reply
  2. Eret1k

    (1)это не ко мне, как только табличный документ сможет записываться в html через поток, буду использовать его. На 8.3.12 ваш пример не сработает.

    Reply
  3. A_Max

    (2) действительно хтмл не могёт. Забавно — бред!!! Проверил на 8.3.13

    И главное нигде про это не написано, только «При работе на мобильной платформе возможно сохранение только в форматах MXL и PDF.»

    Хотя проверял на сервере.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *