![]() |
![]() |
![]() |
|
Возврат заказа с мобильного приложения | ☑ | ||
---|---|---|---|---|
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) Пока что не представляю как камеру зацепить ... Новую тему создать, или всё же "натолкнешь" на мысль ? знаешь какие нибудь варианты ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |