Приветствую Вас ГостьВторник, 16.04.2024, 19:54

Каталог статей


Настройка Веб сервиса

Рассмотри случай когда у нас уже есть опубликованный веб-сервис и надо добавить новую операцию.

Открываем ветку 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 источника у ссылки

    ТаблицаРеализации = Сервис.ПолучитьТаблицуФактРаботыИМатериалы(ДатаНачала, ДатаОкончания); //получаем данные

    Для каждого СтрокаРеализации из ТаблицаРеализации.СтрокиТаблицы Цикл //обходим таблицу

                     ...

    КонецЦикла;

КонецПроцедуры


URL задается строкой. Примерный вариант: http://сервер/имя публикации (обычно совпадает с именем базы)/ws/<имя сервиса>.1cws?wsdl

Категория: Взаимодействие с другими базами, приложениями и источниками данных | Добавил: leshic (20.08.2019)
Просмотров: 360 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [40]
Администрирование [34]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [28]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0