Запросница 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 не будет опубликован. Обязательные поля помечены *