При этом для использования в рамках платформы 1С совершенно не обязательно углубляться в собственную структуру веб-сервиса, разрабатывать его объектную модель и интерфейсы. Достаточно выставить через сервис фунцию вида CmdExec(ParamStructure: string):string и гонять между базами строки, получаемые функцией ЗначениеВСтрокуВнутр(). Если в одном из полей структуры передавать код обработки данных на языке 1С, получаем всемогущий инструмент. Итак, прототип функции веб-сервиса всего лишь
Функция CmdExec(ParamStructure)
СтруктураПараметров = ЗначениеИзСтрокиВнутр(ParamStructure);
Результат = Новый Структура;
Если СтруктураПараметров.Свойство("КодОбработки") Тогда
Попытка
Выполнить(СтруктураПараметров.КодОбработки);
Исключение
Результат.Вставить("Ошибка",ОписаниеОшибки());
КонецПопытки;
Иначе
Результат.Вставить("Ошибка","WS.ПСГ_Общий.CmdExec: Входная структура не содержит свойства КодОбработки.");
КонецЕсли;
ВозвращаемоеЗначение = ЗначениеВСтрокуВнутр(Результат);
Возврат ВозвращаемоеЗначение;
КонецФункции
В прилагаемой демонстрационной базе создан веб-сервис ПСГ_Общий, выставляющий приведенную функцию CmdExec. Для удобства использования применяется функция ПСГ_ОбработчикиВебСервисов.ВыполнитьКомандуЧерезВебСервис(Адрес,СтруктураПараметров,КодОбработки), принимающая на входе адрес веб-сервера, произвольную структуру параметров и код обработки данных, и возвращающая структуру, созданную функцией CmdExec на целевой базе.
Функция ВыполнитьКомандуЧерезВебСервис(Адрес,СтруктураПараметров,КодОбработки) Экспорт
СтрокаСоединения = Адрес + "/ws/wsGeneral.1cws?wsdl";
wsAccount = wsAccount();
Определения = Новый WSОпределения(СтрокаСоединения,wsAccount.Логин,wsAccount.Пароль);
Прокси = Новый WSПрокси(Определения,"http://www.promstroi-group.ru/general","ПСГ_Общий","ПСГ_ОбщийSoap");
Прокси.Пользователь = wsAccount.Логин;
Прокси.Пароль = wsAccount.Пароль;
СтруктураПараметров.Вставить("КодОбработки",КодОбработки);
ДанныеСтрокой = Прокси.CmdExec(ЗначениеВСтрокуВнутр(СтруктураПараметров));
Если ДанныеСтрокой = Неопределено Тогда
ВызватьИсключение("Не удалось получить данные");
КонецЕсли;
Данные = ЗначениеИзСтрокиВнутр(ДанныеСтрокой);
Если Данные.Свойство("Ошибка") Тогда
ВызватьИсключение(Данные.Ошибка);
КонецЕсли;
Возврат Данные;
КонецФункции
Здесь wsAccount() возвращает данные для авторизации в виде структуры("Логин,Пароль").
Рассмотрим простейший "Hello, world" для нашего веб-сервиса, команду Ping, выясняющую, доступен ли сервис.
Функция Ping(Адрес) Экспорт
СтруктураПараметров = Новый Структура;
КодОбработки = "Результат.Вставить(""Статус"",""онлайн"");";
Результат = ПСГ_ОбработчикиВебСервисов.ВыполнитьКомандуЧерезВебСервис(стр.АдресWS,СтруктураПараметров,КодОбработки);
Попытка
Возврат Результат.Статус;
Исключение
Возврат ОписаниеОшибки();
КонецПопытки;
КонецФункции
Демонстрационная база содержит три других примера: обработку Демо, считывающую произвольный справочник целиком, обработку Тиражирование объектов WS, позволяющую скопировать объект в выбранные базы с совпадающей по составу объектов (но не обязательно реквизитов) структурой.
Для установки демонстрационной базы нужно загрузить прилагаемую dt-выгрузку в новую пустую базу 1С и опубликовать ее на веб-сервере. Далее, в клиенте нужно зайти в справочник Базы данных, и прописать адрес базы в поле Веб-сервер у базы данных База 1, и выставить константу Эта база данных = База1. После этого демонстрационные обработки уже могут общаться с самой этой же базой через ее веб-сервис. Но, конечно, значительно интереснее создать еще одну копию базы, прописать ее в справочник Базы данных как База 2 и посмотреть общение между этими базами.
Не лишне предупредить, что знающий логин и пароль wsAccount(), обладает, фактически правами пользователя wsAccount().Логин в базе, и правами пользователя, под которым работает сервер 1С (или IUSR в файловом варианте), в операционной системе.