Имя: Пароль:
1C
Мобильный мир
Возврат заказа с мобильного приложения
0 True_n00b
 
16.04.14
09:03
С появлением 8.3 экспериментирую в создании мобильного приложения.
Столкнулся с такой проблемой. В конфигурации мобильного приложения не доступно "ручное создание пакета XDTO" напрямую в конфигураторе. Как следствие - пытаюсь создать его программно. Пол беды создать anyType и задать в него некоторые параметры (ну такие как контрагент и т.д.), а вторая часть это передать табличную часть товары через Web-сервис. Не пойму как задать списокXDTO.

Привожу пример, того что я пишу в процедуре в конфигураторе для мобильного приложения:

&НаСервере
Процедура ПередатьЗаказВЦУ(Заказ)
    
    ОбъектХДТО = ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","anyType";);
    ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","УникальныйИдентификатор", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","normalizedString";));
    ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Дата", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","dateTime";));
    ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Номер", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","string";));
    ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Контрагент", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","normalizedString";));
    ОбъектХДТО.УникальныйИдентификатор = XMLСтрока(Заказ);
    ОбъектХДТО.Дата = XMLСтрока(Заказ.Дата);
    ОбъектХДТО.Номер = XMLСтрока(Заказ.Номер);
    ОбъектХДТО.Контрагент = XMLСтрока(Заказ.Контрагент);

    ПозицияХДТО = ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","anyType";);
    ПозицияХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Номенклатура", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","normalizedString";));
    ПозицияХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","ХарактеристикаНоменклатуры", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","normalizedString";));
    ПозицияХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Количество", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","decimal";));
    ПозицияХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Цена", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","decimal";));
    ПозицияХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Сумма", ФабрикаXDTO.Создать("http://www.w3.org/2001/XMLSchema","decimal";));

ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Товары", ПозицияХДТО);

    Определение = Новый WSОпределения("http://*.*.*.*/**********?wsdl","******","*******";);
    Прокси = Новый WSПрокси(Определение, "Mobile", "Mobile", "MobileSoap");
    Прокси.Пользователь = "******";
    Прокси.Пароль = "*******";
    СписокИзмененийПозиций = Прокси.СоздатьЗаказ(ОбъектХДТО);


Получается если я в конце добавляю ОбъектХДТО.Добавить(ФормаXML.Элемент,"ObmenSite","Товары", ПозицияХДТО);
то создается ветка товары, в которой по одному элементу. Но как сказать что это будет не одно количество ?
Как создать этот объектXDTO с списком. Или какой тип в XMLSchema можно взять как список. Перерыл все возможные типы. Пытался как то добавить это свойство maxOccures...
Есть у кого какие нибудь идеи ?
1 DitriX
 
16.04.14
09:16
Вы слишком сложный путь выбрали. Используйте сериализацию :)
2 DitriX
 
16.04.14
09:21
v8: Разработка мобильного приложения на 1С с нуля – за 7 вечеров!
тут кстати эта тема будет рассматриваться :)
3 True_n00b
 
16.04.14
09:22
Эм... Я тут немного не пойму логику.
Получается конфигурации разные, я выборочно поля добавляю, и иногда они по имени не совпадают даже.
Пробовал сделать
ОбъектХДТО = СериализаторXDTO.ЗаписатьXDTO(Заказ);

При обмене говорится
{Документ.ЗаказПокупателя.Команда.ПередатьЗаказВБазу.МодульКоманды(90)}: Ошибка при вызове метода контекста (СоздатьЗаказ)
    СписокИзмененийПозиций = Прокси.СоздатьЗаказ(ОбъектХДТО);
по причине:
Ошибка вызова операции сервиса:  {SpecregionMobile}:Specregion:СоздатьЗаказ()
по причине:
Неизвестная ошибка. Несоответствие типов XDTO:
Тип '{http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentRef.ЗаказПокупателя' не найден
Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO
по причине:
Несоответствие типов XDTO:
Тип '{http://v8.1c.ru/8.1/data/enterprise/current-config}DocumentRef.ЗаказПокупателя' не найден
Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO

Что вполне естественно, хоть я там и описал свой пакет, но как мне передать как раз таки этот пакет ?
4 True_n00b
 
16.04.14
09:29
я думал ещё над вариантом, через веб сервис запрашивать пакет, формировать схему, далее её создавать в фабрике, и по ней потом вести заполнение, и возвращать уже получается то что нужно. Но думаю эту схему можно описать как то и в ручную. Или можно ли как нибудь при передаче указать имя пакета, которым надо читать. Вот это я пока не пойму...
5 True_n00b
 
16.04.14
09:29
(2) там не обсуждение, а именно уроки которые на текущий момент я не нашёл, как скачивать..
6 DitriX
 
16.04.14
09:36
(5) ну вообще если хотите xdto, то там про них говорят, и решают вашу задачу разными способами.
Тот способ о котором говорите вы - один из них.
В этом случае - создаете xdto пакет на сервере, и делаете входящий параметр веб сервиса - с типом этого пакета,
а далее, на клиенте - создаете объект xdto, то не через фабрику текущей базы, а через фабрику соединения.

Но самый постой способ - запихните все в структуру, сериализуей - передайте на сервер и десериализуйте, и все :)
А на сервере обработайте эту структуру.
7 True_n00b
 
16.04.14
09:53
а как это через фабрику соединения ... Вот этот феншуй я немного не пойму.(6)

Так же засунуть в структуру каким образом ? Гуиды элементов у меня будут совпадать, по этому я могу пройтись, и перегнать все элементы в строки гуидов.
Просто сейчас если взять и выгрузить например таблицу, он при сериализации сделает мне таблицу. Но когда доходит до номенклатуры, он ругается, т.к. другая база не знает данный тип.

Тогда логичный вопрос - что засовывать в структуру ? и какое представление таблицы значений тогда будет ?
Таблицу тоже создавать "Новую" и заполнять только "простыми" элементами ?
8 True_n00b
 
16.04.14
10:08
(6) так по поводу фабрики отразил. Создаю заказ. Спасибо.

Но вопрос с созданием пакета локально - как можно всё же создать списокXDTO ? Есть такая возможность?
9 DitriX
 
16.04.14
10:33
(8) отлично :) Вы скажите мне - цель какая сего действия?
Вы хотите данные передать на сервер?
10 True_n00b
 
16.04.14
13:11
Да это действие для того чтобы создать заказ на мобильном приложении, и выгрузить потом его в центральный узел, ну естественно с условиями. Грубо говоря - синхронизировать некоторые заказы хочу. Полу онлайн полу оффлайн клиент. С возможностью синхронизации.(9)
11 True_n00b
 
16.04.14
13:14
(9)  ой и да, по поводу цели создания списка. Получается я без обращения к веб сервису формирую программно пакет. Чтобы потом сформированный пакет, уже определенный просто передать независимо серверу. А так получается я данные сформировал, готов передавать, а таблицу не знаю как правильно засунуть в список для передачи.

А сейчас получается я подключаюсь к веб сервису, через него  получаю фабрику, т.е. всё это время у меня висит соединение по веб сервису. А не так, что я подключился, кинул быстренько пакетик, и сразу отключился как только передача завершена.
12 DitriX
 
16.04.14
13:20
(11) почему висит подключение? Подключение висит только в момент вызова операции.
Если вас так это смущает - сделайте статическую ws ссылку, выключите апач и убедитесь, что только в момент отправки данных будет ошибка подключения. А пакет без проблем и там сфоримруете
13 True_n00b
 
16.04.14
13:23
(12) На будущее думал поузнавать. Может вдруг понадобится. Пока этого функционала вроде бы хватит.

Думаю как теперь ШК на телефоне считать, чтобы его передать в 1с)))
14 DitriX
 
16.04.14
18:33
(13) и это можно делать :)
15 True_n00b
 
17.04.14
12:31
(14) Пока что не представляю как камеру зацепить ... Новую тему создать, или всё же "натолкнешь" на мысль ? знаешь какие нибудь варианты ?