Имя: Пароль:
1C
1С v8
WS-ссылки. Как передать список значений?
,
0 zalexey
 
26.09.14
17:09
Есть схема: http://2kengu.ru/api/soap?wsdl
в которую нужно передать логин, пароль, сообщение (с этим вроде разобрался как), но еще нужно передать список телефонов и не могу сообразить как их туда отправить.

Скрин схемы: http://cdn.joxi.ru/uploads/prod/2014/09/26/38e/2fb/f830ebab752d3c6cf423452ba7de4fe7ea11f780.jpg

Код, который сейчас есть 1С 8.2:

    ВебСервис = WSСсылки.WS_SMS.СоздатьWSПрокси("http://ws.api.giper.mobi/";, "soap", "soapPort");
    ВебСервис.Пользователь    = "admin";
    ВебСервис.Пароль        = "1234";
    
    Фабрика = ВебСервис.ФабрикаXDTO;
    Сообщение = Фабрика.Создать(Фабрика.Тип("http://Giper.mobi/schema/Message";, "messageType"));
    Сообщение.id = "123456";
    Сообщение.login = "admin";
    Сообщение.pwd = "1234";
    Сообщение.sender = "2kengu.ru";
    Сообщение.test   = 1;
    Сообщение.text   = "test message";
    
    //Телефоны = Сообщение.Создать(Сообщение.Тип("http://Giper.mobi/schema/Message";, "phone"));
    //Телефоны.phone      = "79278531526";
    
    //Сообщение.phones = Телефоны;
    
    Результат = ВебСервис.message(Сообщение);
1 zalexey
 
26.09.14
17:10
в коде ссылки миста заменила :)
На деле так: http://cdn.joxi.ru/uploads/prod/2014/09/26/072/a84/6dd2b3c5c9ab4cdd99d5aecc681673813276e0cd.jpg
2 Serginio1
 
26.09.14
17:46
Телефоны.phone.Добавить("79278531526")
3 zalexey
 
26.09.14
21:42
(2)
а чему равна переменная "Телефоны"?
4 zulu_mix
 
26.09.14
21:45
(3) найди в message
5 Serginio1
 
26.09.14
21:46
Наверное
Телефоны = Фабрика.Создать(Фабрика.Тип("http://Giper.mobi/schema/Message";, "phone"));
6 zalexey
 
28.09.14
18:30
(5) не прокатывает. пробовал
Фабрика.Тип("http://Giper.mobi/schema/Message";, "phone")

возвращает "Неопределено"
7 Serginio1
 
28.09.14
18:38
Так посмотри какой тип и простанство имен имеет phones
8 zalexey
 
29.09.14
08:09
(7) либо я не туда смотрю (хотя больше в схеме phones не встречается), либо у него нет никакого типа, скрин:

http://cdn.joxi.ru/uploads/prod/2014/09/29/931/74e/570f852e1199cdf6dff49d6a77bf153e72a2fc47.jpg
9 Serginio1
 
29.09.14
10:30
Попробовал через
Телефоны = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "anyType"));
      ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string"), "79278531526");

    Телефоны.Добавить(ФормаXML.Атрибут, "http://Giper.mobi/schema/Message";, "phone",ЗначениеАтрибута);

Но облом по типу.

Посмотри тут обсуждаем доступ к вэб сервисам
1c 7.7 и ASP.NET
API IE из 1с 7.7
10 Serginio1
 
29.09.14
10:46
На шарпе такой код работает
var ВебСервис = new ServiceReference2.soapClient();
            var Сообщение = new ServiceReference2.messageType();

            Сообщение.id = "123456";
            Сообщение.login = "admin";
            Сообщение.pwd = "1234";
            Сообщение.sender = "2kengu.ru";
            Сообщение.test = "1";
            Сообщение.text = "test message";

            var Телефоны = new ServiceReference2.messageType.phonesType();
            Телефоны.Add("79278531526");

            //Телефоны.phone      = "79278531526";


            Сообщение.phones = Телефоны;

            
            ВебСервис.ClientCredentials.UserName.UserName= "admin";
           ВебСервис.ClientCredentials.UserName.Password = "1234";
           var Результат = ВебСервис.message(Сообщение);
11 Serginio1
 
29.09.14
11:23
Вот так в 1С будет


    ТипДляТелефонов=Фабрика.Пакеты[1].КорневыеСвойства[0].Тип.Свойства[6].Тип;
    Телефоны = Фабрика.Создать(ТипДляТелефонов);

    Телефоны.phone.Добавить("79278531526");

    
    //Сообщение.phones = Телефоны;

   //   Телефоны = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "anyType"));
   //   ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string"), "79278531526");

  //  Телефоны.Добавить(ФормаXML.Атрибут, "http://Giper.mobi/schema/Message";, "phone",ЗначениеАтрибута);
    Сообщение.phones = Телефоны;
12 Serginio1
 
29.09.14
11:24
13 Serginio1
 
29.09.14
11:37
Вот такой вариант лучше использовать

Функция СтрРазделить(Знач Строка, Разделитель)
    
    Результат = Новый Массив;
    Если ПустаяСтрока(Строка) Тогда
        Возврат Результат;
    КонецЕсли;
    
    НачПозицияПервогоЭлемента = Найти(Строка, "{");
    КонПозицияПервогоЭлемента = Найти(Строка, "}");
    Если НачПозицияПервогоЭлемента > 0 И КонПозицияПервогоЭлемента > 0 Тогда
        ПервыйЭлемент = Сред(Строка, НачПозицияПервогоЭлемента, КонПозицияПервогоЭлемента);
        Результат.Добавить(СокрЛП(ПервыйЭлемент));
        Строка = СокрЛП(Сред(Строка,КонПозицияПервогоЭлемента + 2));
    КонецЕсли;
    
    Пока Истина Цикл
        Позиция = Найти(Строка,Разделитель);
        Если Позиция = 0 Тогда
            Прервать;
        КонецЕсли;
        
        Результат.Добавить(СокрЛП(Лев(Строка,Позиция - 1)));
        Строка = СокрЛП(Сред(Строка,Позиция + 1));
    КонецЦикла;
    
    Результат.Добавить(СокрЛП(Строка));
    
    Возврат Результат;
    
КонецФункции

    Функция ПолучитьТипОбъекта(Фабрика,Тип, ВерсияСхемы) Экспорт
    
    МассивПути = СтрРазделить(Тип, ".");
    
    ПервыйЭлемент = МассивПути[0];
    Если Лев(ПервыйЭлемент,1) = "{" И Прав(ПервыйЭлемент,1) = "}" Тогда
        ИмяПакета = Сред(ПервыйЭлемент, 2, СтрДлина(ПервыйЭлемент) - 2);
        Коллекция = Фабрика.Пакеты.Получить(ИмяПакета).КорневыеСвойства;
    ИначеЕсли ВерсияСхемы <> "4.02" Тогда
        ТипОбъекта = Фабрика.Тип(ВерсияСхемы, ПервыйЭлемент);
        Коллекция = ТипОбъекта.Свойства;
    КонецЕсли;
    
    МассивПути.Удалить(0);
    Пока МассивПути.Количество() > 0 Цикл
        
        Если Коллекция = Неопределено Тогда
            Возврат Неопределено;
        КонецЕсли;
        
        Свойство = Коллекция.Получить(МассивПути[0]);
        Если Свойство = Неопределено Тогда
            Возврат Неопределено;
        КонецЕсли;
        
        ТипОбъекта = Свойство.Тип;
        МассивПути.Удалить(0);
        Попытка
            Коллекция = ТипОбъекта.Свойства;
        Исключение
            Коллекция = Неопределено;
        КонецПопытки;
        
    КонецЦикла;
    
    Возврат ТипОбъекта;
    
КонецФункции

    Процедура ТестСпискаНажатие(Элемент)
        // Вставить содержимое обработчика.
        Файл_wsdl="http://2kengu.ru/api/soap?wsdl";;
//          Файл_wsdl="d:\Загрузки\Morpher.WSDL";
        ОпределениеТ=Новый WSОпределения(Файл_wsdl);
    WSСервис=ОпределениеТ.Сервисы[0];
    прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
    
    прокси.Пользователь    = "admin";
    прокси.Пароль        = "1234";
    
    Фабрика = прокси.ФабрикаXDTO;
    Сообщение = Фабрика.Создать(Фабрика.Тип("http://Giper.mobi/schema/Message";, "messageType"));

    Сообщение.id = "123456";
    Сообщение.login = "admin";
    Сообщение.pwd = "1234";
    Сообщение.sender = "2kengu.ru";
    Сообщение.test   = 1;
    Сообщение.text   = "test message";
    
    ТипДляТелефонов=ПолучитьТипОбъекта(Фабрика,"messageType.phones", "http://Giper.mobi/schema/Message";);
    
//    ТипДляТелефонов=Фабрика.Пакеты[1].КорневыеСвойства[0].Тип.Свойства[6].Тип;
    Телефоны = Фабрика.Создать(ТипДляТелефонов);

    Телефоны.phone.Добавить("79278531526");

    
    //Сообщение.phones = Телефоны;

   //   Телефоны = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "anyType"));
   //   ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string"), "79278531526");

  //  Телефоны.Добавить(ФормаXML.Атрибут, "http://Giper.mobi/schema/Message";, "phone",ЗначениеАтрибута);
    Сообщение.phones = Телефоны;

    Результат = прокси.message(Сообщение);
    КонецПроцедуры
14 Serginio1
 
29.09.14
11:54
Или так

Фабрика = прокси.ФабрикаXDTO;
    ТипСообщения=Фабрика.Тип("http://Giper.mobi/schema/Message";, "messageType");

    Сообщение = Фабрика.Создать(ТипСообщения);

    Сообщение.id = "123456";
    Сообщение.login = "admin";
    Сообщение.pwd = "1234";
    Сообщение.sender = "2kengu.ru";
    Сообщение.test   = 1;
    Сообщение.text   = "test message";
    
        ТипДляТелефонов= ТипСообщения.Свойства.Получить("phones").Тип;
    
    

    Телефоны.phone.Добавить("79278531526");

    


    Результат = прокси.message(Сообщение);
15 zalexey
 
29.09.14
14:41
(14) с небольшими доработками - заработало!!!
Огромное спасибо за помощь!
16 Serginio1
 
29.09.14
14:45
(15) Ну да подчищал и удалил

Телефоны = Фабрика.Создать(ТипДляТелефонов);

На здоровье