Имя: Пароль:
1C
1С v8
Передать массив из мобильного приложения в в веб сервис.
, ,
0 antihacker
 
14.10.15
13:06
Всем привет !

Есть документ заказа в мобильном приложение. Все его значения надо передать из мобильного приложения в веб сервис. Передать реквизиты документа удалось. Кроме табличной части.
1 Apokalipsec
 
14.10.15
13:13
ТЗ - сериализовать - передать.
2 antihacker
 
14.10.15
13:13
То есть передать массив можно. И разбирать вот так.

Функция GetMass(param)

Результат = 0;
Для каждого Значение из param.int цикл
  Результат = Результат + Значение;
КонецЦикла;

Возврат Результат;

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

Но мне нужно передать много мерный массив
3 Apokalipsec
 
14.10.15
13:13
И заголовок темы некорректный, тч <> массив
4 antihacker
 
14.10.15
13:27
Ну передать хотел значеие табличной части в массиве ))
5 Jonny_Khomich
 
14.10.15
13:30
Многомерный массив = ТЗ
6 antihacker
 
14.10.15
13:32
Jonny_Khomich, если такой короткий ответ объяснил бы как делать, то я бы и не спрашивал бы новерное..
7 aka AMIGO
 
14.10.15
13:56
(6) Jonny_Khomich сказал, что не массив надо передавать, а ТЗ
8 dumb851
 
14.10.15
14:15
Покажи как реквизиты передал сначала
9 antihacker
 
15.10.15
12:36
ВОТ так

    ВыбратьЗаказы=Документы.ЗаказыПокупателей.Выбрать(ДатаНачало,ДатаКонца);
    
    Пока  ВыбратьЗаказы.Следующий() Цикл

    
       // Через сервис передаем в ЦБ
        Прокси = WSСсылки.GetOrdersWL.СоздатьWSПрокси("http://localhost/GetOrdersWS";, "GetOrdersWS", "GetOrdersWSSoap");

        Прокси.Пользователь="Admin";                                        
        Прокси.Пароль="1";
        
        Прокси.GetOrder("123",СокрЛП(ВыбратьЗаказы.Организация.УникальныйИдентификатор()));

    КонецЦикла;
10 dumb851
 
15.10.15
14:36
(9)
несколько замечаний:
Get - это получить, отправить обычно post, запутаться можно.

Зачем делать соединение по каждому документу, проще создать порцию данных и запульнуть 1 раз.

создай пакет xdto, формируй xml текст и передавай.

кури обмен УТ(ЕРП) - Заказы.
11 antihacker
 
16.10.15
05:49
Верно. Что бы не делать соединение для каждой строки из табличной части товара, надо эти таюличную часть передать в виде массива.
12 antihacker
 
16.10.15
07:16
aka AMIGO,
Вот и передал ТЗ

Прокси.GetOrder("123",СериализаторXDTO.ЗаписатьXDTO(СписокНоменклатурТЗ))

И така же ошибка.
13 Котокот
 
16.10.15
10:13
(0) Может, в JSON его? Таки универсальный формат передачи данных для web.
14 Гёдза
 
16.10.15
10:14
(13) с каких пор вебсервисы науучились джсон?
15 antihacker
 
16.10.15
11:47
ВОт так формирую и передаю в веб сервис.

    
    Запись = Новый ЗаписьXML();
    
    Запись.ОткрытьФайл("C:\777.xml","UTF-8");
    
    //Запись.УстановитьСтроку();

    Запись.ЗаписатьОбъявлениеXML();

    Запись.ЗаписатьНачалоЭлемента("Orders");


    Отбор = Новый Структура;
       Отбор.Вставить("Синхронизирован", Ложь);    
        
    ВыбратьЗаказы=Документы.ЗаказыПокупателей.Выбрать(,,Отбор);
    
    Пока  ВыбратьЗаказы.Следующий() Цикл
                
        //стр.УникальныйИдентификатор=СокрЛП(ВыбратьЗаказы.Ссылка.УникальныйИдентификатор());
        Запись.ЗаписатьНачалоЭлемента("r");
    
        Запись.ЗаписатьНачалоЭлемента("OrderGUID");
        Запись.ЗаписатьТекст(СокрЛП(ВыбратьЗаказы.Ссылка.УникальныйИдентификатор()));
        Запись.ЗаписатьКонецЭлемента();    
        
        Запись.ЗаписатьНачалоЭлемента("OrderGUWareHouseGUIDID");
        Запись.ЗаписатьТекст(СокрЛП(ВыбратьЗаказы.Ссылка.Склад.WareHouseGUID));         
        Запись.ЗаписатьКонецЭлемента();        
        
        Запись.ЗаписатьНачалоЭлемента("WareHouseGUID");
        Запись.ЗаписатьТекст(СокрЛП(ВыбратьЗаказы.Ссылка.Склад.WareHouseGUID));         
        Запись.ЗаписатьКонецЭлемента();
        
        Запись.ЗаписатьНачалоЭлемента("CustomerGUID");
        Запись.ЗаписатьТекст(СокрЛП(ВыбратьЗаказы.Ссылка.Контрагент.CustomerGUID));
        Запись.ЗаписатьКонецЭлемента();
        
        Запись.ЗаписатьНачалоЭлемента("r");
        
        //А теперь сами товары
        Для Каждого Товар Из ВыбратьЗаказы.Ссылка.Номенклатуры Цикл
    
        Запись.ЗаписатьНачалоЭлемента("f");
        Запись.ЗаписатьТекст(Товар.Номенклатура.Наименование);
        Запись.ЗаписатьКонецЭлемента();
        
        Запись.ЗаписатьНачалоЭлемента("f");    
        Запись.ЗаписатьТекст(формат(Товар.Количество,"ЧДЦ=2; ЧРД=.; ЧРГ=*"));
        Запись.ЗаписатьКонецЭлемента();    
        
        КонецЦикла;    
    
        Запись.ЗаписатьКонецЭлемента();
        Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;

    Запись.ЗаписатьКонецЭлемента();

    // Через сервис передаем в ЦБ
    Прокси = WSСсылки.GetOrdersWL.СоздатьWSПрокси("http://localhost/GetOrdersWS";, "GetOrdersWS", "GetOrdersWSSoap");
    Прокси.Пользователь="Admin";                                        
    Прокси.Пароль="1";
    
    Прокси.GetOrder(Запись,"123456");    

Ругаеться :

Несоответствие типов (параметр номер '1')

А там ждет его параметр с типм ValueStorage (http://v8.1c.ru/8.1/data/core)

Я вообще правлильно формирую и передаю ?

А ХМЛ формируеться без ошибок и открываеться нормально в Internet Explorer
16 rozer76
 
16.10.15
11:53
(15) а Запись - это разве хранилищезначений у тебя?
17 antihacker
 
16.10.15
12:11
Я пробовал вот так.

Данные = Новый ХранилищеЗначения(Запись, Новый СжатиеДанных(9));

    Прокси.GetOrder(Данные,"123456");

Ругает

Данные = Новый ХранилищеЗначения(Запись, Новый СжатиеДанных(9));
по причине:
Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент
18 rozer76
 
16.10.15
12:13
(17) в строку это "запихай", тип поставь строка а потом "распихай" из строки )
19 antihacker
 
16.10.15
12:17
Брат а можно по подробнее ? Что за строка ?
20 antihacker
 
16.10.15
12:21
ВОт так вроде ушел.  Хотя не понятно что принимает он там ))

Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку("UTF-8");
*****
****
****

    Стр = Запись.Закрыть();
    Данные = Новый ХранилищеЗначения(Стр, Новый СжатиеДанных(9));
//ФайлОтправки = Новый Файл(имяФайлаОтправки);
    // Через сервис передаем в ЦБ
    Прокси = WSСсылки.GetOrdersWL.СоздатьWSПрокси("http://localhost/GetOrdersWS";, "GetOrdersWS", "GetOrdersWSSoap");
    Прокси.Пользователь="Admin";                                        
    Прокси.Пароль="1";
    
    Прокси.GetOrder(Данные,"123456");
21 rozer76
 
16.10.15
12:22
(19)

Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку();

бла-бла

Запись.ЗаписатьКонецЭлемента();
    Стр = Запись.Закрыть();
    Сообщить(Стр);

че выдаст?
22 rozer76
 
16.10.15
12:23
(20) а там

ЧтениеXML (XMLReader)
УстановитьСтроку (SetString)
Синтаксис:

УстановитьСтроку(<СтрокаXML>, <Параметры>, <НаборСхемXML>)
Параметры:

<СтрокаXML> (обязательный)

Тип: Строка.
Строка, содержащая текст XML.
<Параметры> (необязательный)

Тип: ПараметрыЧтенияXML.
Параметры чтения, которые будут использоваться при чтении данных XML.
<НаборСхемXML> (необязательный)

Тип: НаборСхемXML.
Набор схем XML, используемых при проверки читаемого документа XML.
Если набор схем указан, но не проверен и включена проверка документа XML, то будет выполнена проверка набора схем.
Описание:

Устанавливает строку, содержащую текст XML для чтения данным объектом. Если перед вызовом данного метода уже производилось чтение XML из другого файла или строки, то чтение прекращается и объект инициализируется для чтения из указанной строки.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрXML);
23 antihacker
 
16.10.15
12:25
Ну дает вроде то что я собирала тернистым путем.
24 rozer76
 
16.10.15
12:27
(23) так вы дама... что ж вы сразу не сказали... тут при виде фотки вам моментально весь обмен "на блюдечке" )
25 antihacker
 
16.10.15
12:29
ВОт б****ть.... Не чайно с*****ка
26 antihacker
 
16.10.15
12:29
Парень я парень
27 antihacker
 
16.10.15
12:29
Патцан я патцан
Мужик я мужик
28 rozer76
 
16.10.15
12:32
(27) уф... отлегло... извиняй )
29 antihacker
 
16.10.15
12:38
Бляяяя писец... От переписки встает Хахаха
30 antihacker
 
16.10.15
12:38
А тперь как прочитать ?
31 rozer76
 
16.10.15
12:42
(30) ну как писал, так и читай ) Или с XDTO пили или через DOМ... много разных способов
32 antihacker
 
16.10.15
12:47
По моему читаеться по другому.
33 rozer76
 
16.10.15
12:54
(32) ну как бы да, читается немного по другому чем пишется )
34 rozer76
 
16.10.15
12:55
(33) + я имел в виду что пользоваться надо начинать так

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрXML);

и пошел теги перебирать )
35 rozer76
 
16.10.15
12:56
+(34) открой наконец "желтую библию"
36 antihacker
 
16.10.15
13:37
Функция GetOrder(InputOrderData,ErrorText)
    
ЧтениеXMl = Новый ЧтениеXML;
ЧтениеXMl.УстановитьСтроку(InputOrderData);
ЧтениеXMl.Прочитать();

Ошибка

{WebСервис.GetOrdersWS(5)}: Ошибка при вызове метода контекста (УстановитьСтроку): Несоответствие типов (параметр номер '1')
по причине:
Несоответствие типов (параметр номер '1')
37 rozer76
 
16.10.15
14:07
(36) тип какой параметра ?
38 antihacker
 
16.10.15
14:56
InputOrderData ?

http://v8.1c.ru/8.1/data/core
ValueStorage

Мы ему и передовали
39 Сияющий в темноте
 
16.10.15
15:50
передавать и принимать можно только строки
xml файл это тоже текстовый файл
40 rozer76
 
16.10.15
19:38
(38) см (18)
41 Котокот
 
16.10.15
23:07
(14) А какая разница, что веб-сервису пихать в качестве входящей информации? Я, видимо, не знал, что веб-сервисы не умеют работать с дсон, поэтому у меня они уже года 3 через дсон работают.
42 antihacker
 
17.10.15
11:23
в строку это "запихай", тип поставь строка а потом "распихай" из строки )

Как видишь "запихай получился", в вот "распихай" нет. Что не так делаю ?
43 antihacker
 
17.10.15
11:25
Сияющий в темноте, что хотел сказать ? Честно не понял.