Запросница 1С. Получить результат запроса в web таблицу.

image_pdfimage_print

Доброго времени суток!

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

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

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

Сделаем конфигурацию в которой один вэб-сервис (Прикреплен к статье). И распишем функцию подробно,чтобы ее можно было подключить к любой конфигурации вручную. Все парамеры в функции строковые

Request1C — текст запроса

TableData — html строка ответа.

Возвращаем истина или ложь;

//Возврат результата запроса в 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:inetpubwwwroot для MS IIS(Internet Information Server)

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

Запрос:

var soapEnv = ; soapEnv += »;

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

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

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

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 и пишем запрос… Правильно написать запрос у меня не получается, я всегда копирую его из консоли запросов.

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

Запросница 1С

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

 

P.S.

Ну очень грубо говоря так и работает 1С тонкий и web-клиент

Обработку можно скачать  с сайта Инфостарта http://infostart.ru/public/167093

4 комментария к “Запросница 1С. Получить результат запроса в web таблицу.

  1. Ошибка инициализации модуля: Обработка.Обработка1.Форма.Форма.Форма
    по причине:
    {Обработка.Обработка1.Форма.Форма.Форма(25,27)}: Переменная не определена (JSON)
    Объект.СтрокаВозврата = <>JSON.JSON(РезЗапроса);

    в 1С 8.3 выдает, определения ни где нет ?!?!

Добавить комментарий