Имя: Пароль:
1C
1С v8
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Значение, куда передается именно строка.
Закон Брукера: Даже маленькая практика стоит большой теории.