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



Делаем Web Сервис который возвратит результат запроса в классическую Web таблицу. И немного ее разукрасим с помощью JQuery и tablesorter.

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

Медитируя на тему почему нет нормальной «Консоли запросов в управляемом приложении» захотелось покопаться в этих внутренностях 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 = «&lt ; table id=’result_table'»;
  var
strEnd = «&lt/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 для статистики использования. Если для Вас она критична по безопасности — удалите ее код со страницы.

 

Читатйте эту и другие статьи на www.sikuda.ru

 

23 Comments

  1. Abadonna

    Хотя бы оригинально. +

    Reply
  2. DitriX

    Прикольно, вот только бы еще конструктор был как в 1с 🙂 и возможность сохранять ранее созданные запросы + окно авторизации… ммм….

    Reply
  3. MNevgeny

    Молодец автор, нестандартный подход. Я думаю его возьмут многие за основу получения оперативных данных прямо из браузеров. Ведь если подумать, текст запроса можно заранее зашить в модуль, а пользователям (директору) дать просто ссылочку по которой он увидит(находясь в отпуске…) приход финансовых средств. Ну или еще чего…

    Reply
  4. An-Aleksey

    Выглядит креативно, описано доступным языком. Что еще нужно для хорошей публикации? Однозначно + 🙂

    Reply
  5. sikuda

    2. Думаю в этом направлении, только пока слабое знание web программирования и большие трудозатраты останавливают…

    Reply
  6. help1Ckr

    Спасибо огромное. Если бы еще поделились ссылкой на литературу по веб для чайников по этой теме. А то есть идея прикрутить к корпоративному сайту страницу для клиентов с данными, но к сожалению в веб вообще не знаю(

    Reply
  7. sikuda

    (6) Для совсем не представляющих что это такое — htmlbook.ru

    А eb-services и в том числе 1С — лучше начать с основ http://w3schools.com/webservices/default.asp

    Reply
  8. Yurkiss

    Писал почти тоже самое, только веб часть написана на Java для размещения на бесплатном хостинге Google App Engine, могу поделится если кому интересно.

    Reply
  9. help1Ckr

    (7) Спасибо большое

    Reply
  10. Raminus

    Хорошая публикация, плюс однозначно!

    Reply
  11. Asmody

    к этому теперь добавить сериализатор JSON в 1С (где-то такой проскакивал), шаблонизатор jquery (тыщщи их) или вообще ExtJS (aka Sencha), и можно рисовать свой «web-клиент»

    Reply
  12. sikuda

    11. Сам сначала подумывал выдавать JSON. Но он слишком привязывает тебя к тому куда выводишь типа datatable. А мне хотелось показать именно простой принцип, и tablesorter очень хорошо для этого подошел.

    8. Да сейчас другие времена и mainstream ушел в javascript(привет Windows8).

    Reply
  13. sergeykuznecov

    А нельзя ли там же образом обращаться к методам и объектам конфигурации?

    Reply
  14. sikuda

    (13) Да не документировано можно, но это не правильно. Вэб-сервисы и делались как единая точка получения данных из внешней системы типа 1С. Лучше делать обращение методам и функциям делать внутри вэб-сервиса.

    Reply
  15. ArtfulCrom

    Спасибо! Но вот все же про создание и примеры самих вэб-сервисов почитал бы.

    Ссылка http://w3schools.com/webservices/default.asp которую вы привели Выше — достаточно что бы научиться создавать вэбС для 1С вообще и в САМОЙ 1С в частности? или еще, что то порекомендуете?

    Reply
  16. sikuda

    (15) ArtfulCrom,

    У меня философия такая общие знания (http://w3schools.com) изучаются всеми. Технологии SOAP, XML Schemа.

    Применение — конечный коммерческий продукт 1С, по вэб-сервисам (Книга 1С). Применение этих стандартов 1С — XDTO-пакеты (статья), Web-сервисы, WS-Ссылки.

    Советую идти с головы.

    Reply
  17. sikuda

    (17) Не согласен. Доступ через вэб-сервис проходит такую-же систему идентификации 1С как и любой доступ к базе. Посмотрите на стандартные вэб-сервисы БП3, Стандартной библиотеки вы хотите сказать что они не так-же безопасны если их опубликовать?

    Вообще любое получение данных из интернета лучше минимизировать.

    Посмотрите http://habrahabr.ru/post/145566/ и подумайте…

    Reply
  18. lalmir

    Скачал конфигурацию, а на файл «Папка для web-сервера» закончились $m. Скинте пожалуйста ее на ящик latypov-almir@mail.ru. Хочется поэксперементировать. Заранее спасибо.

    Reply
  19. sikuda

    Заходите на сайт sikuda.ru. Комментируйте статью.

    Reply
  20. w-divin

    +(19) не пойму в чем прикол выкладывать одну разработку 2мя частями…

    Reply
  21. sikuda

    (21) Популизирую свой сайт http://www.sikuda.ru. Там все можно скачать за регистрацию.

    Reply
  22. crosby

    Не работает. Посылаю запрос. В журнале регистрации по «WS-соединение» только «Начало сеанса» и сразу «Завершение сеанса». Код в модуле web-сервиса не выполняется.

    Reply
  23. silberRus

    (8) Yurkiss, мне интересно на явескрипт посмотреть (8)

    Reply

Leave a Comment

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