Рассмотри случай когда у нас уже есть опубликованный веб-сервис и надо добавить новую операцию.
Открываем ветку Web-сервисы, существующий веб-сервис, нажимаем "Добавить / Операция".
Указываем
- Имя
- Тип возвращаемого значения. Если тип имеет нестандартный тип, то его предварительно необходимо определить в XDTO-пакете
- Имя процедуры (нажимаем на лупу и переходим в модуль сервиса)
Если результат должен формироваться по входным параметрам, то создаем параметры для операции. Направление передачи = "Входной".
Для созданного свойства надо обязательно указать права доступа. Правая кнопка мыши, Дополнительно и выдаем для нужной роли права на "Использование".
Тип значения может быть элементарным или определенным отдельно (но все равно должен состоять из элементарных типов). Про типы можно посмотреть здесь: https://its.1c.ru/db/metod8dev#content:1793:hdoc
Допустим нам надо вернуть таблицу значений. Самый простой вариант определить 2 типа: Тип1 - строка таблицы (определяем столбцы таблицы), Тип2 - массив строк таблицы.
Находим нужный XDTO-пакет (пакет XDTO указан в свойстве "Пакеты XDTO" сервиса, точнее там указано URI пространства имен. просматриваем все XDTO-пакеты, и ищем нужны по значению этого реквизита).
Добавляем тип объекта для строки таблицы.
Далее создаем тип объекта для таблицы, добавляем свойство СтрикиТаблицы и указываем для него тип созданные ранее для строки таблицы
Так как нам нужна таблица, то в свойствах строки ставим реквизит "Максимальное количество" = -1. Это говорит о том, что максимальное количество значений не ограничено. По умолчанию этот реквизит равен 1, что означает, что он может быть только 1. Поставим реквизит "Возможно пустое" = Истина, так как есть возможность, что наша функция вернет пустой набор строк.
Теперь открываем функцию модуля сервиса.
Текст функции примерно такой:
Функция РаботыИМатериалы(ДатаНачала, ДатаОкончания) // 2 параметра соответствуют входным параметрам нашей операции
ВыходныеДанныеТипТаблица = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "ТаблицаРеализация"); //создаем тип для таблицы
ВыходныеДанные = ФабрикаXDTO.Создать(ВыходныеДанныеТипТаблица); // создаем саму таблицу
ВыходныеДанныеТипСтрокаТаблицы = ФабрикаXDTO.Тип("http://localhost/rng_vdgo", "СтрокаРеализация"); //Создаем тип для строки
ТЗРаботыИМатериалы = ВОГ_ВебСервисы.СформироватьТаблицуРаботИМатериалов(ДатаНачала, ДатаОкончания); // получаем таблицу значений для выгрузки
Для каждого СтрокаТЗ из ТЗРаботыИМатериалы Цикл
ВыходныеДанныеСтрокаТаблицы = ФабрикаXDTO.Создать(ВыходныеДанныеТипСтрокаТаблицы); //создаем строку таблицы
//заполняем строку
ВыходныеДанныеСтрокаТаблицы.ДатаРеализации = СтрокаТЗ.Период;
ВыходныеДанныеСтрокаТаблицы.ГУИДПодразделение = Строка(СтрокаТЗ.ПодразделениеСсылка.УникальныйИдентификатор());
ВыходныеДанныеСтрокаТаблицы.КодПодразделения = СтрокаТЗ.ПодразделениеКод;
ВыходныеДанныеСтрокаТаблицы.Подразделение = СтрокаТЗ.ПодразделениеПолноеНаименование;
ВыходныеДанныеСтрокаТаблицы.ГУИДНоменклатура = Строка(СтрокаТЗ.НоменклатураСсылка.УникальныйИдентификатор());
ВыходныеДанныеСтрокаТаблицы.Номенклатура = СтрокаТЗ.НоменклатураНаименование;
ВыходныеДанныеСтрокаТаблицы.Количество = СтрокаТЗ.Количество;
ВыходныеДанныеСтрокаТаблицы.Сумма = СтрокаТЗ.Сумма;
ВыходныеДанныеСтрокаТаблицы.ЭтоМатериал = СтрокаТЗ.ЭтоМатериал;
ВыходныеДанные.СтрокиТаблицы.Добавить(ВыходныеДанныеСтрокаТаблицы); //добавлеям строку в таблицу (как строка массива)
КонецЦикла;
Возврат ВыходныеДанные; //Обязательно возвращаем значение
КонецФункции
Для получения данных через веб-сервис по созданной нами операции текст процедуры может быть примерно таким:
Процедура ПолучитьТаблицуРаботИМатериаловНаСервере()
Сервис = WSСсылки.НашаСсылка.СоздатьWSПрокси("http://localhost/rng_vdgo", "rng_vdgo", "rng_vdgoSoap");
Сервис.Пользователь = "пользователь"; //пользователь зарегистрированный в 1С к которой обращаемся и имеющий права на веб-сервисы и чтение данных, указанных в запросе
Сервис.Пароль = "пароль";
//в WSСсылке НашаСсылка должна быть обновлена структура WSDL (типы и свойства на удаленном сервере). Этого можно добиться заново забив строку URL источника у ссылки
ДанныеТаблицаРеализацияТип = Сервис.ФабрикаXDTO.Тип("http://localhost/rng_vdgo","ТаблицаРеализация"); //создаем тип для таблицы
ДанныеТаблицаРеализация = Сервис.ФабрикаXDTO.Создать(ДанныеТаблицаРеализацияТип); //создаем саму таблицу
ТаблицаРеализации = Сервис.ПолучитьТаблицуФактРаботыИМатериалы(ДатаНачала, ДатаОкончания); //получаем данные
Для каждого СтрокаРеализации из ТаблицаРеализации.СтрокиТаблицы Цикл //обходим таблицу
...
КонецЦикла;
КонецПроцедуры
URL задается строкой. Примерный вариант: http://сервер/имя публикации (обычно совпадает с именем базы)/ws/<имя сервиса>.1cws?wsdl