HelpF.pro

Как получить результат запроса в web таблицу используя Web сервис?

Медитируя на тему почему нет нормальной “Консоли запросов в управляемом приложении” захотелось покопаться в этих внутренностях 1С.

Как ставить и настраивать вэб-сервис в 1С, я не буду расказывать. Вы это легко найдете.

Идея такая: почему бы нам не создать вэб-сервис, который на строку запроса 1С выдаст web таблицу(с тэгами…). Заморачиваться с XTDO не советую, капризный он. Выдаем ответ сервера в виде строки. Данные в таблице для простоты тоже сделаем текстовыми (html).

Сделаем конфигурацию в которой один вэб-сервис (Прикреплен к статье). И распишем функцию подробно,чтобы ее можно было подключить к любой конфигурации вручную.
Все парамеры в функции строковые
Request1C – текст запроса
TableData – html строка ответа.
Возвращаем истина или ложь;
Код 1C v 8.2 УП
 //Возврат результата запроса в 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;
Возврат Истина;

КонецФункции


Публикуем web-сервис c именем testws. Для тестирования уберем из базы всех пользователей, включаем анонимную идентификацию и смотрим чтобы ресурс htp://localhost/testws/ws/testws?wsdl был доступен из браузера. Если показывает в браузере описание вэб-сервиса, значит все нормально.

Это все хорошо, но как все это показать? Сделаем страницу входа для обработки в вашем любимом Web-сервере. Или просто бросьте папку test1C в папку C:\inetpub\wwwroot для MS IIS(Internet Information Server)

Вы не разбираетесь в Web программировании – не беда. Главное усвоить основы. Мы посылаем специально подготовленный post запрос в Web-сервер, он передает его 1С и возращает ответ. И нам в браузере необходимо обработать ответ сервера.
title

Запрос:

Код
var soapEnv = ‘ ‘; soapEnv += ”;

soapEnv += $(‘#textRequest’).val(); soapEnv += ”;

#textRequest – поле нашего запроса.


Вырезаем из ответа сервера необходимое и преобразуем назад спец символы < и > на < и >.
title

Код
var strBegin = “< ; table id=’result_table’”;
var strEnd = “</m:TableData>”;
dataResponce = dataResponce.substring(dataResponce.indexOf(strBegin), dataResponce.indexOf(strEnd));
$(‘#result’).html(htmlspecialchars_decode(dataResponce));


Спасибо авторам библиотек jquery.com и tablesorter.com и их лицензиям(GPL, MIT) за их открытость. С помощью jquery не надо писать разный код под разные браузеры(они к сожалению различаются). А tablesorter используем для просоты вывода…

Заходим в браузер http://localhost/test1C и пишем запрос… Правильно написать запрос у меня не получается, я всегда копирую его из консоли запросов.

Нажимаем кнопку. И приходит к нам счастье.
title

Дополнительно скажу, что для слишком больших результатов запросов данная схема может не работать. У меня где-то начинала не выводить или выводить неправильно к 10000-100000 записям. Скорее всего ответ сервера посто не залезает в один пакет soap. А если отключить сжатие пакетов я думаю будет еще хуже. Так, что будьте осторожны.

Скачать обработку: Скачивать файлы может только зарегистрированный пользователь!

P.S.
Ну очень грубо говоря так и работает 1С тонкий и web-клиент
Автор: sikuda
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1440.html