веб сервис 1с – обмен данными через коллекцию
Продолжаем делать заметки о веб-сервисах в 1с. В отличие от первой части, где мы рассмотрели обмен данными между базами через тип XML, сегодня мы рассмотрим немного другой пример, а именно – получение данных через веб-сервис из 1с в виде коллекции значений!
В конце заметки как обычно готовый архив с решением!
Рассмотрим простой базовый пример: Есть 2 базы 1с. Необходимо в базу1 из базы2 передать все элементы из справочника ‘craft1c_ТестовыйСправочник‘: реквизиты ‘код‘ и ‘наименование‘.
Внимание! За основу используем веб-сервис, рассмотренный в первой части!
Итак, в базе2, откуда мы будем получать данные, описываем в нашем XDTO-пакете новый тип объекта ‘ListItem’ и его свойства ‘Kod’ и ‘Name’ – по сути это структура:
Отлично, мы описали коллекцию ‘структура’. Теперь же нам надо описать массив, элементами которого будет выше созданная нами структура. Создаем объект ‘listData’, и его свойство ‘Items’ – тип которого и будет объект ‘ListItem‘:
Ничего не поняли? Ничего страшного. Сейчас мы создадим метод, который будет возвращать нам эти данные и вы все поймете. Создаем метод ‘GetEstateList’, который будет возвращать нам ‘listData’:
И опишем заполнение данных в ‘массив структур’. Создаем ‘listData’ и заполняем его ‘ListItem’:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Функция GetEstateList() УстановитьПривилегированныйРежим(Истина); СписокОбъектов = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.craft1c.ru/mng", "listData")); Запрос = Новый Запрос("ВЫБРАТЬ | craft1c_ТестовыйСправочник.Код КАК Код, | craft1c_ТестовыйСправочник.Наименование КАК Наименование |ИЗ | Справочник.craft1c_ТестовыйСправочник КАК craft1c_ТестовыйСправочник"); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ЭлементСписка = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.craft1c.ru/mng", "ListItem")); ЭлементСписка.Kod = СокрЛП(Выборка.Код); ЭлементСписка.Name = СокрЛП(Выборка.Наименование); СписокОбъектов.Items.Добавить(ЭлементСписка); КонецЦикла; Возврат СписокОбъектов; КонецФункции |
Публикуем отредактированный нами веб-сервис еще раз. В прошлой статье описаны все потребности публикации.
Все ребят! Теперь все что нам остается, это написать алгоритм подключения к этому веб-сервису и ‘дернуть’ из него метод ‘GetEstateList‘. В базе1 пишем обработку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
&НаСервере Процедура ПолучитьДанныеНаСервере() Отказ = Ложь; ТекстСообщения = ""; ПроверитьПодключение(Отказ, ТекстСообщения); Сообщить(ТекстСообщения); Если Отказ Тогда Возврат; КонецЕсли; ПолучитьДанныеЧерезСервис(); КонецПроцедуры &НаСервере Функция ПроверитьПодключение(Отказ, ТекстСообщения) Экспорт Сообщение = ""; НастройкиПодключения_Путь = "http://dbs2/Test_Web_Service/ws/craft1c_DataExchangeService.1cws"; Пользователь = "Admin"; Пароль = ""; Попытка Определения = Новый WSОпределения(НастройкиПодключения_Путь + "?wsdl", Пользователь, Пароль); ТекстСообщения = "Успешно подключились!"; Исключение Инфо = ИнформацияОбОшибке(); ТекстСообщения = "Ошибка подключения к Веб сервису: " + КраткоеПредставлениеОшибки(Инфо); Отказ = Истина; КонецПопытки; Отказ = Ложь; КонецФункции &НаСервере Процедура ПолучитьДанныеЧерезСервис() НастройкиПодключения_Путь = "http://dbs2/Test_Web_Service/ws/craft1c_DataExchangeService.1cws"; Пользователь = "Admin"; Пароль = ""; Определения = Новый WSОпределения(НастройкиПодключения_Путь + "?wsdl", Пользователь, Пароль); Если Определения = Неопределено Тогда Возврат; КонецЕсли; ПространствоИмен = "http://www.craft1c.ru/mng"; ИмяСервиса = "craft1c_DataExchangeService"; Прокси = Новый WSПрокси(Определения, ПространствоИмен, ИмяСервиса, ИмяСервиса + "Soap"); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; Попытка СписокДаных = Прокси.GetEstateList(); Исключение Инфо = ИнформацияОбОшибке(); п_СообщениеОбОшибке = "Ошибка получения данных (Веб сервис): " + КраткоеПредставлениеОшибки(Инфо); Возврат; КонецПопытки; Если СписокДаных = Неопределено Тогда Возврат; КонецЕсли; СписокДанныхВ1с = Новый Массив; Для Каждого ЭлементXDTO из СписокДаных.Items Цикл СтруктураДанныхВ1с = Новый Структура; СтруктураДанныхВ1с.Вставить("Код" , ЭлементXDTO.Kod); СтруктураДанныхВ1с.Вставить("Наименование" , ЭлементXDTO.Name); СписокДанныхВ1с.Добавить(СтруктураДанныхВ1с); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПолучитьДанные(Команда) ПолучитьДанныеНаСервере(); КонецПроцедуры |
Самое время протестировать написанное нами! Открываем обработку и проверяем:
Данные через веб-сервис получены! Теперь можем делать с ними все что угодно! Вот так вот легко и просто можно описать любую передачу данных через веб-сервис 1с!
Как обычно, качаем архив базы с веб-сервисом и готовую обработку! Всем удачи! Пока!
Скачать файлыcraft1c_VebServis_Chast2.rar