Доброго времени суток! Медитируя на тему почему нет нормальной "Консоли запросов в управляемом приложении" захотелось покопаться в этих внутренностях 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 для статистики использования. Если для Вас она критична по безопасности - удалите ее код со страницы.
|