1c-obrabotki.at.ua Суббота, 08.02.2025, 04:35
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Форма входа

Меню сайта

Категории раздела
Мои файлы [62]

Курс валют
Курс Валют Информер
Российский рубль Российский рубль валюта России
(EUR)//-//
(USD)//-//
(CZK)//-//
(GBP)//-//

Главная » Файлы » Мои файлы

Запросница 1С. Получить результат запроса в web таблицу.
[ Скачать с сервера (69.3 Kb) ] 25.05.2013, 00:34

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

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

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

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

 

Добавил на страницу index.html метрику Yandex для статистики использования. Если для Вас она критична по безопасности - удалите ее код со страницы.

Категория: Мои файлы | Добавил: Sam1488
Просмотров: 1057 | Загрузок: 322 | Рейтинг: 0.0/0
Всего комментариев: 0
Погода

Поиск

Новости

Copyright MyCorp © 2025