вторник, 18 июня 2013 г.

1С:Предприятие 8. Веб-сервисы. Возвращаем массив


Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Классы Платформы 1С для вызова операций веб-сервис


При вызове ws-операций очень часто надо вернуть массив значений. В этой статье я расскажу как это сделать используя XDTOОбъект.



Создайте веб-сервис. В задайте свойство "URI пространства имен" веб-сервиса например "http://ghostaz.no-ip.org".
И создайте ws-операцию, например "ВозвратитьМассив".
URI пространства имен веб сервиса 1с

Далее создайте XDTO-пакет и добавьте в него Тип объекта как это показано на картинке:
Добавление XDTOОбъекта
И создайте свойство объекта:
Создание свойства XDTOОбъекта
У свойства укажите "Максимальное количество" равное -1. Это свойство и указывает что Элемент объекта "Свойство1" может быть повторен любое количество раз. Не забудьте указать тип свойства например string.
Передача массива в веб сервисе

Теперь в ws-операции можно указывать XDTOОбъект "ТипОбъекта1" как Тип возвращаемого значения, но перед этим необходимо в у веб сервиса указать XDTO пакет:
Выбор пакетов XDTO в веб сервис

После этого можно у ws-операции "ВозвратитьМассив" указать Тип возвращаемого значения:
Указание типа возвращаемого значения ws-операции

Можно приступать к написанию кода. В обработке вызова операции мы создадим тип объекта XDTO, затем сам объект и в цикле добавим ему несколько элементов.


Функция ВозвратитьМассив()

ТипXDTOТипОбъекта1 = ФабрикаXDTO.Тип("http://ghostaz.no-ip.org", "ТипОбъекта1");
ТипОбъекта1 = ФабрикаXDTO.Создать(ТипXDTOТипОбъекта1);

Для Ай = 1 по 4 Цикл
//добавим строку в массив
ТипОбъекта1.Свойство1.Добавить("Строка"+Ай);
КонецЦикла;
   
Возврат ТипОбъекта1;

КонецФункции

Вот и все. Можно публиковать и смотреть результат. А результат такой:

Результат выполнения веб-сервиса в обработке WSReader


8 комментариев:

  1. Подскажите, а как передать массив в качестве параметра?

    ОтветитьУдалить
    Ответы
    1. Ответил в отдельной статье http://codenotes-1c.blogspot.ru/2014/04/1-8-1.html Описал очень простой случай. Сам же я не в практических целях не передавал массив в качестве параметра.

      Удалить
  2. Здравствуйте, а как можно вернуть двумерный массив?
    Для Ай = 1 по 4 Цикл
    //добавим строку в массив
    ТипОбъекта1[Ай][0] = "Строка1"
    ТипОбъекта1[Ай][1] = "Строка2"
    КонецЦикла;

    Система матерится: {WebСервис.WebСервис.Модуль(23)}: Получение элемента по индексу для значения не определено

    ОтветитьУдалить
    Ответы
    1. Надо придумать свой разделитель:
      Текст = "";
      Пока Выборка.Следующий() цикл
      Текст = строка(Выборка.Организация) + ";" + строка(Выборка.СуммаПродаж);
      ТипОбъекта1.Свойство1.Добавить(Текст);
      КонецЦикла;

      ";" - есть разделитель
      либо делать еще одно свойство.

      Удалить
    2. Надо придумать свой разделитель:
      Текст = "";
      Пока Выборка.Следующий() цикл
      Текст = строка(Выборка.Организация) + ";" + строка(Выборка.СуммаПродаж);
      ТипОбъекта1.Свойство1.Добавить(Текст);
      КонецЦикла;

      ";" - есть разделитель
      либо делать еще одно свойство.

      Удалить
  3. Владимир, спасибо что ты есть!)

    ОтветитьУдалить
  4. Я хочу поделиться свидетельством о том, как г-н Бенджамин помог мне с займом в 2 000 000,00 долларов США для финансирования моего проекта по выращиванию марихуаны, я очень благодарен и пообещал поделиться этой законной финансирующей компанией с любым, кто ищет способ расширить свой бизнес-проект. .финансирующая компания. Любой, кто ищет финансовую поддержку, должен связаться с ними по адресу lfdsloans@outlook.com. Г-н Бенджамин также работает в WhatsApp + 1-989-394-3740, чтобы облегчить задачу любому заявителю.

    ОтветитьУдалить