Доброго времени суток!
Медитируя на тему почему нет нормальной «Консоли запросов в управляемом приложении» захотелось покопаться в этих внутренностях 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 для статистики использования. Если для Вас она критична по безопасности — удалите ее код со страницы.
Читатйте эту и другие статьи на www.sikuda.ru
Хотя бы оригинально. +
Прикольно, вот только бы еще конструктор был как в 1с 🙂 и возможность сохранять ранее созданные запросы + окно авторизации… ммм….
Молодец автор, нестандартный подход. Я думаю его возьмут многие за основу получения оперативных данных прямо из браузеров. Ведь если подумать, текст запроса можно заранее зашить в модуль, а пользователям (директору) дать просто ссылочку по которой он увидит(находясь в отпуске…) приход финансовых средств. Ну или еще чего…
Выглядит креативно, описано доступным языком. Что еще нужно для хорошей публикации? Однозначно + 🙂
2. Думаю в этом направлении, только пока слабое знание web программирования и большие трудозатраты останавливают…
Спасибо огромное. Если бы еще поделились ссылкой на литературу по веб для чайников по этой теме. А то есть идея прикрутить к корпоративному сайту страницу для клиентов с данными, но к сожалению в веб вообще не знаю(
(6) Для совсем не представляющих что это такое —htmlbook.ru
http://w3schools.com/webservices/default.asp
А eb-services и в том числе 1С — лучше начать с основ
Писал почти тоже самое, только веб часть написана на Java для размещения на бесплатном хостинге Google App Engine, могу поделится если кому интересно.
(7) Спасибо большое
Хорошая публикация, плюс однозначно!
к этому теперь добавить сериализатор JSON в 1С (где-то такой проскакивал), шаблонизатор jquery (тыщщи их) или вообще ExtJS (aka Sencha), и можно рисовать свой «web-клиент»
11. Сам сначала подумывал выдавать JSON. Но он слишком привязывает тебя к тому куда выводишь типаdatatable . А мне хотелось показать именно простой принцип, и tablesorter очень хорошо для этого подошел.
8. Да сейчас другие времена и mainstream ушел в javascript(привет Windows8).
А нельзя ли там же образом обращаться к методам и объектам конфигурации?
(13) Да не документировано можно, но это не правильно. Вэб-сервисы и делались как единая точка получения данных из внешней системы типа 1С. Лучше делать обращение методам и функциям делать внутри вэб-сервиса.
Спасибо! Но вот все же про создание и примеры самих вэб-сервисов почитал бы.
http://w3schools.com/webservices/default.asp которую вы привели Выше — достаточно что бы научиться создавать вэбС для 1С вообще и в САМОЙ 1С в частности? или еще, что то порекомендуете?
Ссылка
(15) ArtfulCrom,
http://w3schools.com ) изучаются всеми. Технологии SOAP, XML Schemа.
Книга 1С ). Применение этих стандартов 1С — XDTO-пакеты (статья ), Web-сервисы, WS-Ссылки.
У меня философия такая общие знания (
Применение — конечный коммерческий продукт 1С, по вэб-сервисам (
Советую идти с головы.
(17) Не согласен. Доступ через вэб-сервис проходит такую-же систему идентификации 1С как и любой доступ к базе. Посмотрите на стандартные вэб-сервисы БП3, Стандартной библиотеки вы хотите сказать что они не так-же безопасны если их опубликовать?
Вообще любое получение данных из интернета лучше минимизировать.
http://habrahabr.ru/post/145566/ и подумайте…
Посмотрите
Скачал конфигурацию, а на файл «Папка для web-сервера» закончились $m. Скинте пожалуйста ее на ящик latypov-almir@mail.ru. Хочется поэксперементировать. Заранее спасибо.
Заходите на сайтsikuda.ru . Комментируйте статью.
+(19) не пойму в чем прикол выкладывать одну разработку 2мя частями…
(21) Популизирую свой сайт http://www.sikuda.ru. Там все можно скачать за регистрацию.
Не работает. Посылаю запрос. В журнале регистрации по «WS-соединение» только «Начало сеанса» и сразу «Завершение сеанса». Код в модуле web-сервиса не выполняется.
(8) Yurkiss, мне интересно на явескрипт посмотреть (8)