|
v8:Вопрос по XDTO | ☑ | ||
---|---|---|---|---|
0
Razor
15.08.11
✎
16:15
|
Нужно создать веб-сервис, который будет программно создавать документ в ИБ, после заполнения пользователем некоторых данных на сайте.
Проблема заключается в том, что при создании документа нужно задать один реквизит, у которого тип значения = СправочникСсылка. В принципе это можно реализовать так - для каждого значения справочника задать некоторое числовое сопоставление и передовать в XML-запросе это число. Но меня интересует как передать в XML-запросе значение типа 1С'ный СправочникСсылка. Я создал пакет XDTO для сервиса и в нем тип значения - {http://v8.1c.ru/8.1/data/enterprise/current-config}:CatalogObject.*МойСправочник*, но 1С пишет ошибку - значение не соответствует простому типу. Как можно это сделать и возможно ли вообще? Заранее спасибо. |
|||
1
DmitrO
15.08.11
✎
16:23
|
Если ты хочешь что клиент веб-сервиса передавал число, тогда надо чтобы и веб-сервис принимал именно число. Соответственно в пакете XDTO ставить тип число. А в модуле веб-сервиса программно делать преобразование этого полученного числа в ссылку справочника.
|
|||
2
Razor
15.08.11
✎
16:25
|
(1), это я уже сделал, меня интересует, сразу на прямую передавать значение нужного типа
|
|||
3
DmitrO
15.08.11
✎
16:27
|
Ну я делаю обычно проще. Вместо чисел передаю идентификаторы, тип такой AnyRef(http://v8.1c.ru/8.1/data/enterprise).
А в модуле такой код (пример): XMLЗначение(Тип("СправочникСсылка.Подразделения"), DivisionID) |
|||
4
Defender aka LINN
15.08.11
✎
16:29
|
(2) Чтобы "сразу напрямую" - делай веб-морду на 8.2
|
|||
5
DmitrO
15.08.11
✎
16:32
|
Можно еще AnyRef(http://v8.1c.ru/8.1/data/enterprise) заменить на CatalogRef.Подразделения (http://v8.1c.ru/8.1/data/enterprise/current-config).
Именно это будет ссылкой, CatalogObject это объект (комплексный тип), а не ссылка. |
|||
6
Razor
15.08.11
✎
16:32
|
(3)то есть передается значение - DivisionID, а потом преобразуется в СправочникСсылка, а что конкретно передается в DivisionID??
(4), а что это? веб-расширение? я должен исходить из конкретной задачи - нужно сделать веб-сервис, если нельзя передавать значение такого типа, значит буду делать другим способом |
|||
7
DmitrO
15.08.11
✎
16:38
|
(6) я ж говорю идентификатор это.
Типа того: f2414247-73f9-11dd-aaeb-0009d050086d |
|||
8
Razor
15.08.11
✎
16:41
|
(7)А каким образом он преобразуется в справочник? И нужно его задать как Тип значения или Тип свойства объекта в пакете XDTO?
|
|||
9
DmitrO
15.08.11
✎
16:53
|
Да что ж такое-то, я же все написал уже..
Чтобы в пакете XDTO задать тип AnyRef(http://v8.1c.ru/8.1/data/enterprise) свойства элемента достаточно импортировать схему (http://v8.1c.ru/8.1/data/enterprise). Тип задается мышкой в редакторе. :) Преобразование делается так: Подразделение = XMLЗначение(Тип("СправочникСсылка.Подразделения"), DivisionID); //получаем значение типа СправочникСсылка.Подразделения, причем без обращения к базе. |
|||
10
DmitrO
15.08.11
✎
16:55
|
Значения идентификаторов либо тупо "прошиваются" в коде клиентов веб-сервиса, либо получаются как-то еще. Например отдельным предварительным запросом к веб-сервису.
|
|||
11
Razor
15.08.11
✎
17:35
|
Вроде разобрался, спасибо, только не очень понимаю - где нужно импортировать схему (http://v8.1c.ru/8.1/data/enterprise)??
В пакете XDTO можно выбрать такой тип для свойства или значения, но пишется ошибка |
|||
12
DmitrO
16.08.11
✎
10:08
|
Надо в пакет XDTO добавить директиву импорта.
|
|||
13
Razor
16.08.11
✎
15:24
|
вроде все правильно, но когда обращаюсь к сервису, например из дрогой баз, то пишет "несоответствие типов", я так понимаю это относится как рак к этому значению. Я же должен просто передать - "e6bf9edf-b2ba-11e0-9cb6-001e655fedea"?
|
|||
14
DmitrO
16.08.11
✎
15:32
|
Показывай схему.
Показывай как обращаешься. Мало информации. Мне отсюда не видно как у тебя там все реализовано. |
|||
15
Scooter
16.08.11
✎
16:04
|
мошт не втему, не вникал
всёж поделюсь ссылкой http://infostart.ru/public/16001/ |
|||
16
Razor
16.08.11
✎
16:06
|
Это пакет XDTO
http://imagepost.ru/images/x/dt/xdto.jpg В веб-сервисе у операции есть параметр с типом, который выбран на картинке. Обращался я с другой конфигурации - создал обработку, где в форме задаются параметры и передаются в веб-сервис, но какой тип должен быть у этого параметра? |
|||
17
DmitrO
16.08.11
✎
16:14
|
Тип параметра веб-сервиса определяется его схемой - это закон.
>>Обращался я с другой конфигурации - создал обработку, где в форме задаются параметры и передаются в веб-сервис Показывай код обработки, которым обращался к веб-сервису. |
|||
18
Razor
16.08.11
✎
16:29
|
Тип параметра определяется веб-сервисом, если передавать его из обработки надо, что-то передать
http://imagepost.ru/images/n/mp/nmpwzvoksbrokpyuqcozftlodvjchg.jpg |
|||
19
Razor
16.08.11
✎
16:31
|
В веб сервисе я использовал метод СправочникМенеджер.ПолучитьСсылку()
|
|||
20
DmitrO
16.08.11
✎
16:34
|
(18) тут строка должна быть, с учетом (13) ты все правильно передаешь
|
|||
21
DmitrO
16.08.11
✎
16:36
|
(19) и что ты туда передал, в этот метод?
|
|||
22
DmitrO
16.08.11
✎
16:40
|
уж не чистое ли значение параметра функции исполнения операции веб-сервиса?
|
|||
23
Razor
16.08.11
✎
16:51
|
я передаю значение, которое я ввожу в форму - я ввожу туда идентификатор, то есть в обработке я задаю значение тпа строка и передаю его в операцию веб-сервиса?
|
|||
24
DmitrO
16.08.11
✎
16:53
|
я говорю в реализации веб-сервиса, в модуле веб-сервиса, в функции, в метод ПолучитьСсылку что передаешь?
|
|||
25
Razor
16.08.11
✎
16:53
|
Появляется ошибка, как раз в методе ПолучитьСсылку
Ошибка SOAP сервера: Неизвестная ошибка. {WebСервис.bron.Модуль(3)}: Ошибка при вызове метода контекста (ПолучитьСсылку) по причине: {WebСервис.bron.Модуль(3)}: Ошибка при вызове метода контекста (ПолучитьСсылку) по причине: Несоответствие типов (параметр номер '1') |
|||
26
Razor
16.08.11
✎
16:54
|
Туда передаю параметр операции сервиса, который передается клинтом
|
|||
27
DmitrO
16.08.11
✎
16:58
|
блиииин, если тебе русским языком написали что проблема в строке модуля номер 3 в методе ПолучитьСсылку, так значит веб-сервис-то все данные уже принял, и все ему уже понравилось, и схемы его тут непричем, а просто ты в модуле в своем коде накосячил!
Ты туда эту строку и пихаешь, а надо туда пихать объект типа УникальныйИдентификатор, посмотри в СП. |
|||
28
DmitrO
16.08.11
✎
16:58
|
И теперь скажи мне, а чем тебе пример в (9) не понравился?
|
|||
29
Razor
16.08.11
✎
17:10
|
(27) да, я уже посмотрел и по идее надо задать Новый УникальныйИдентификатор, но я же пихаю не строку у меня же во входных параметрах операции сервиса тип - AnyRef, а не строка
(28)я пробовал, там тоже выдавало ошибку в парметре |
|||
30
Razor
16.08.11
✎
17:31
|
Вроде получилось, спасибо.
Я задал параметр веб-сервиса строку и передал в обработке идентификатор строкой, а в коде модуля уже преобразовал в идентификатор. |
|||
31
DmitrO
16.08.11
✎
19:02
|
Тип AnyRef унаследован от типа строка. Т.е. это и есть строка, просто ограниченная фасетами, длина, набор символов, возможно формат. Это все задается в схеме которую ты импортируешь.
>>я пробовал, там тоже выдавало ошибку в парметре а у меня такой код работает с 2008 года. Каком параметре? У тебя ошибка была в параметре метода ПолучитьСсылку, куда надо передавать УникальныйИдентификатор, а я тебе предлагал использовать функцию XMLЗначение, куда передается именно строка. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |