Имя: Пароль:
1C
1С v8
Неверный формат. WS-ссылки.
0 AllJoke
 
13.07.12
12:40
День добрый всем. Вопрос возник в следующем. По примере подключения ws-ссылок на ЦБРФ пытаюсь подрубиться к нашему тестовому веб-сервису. Разница там в расщирениях asmx(ЦБРФ) и svc(НашВебСервис). Код следующий:

СервисОхБил = WSСсылки.OhBil.СоздатьWSПрокси("http://tempuri.org/", "BizTalkServiceInstance", "WSHttpBinding_ITwoWayAsyncVoid");
     
   ТипПараметра = СервисОхБил.ФабрикаXDTO.пакеты.получить("http://tower.ru/requestTest").Получить("Message");
   
   Параметр1_1 = СервисОхБил.ФабрикаXDTO.создать(ТипПараметра);
   
   Параметр1_1.SecName = Пар;
       
   СервисОхБил.Operation1(Параметр1_1); //вот здесь и возникает ошибка "Неверный формат"
Сам ВебСервис до боли прост - http://screencast.com/t/CNtw7ozZ

В чем может быть беда? МОжет ли это в каких либо ограничениях? Платформа 8.2.14.540
1 AllJoke
 
13.07.12
12:41
http://screencast.com/t/CNtw7ozZ - вот модель веб-сервиса
2 Serginio1
 
13.07.12
12:48
Ну тебе нужно заполнить все параметры и проверить тип параметра?
А не проще тип получить через СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message");
3 AllJoke
 
13.07.12
12:53
А не в курсе как заполняются составные объекты?
Например у меня в Message есть Adress, он составной (берётся из Message_Adress). Как мне его заполнить?

Типа:

МесАдр =  СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message_Adress")
МесАдр.Свойство1 = "1";
МесАдр.Свойство2 = "2";
МесАдр.Свойство3 = "3";

И вот этот полученный список значений нужно запихнуть в Message.Adress.
4 Serginio1
 
13.07.12
12:58
Так же как и Параметр1_1
Тип_Message_Adress=СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message_Adress");
МесАдр= СервисОхБил.ФабрикаXDTO.создать(Тип_Message_Adress);
5 AllJoke
 
13.07.12
13:01
(4) А подробнее можно? Вот каким макаром я делаю:

СервисОхБил = WSСсылки.OhBil.СоздатьWSПрокси("http://tempuri.org/", "BizTalkServiceInstance", "WSHttpBinding_ITwoWayAsyncVoid");
   ТипПараметра_Message = СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message");
   ТипПараметра_Message_Adress = СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message_Address");
   ТипПараметра_Message_PlaceOfBirth = СервисОхБил.ФабрикаXDTO.Тип("http://tower.ru/requestTest","Message_PlaceOfBirth");
   
   Параметр_Message = СервисОхБил.ФабрикаXDTO.создать(ТипПараметра_Message);
   Параметр_Message_Adress = СервисОхБил.ФабрикаXDTO.создать(ТипПараметра_Message_Adress);
   Параметр_Message_PlaceOfBirth = СервисОхБил.ФабрикаXDTO.создать(ТипПараметра_Message_PlaceOfBirth);
   
   Параметр_Message_Adress.Region = "РК";
   Параметр_Message_Adress.RegistrationPlace = "Мор";
   Параметр_Message_Adress.TypeRegistration = "Про";
   
   Параметр_Message_PlaceOfBirth.__content = "///";
   Параметр_Message_PlaceOfBirth.code = "11";
   
   Параметр_Message.FirstName = "павел";
   Параметр_Message.FathersName = "Валерьевич";
   Параметр_Message.DateOfBirth = "08061983";
   Параметр_Message.SNILS = "911";
   Параметр_Message.Address = Параметр_Message_Adress;
   Параметр_Message.PlaceOfBirth = Параметр_Message_PlaceOfBirth;
   Параметр_Message.SecName = "смирнов";    
   СервисОхБил.Operation1(Параметр_Message);
6 AllJoke
 
13.07.12
13:03
джае после этого "неверный формат"
7 AllJoke
 
13.07.12
13:07
кстати - типы параметров везде строковые, кроме Address и PlaceOfBirth - они составные. Но и там все "строка".
8 Serginio1
 
13.07.12
13:08
Вообще 1С плохо как то с высокой вложенностью. Уже сейчас не помню, но мучился. Если бы параметры не были заполнены то ругалсьбы на незаполненные параметры. Попробуй для интереса .__content заменить?
Или посмотреть на структуру

Процедура ПоказатьОбъект(Прокси,Объект)
   ЗаписьХМЛ= новый ЗаписьXML;
   ЗаписьХМЛ.УстановитьСтроку();
   Прокси.ФабрикаXDTO.записатьXML(ЗаписьХМЛ,Объект);
   текст=Новый ТекстовыйДокумент;
   Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть());
   Текст.Показать();
   
КонецПроцедуры
9 Serginio1
 
13.07.12
13:09
Да и Смирнов то надо с Большой буквы. Обижаешь.
10 Serginio1
 
13.07.12
13:11
Или можешь использовать сначало простую структуру. Затем добавить составную итд. Для того что бы понять откуда ноги растут.
11 AllJoke
 
13.07.12
13:13
(10) Попробую щас структуру посмотреть. "смирнова" изменю на "Смирнов" ))
12 Саша Питерский
 
13.07.12
13:21
(5) Если указанный веб сервис в виде wsссылки загрузить в конфигурацию, то какой тип будет у параметра веб сервиса с операцией operation1?

Параметр_Message является ли типом ОбъектXDTO и совпадает ли его тип значения с типом, который указан в качестве параметра operation1?
13 AllJoke
 
13.07.12
13:21
<Message xmlns="http://tower.ru/requestTest" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <FirstName>Павел</FirstName>
   <FathersName>Валерьевич</FathersName>
   <SecName>Смирнов</SecName>
   <DateOfBirth>08061983</DateOfBirth>
   <PlaceOfBirth code="11">001</PlaceOfBirth>
   <SNILS>911</SNILS>
   <Address>
       <Region>РК</Region>
       <RegistrationPlace>Мор</RegistrationPlace>
       <TypeRegistration>Про</TypeRegistration>
   </Address>
</Message>
14 AllJoke
 
13.07.12
13:22
(12)
тип будет у параметра веб сервиса с операцией operation1 - Тип "Message"

воторое щас проверю.
15 AllJoke
 
13.07.12
13:23
Параметр_Message - да, это "ОбъектXDTO"
16 AllJoke
 
13.07.12
13:24
А по поводу типа значения в Параметр_Message, так там же только свойства.
17 Саша Питерский
 
13.07.12
13:28
(16) Вот этого ответа не понял.
18 AllJoke
 
13.07.12
13:31
(17) имеется ввиду что здесь - Параметр_Message - содержатся же только свойства, т.е. не могу я посомтреть тип. А вот кстати наводящая мысль, которая пришла после вопросов:

part = СервисОхБил.ФабрикаXDTO.Создать(ТипПараметра_Message, Параметр_Message);

Так выдаёт ошибку - Несоотв-ие параметров, параметр 2
19 Саша Питерский
 
13.07.12
13:32
(18) Вроде можно написать Параметр_Message.Тип()
20 AllJoke
 
13.07.12
13:32
{Обработка.Обработка1.Форма.Форма.Форма(144)}: Ошибка при вызове метода контекста (Создать)
   part = СервисОхБил.ФабрикаXDTO.Создать(ТипПараметра_Message, Параметр_Message);
по причине:
Несоответствие типов (параметр номер '2')
21 AllJoke
 
13.07.12
13:32
(19) неа.
22 AllJoke
 
13.07.12
13:33
23 AllJoke
 
13.07.12
13:33
можно, сорри.
24 AllJoke
 
13.07.12
13:36
а как понять - лексическое представление значения?
25 Саша Питерский
 
13.07.12
13:46
Внимательно посмотрел твой код в (0), вроде код правильный. Потом посмотрел картинку в (1), у меня родилось единственное предположение, что у тебя Свойство и Тип объекта называются одинаково, возможно это причина ошибки?
Попробуй тип объекта переименовать в MessageType
26 AllJoke
 
13.07.12
13:47
(25) Тип именно какого объекта? В модели сервиса или в коде?
27 Саша Питерский
 
13.07.12
13:50
(26) На картинке из (1) есть группа Типы объектов. Первый из них называется Message. Вот его предлагаю переименовать. Переименовывать конечно в модели сервиса.
28 AllJoke
 
13.07.12
13:52
(27) {Обработка.Обработка1.Форма.Форма.Форма(144)}: Ошибка при вызове метода контекста (Создать)
  part = СервисОхБил.ФабрикаXDTO.Создать(ТипПараметра_Message, Параметр_Message);
по причине:
Несоответствие типов (параметр номер '2')
29 AllJoke
 
13.07.12
13:52
f yf 'nj yt vj;tim jndtnbnm&
30 AllJoke
 
13.07.12
13:52
а на это не можешь отвтетить?
31 AllJoke
 
13.07.12
14:08
Переименование не решило проблему. Всё равно "неверный формат".
32 Serginio1
 
13.07.12
14:12
Какой то странный у тебя <PlaceOfBirth code="11">001</PlaceOfBirth>
сравни с Address

а как
part = СервисОхБил.ФабрикаXDTO.Создать(ТипПараметра_Message);
33 AllJoke
 
13.07.12
14:14
(32) сказали так и должно быть. Типа code - 'nj fnhb,en
34 AllJoke
 
13.07.12
14:14
это атрибут
35 AllJoke
 
13.07.12
14:15
Вообщем. Не работает.
36 AllJoke
 
13.07.12
14:15
Уже все ваши советы проделали - не пашет.
37 Саша Питерский
 
13.07.12
14:15
(31) Тогда без доступа к коду у меня закончились предположения. Можно еще попробовать Параметр_Message.Проверить() сделать, может объект неправильно заполнен.

(28) Попробуй указать вторым параметром имя типа строкой.
38 AllJoke
 
13.07.12
14:15
Либо 1с с *.svc не умеет работать.
39 AllJoke
 
13.07.12
14:17
Параметр_Message.Проверить() - {(1)}: Обращение к процедуре объекта как к функции (Проверить)
40 Саша Питерский
 
13.07.12
14:17
(39) В отладчике бесполезно, пропиши в код.
41 AllJoke
 
13.07.12
14:20
+(39) - это в отлоадчике
42 AllJoke
 
13.07.12
14:20
(40) - ничего не выдаёт. всё нормально.
43 Serginio1
 
13.07.12
14:23
Атрибут атрибутом а где у него Параметр_Message_PlaceOfBirth.__content = "///";

   Параметр_Message_PlaceOfBirth.code = "11";

.__content?

Попробуй создать метод который принмает структуру без PlaceOfBirth. Если не будет ошибки значит проблема в ней
44 AllJoke
 
13.07.12
14:24
(43) сейчас попробуем.
45 Serginio1
 
13.07.12
14:24
Или .__content заменить на content
46 AllJoke
 
13.07.12
14:24
я кстати знаечние изменил на "001" в PlaceOfBirth
47 Serginio1
 
13.07.12
14:25
или сделайте его структурой
48 AllJoke
 
13.07.12
14:28
(47) избавимся и глянем
49 AllJoke
 
13.07.12
14:35
Не помогло и удаление PlaceOfBirth
50 AllJoke
 
13.07.12
14:35
СашаПитерский - может подрубишься по тиму и глянешь?
51 Саша Питерский
 
13.07.12
14:39
подрубишься по тиму это что значит?
52 Serginio1
 
13.07.12
14:40
Покажи какой тип у параметра
53 Serginio1
 
13.07.12
14:41
А без Address и их обеих?
54 AllJoke
 
13.07.12
14:44
(53) можешь по тиму подрубиться? Или Ами Админ.
55 AllJoke
 
13.07.12
14:47
И что самое странное - ведь именно 1с ругается а не BizTalkServer.
56 AllJoke
 
13.07.12
14:58
Вообщем итог - всё сделали строками. "неверный формат"
57 AllJoke
 
13.07.12
14:58
Не работает.
58 AllJoke
 
13.07.12
15:33
Скиньте пжлста конфу по работе с Веб-Сервисами. Говорят на диске ИТС такая есть.
59 Serginio1
 
13.07.12
15:40
То есть это не 1С вэб сервис? У меня вообще сейчас 8 ки нет.
А вообще не все форматы 1С понимает. Приходится использовать наприме C#.
v8: Доступ к WEB-сервису из 1С 8.2 через https

Если нельзя сервисописателей подвинуть. Ну а так нужны структуры совместимые с 1С. И все стараются писть так, что бы и 1С понимало
60 AllJoke
 
13.07.12
15:46
(59) Нет. Это сервис от BizTalk. Пытаемся тестовый сделать. Я так и думал что 1С не всё понимает. Поговорю с нашими писателями, может чего накумекают.
61 AllJoke
 
13.07.12
15:49
а конфа вышеупомянутая есть у кого?
62 Serginio1
 
13.07.12
16:16
А вообще попробуй пойти по другому пути. Создать пакет  в 1С. Экспортировать схему. А в биз талке её импортировать.
63 AllJoke
 
16.07.12
15:17
в продолжении темы. Решил оттестить веб-сервис ЗАГСа. Там в него закладываются три параметра:
http://screencast.com/t/OTm9qobpD

Делаю так:

СервисЗАГС = WSСсылки.wssilka.СоздатьWSПрокси("http://wsService.zags.com/", "WsZagsTimeZBImplService", "WsZagsTimeZBImplPort");
   ТипПар_Range = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","DateRange");
   ТипПар_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","EnumZBTorj");
   ТипДата = СервисЗАГС.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","dateTime");
   ТипСтрока = СервисЗАГС.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
   Парам_Range = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_Range);
   Парам_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_EnumZBTorj,"ZB_NODIFF");
   Парам_Range.minDat = СервисЗАГС.ФабрикаXDTO.Создать(ТипДата, Пар);
   Парам_Range.maxDat = СервисЗАГС.ФабрикаXDTO.Создать(ТипДата, Пар);
   Пар_ид = СервисЗАГС.ФабрикаXDTO.Создать(ТипСтрока, "0030");
   Рез = СервисЗАГС.getDaysZB(Пар_ид, Парам_Range, Парам_EnumZBTorj); // здесь выпадает дикая ошибка:

{Обработка.Обработка1.Форма.Форма.Форма(176)}: Ошибка при вызове метода контекста (getDaysZB)
   Рез = СервисЗАГС.getDaysZB(Пар_ид, Парам_Range, Парам_EnumZBTorj);
по причине:
Ошибка вызова операции сервиса:  {http://wsService.zags.com/}:WsZagsTimeZBImplService:getDaysZB()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://jaxb.dev.java.net/array}dateTimeArray - [1,227]
Проверка дополнительного свойства:
   форма: Элемент
   имя: item
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://jaxb.dev.java.net/array}dateTimeArray - [1,227]
Проверка дополнительного свойства:
   форма: Элемент
   имя: item
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://jaxb.dev.java.net/array}dateTimeArray
64 AllJoke
 
16.07.12
15:17
Я параметры неправильно передаю в веб сервис или чего?
65 AllJoke
 
16.07.12
17:01
Может мне кто-нибудь объяснить с какими вообще веб-сервисами дружит 1С. Я уже беру самый наипростейший, с двумя параметрами: строка и перечесление, - и всё равно ошибка "Структура объекта не соответствует типу". Хотя с сервисом ЦБРФ всё проходит на ура.
66 Serginio1
 
16.07.12
17:27
Ну вообщето если тип в параметре не AnyType то можно передавать параметры без преобразования к объекту XDTO

Парам_Range = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_Range);
   Парам_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_EnumZBTorj,"ZB_NODIFF");
   Парам_Range.minDat =  Пар;
   Парам_Range.maxDat = Пар;
   Пар_ид = "0030";
   Рез = СервисЗАГС.getDaysZB(Пар_ид, Парам_Range, Парам_EnumZBTorj); // здесь выпадает дикая

ну и заполнить Парам_EnumZBTorj
Рез = СервисЗАГС.getDaysZB(Пар_ид, Парам_Range, Парам_EnumZBTorj);

По поводу массивов в примере C# я не нашел решение. Хотя можно добавлять значения как атрибут.
Кстати а как отображается тип данных http://jaxb.dev.java.net/array}dateTimeArray
67 Nexux
 
16.07.12
17:30
делайте через mssoap
68 AllJoke
 
16.07.12
17:34
Вот банальщина:

ТипПар_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","EnumZBTorj");
ТипСтрока = СервисЗАГС.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
Пар_ид = СервисЗАГС.ФабрикаXDTO.Создать(ТипСтрока, "0030");
Парам_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_EnumZBTorj,"ZB_NODIFF");
Рез = СервисЗАГС.getMinMaxDaysZB(Пар_ид, Парам_EnumZBTorj);
У метода "getMinMaxDaysZB" два параметра: idZags - тип "string", torj - тип "EnumZBTorj". Почему же он ругается??? Метод возращает значение типа - "DateRange (http://wsService.zags.com/)". Ругается на всё ту же структуру и всё. Что ей (1С) надо....?
69 AllJoke
 
16.07.12
17:34
(67) Это ещё как?
70 Serginio1
 
16.07.12
17:43
Так EnumZBTorj это не строка. Что это за тип?
71 AllJoke
 
16.07.12
17:49
Тип значения XDTO. Базовый тип  - string. Но как видно из схемы - это перечисление:
http://screencast.com/t/fUJuSfQCcne
72 Serginio1
 
16.07.12
18:04
Так какую ошибку выдает?
В первом случае ругалось на dateTimeArray
Опять же можно и проще Рез = СервисЗАГС.getMinMaxDaysZB("0030", Парам_EnumZBTorj);
73 Serginio1
 
16.07.12
18:06
Уточнение параметров для простых типов нужно для типов AnyType.
74 AllJoke
 
17.07.12
08:25
Уже выдаёт ошибку:

Структура объекта не соответствует типу: {http://wsService.zags.com/}DateRange

Теперь про уточнение - если я в коде каждый тип уточняю, это разве не верно? Как то разве влияет? И вообще, 1С толком не даёт вразумительных ответом по ошибке. Что за структура, какого объекта, типу я так понял "DateRange"/
75 AllJoke
 
17.07.12
08:28
И ещё, может и вправду 1С ни со всеми веб-сервисами дружит. На примере ЦБРФ всё проходит на ура. Правда там и параметр один, но всё же.
76 Serginio1
 
17.07.12
10:28
ТипПар_Range = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","DateRange");
Парам_Range = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_Range);
А где запись данных в Парам_Range

(74) А зачем плодить лишние сущности,там где можно обойтись бе уточнения типа?
(75) Очень много структур и массивов не понимает. Смотри 59 (1 и 8)
77 Serginio1
 
17.07.12
10:30
Вернее что представляет Пар?
Парам_Range.minDat =  Пар;
   Парам_Range.maxDat = Пар;
78 AllJoke
 
17.07.12
11:26
(77) Это сейчас не актуально. Я уже без дат делаю.

СервисЗАГС = WSСсылки.wssilka.СоздатьWSПрокси("http://wsService.zags.com/", "WsZagsTimeZBImplService", "WsZagsTimeZBImplPort");
   ТипПар_Range = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","DateRange");
   ТипПар_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.Тип("http://wsService.zags.com/","EnumZBTorj");    
   ТипДата = СервисЗАГС.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","dateTime");
   ТипСтрока = СервисЗАГС.ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");
   
   Парам_EnumZBTorj = СервисЗАГС.ФабрикаXDTO.создать(ТипПар_EnumZBTorj,"ZB_NODIFF");
   НачГ = НачалоГода(Пар);
   КонГ = КонецГода(Пар);
   
   Пар_ид = СервисЗАГС.ФабрикаXDTO.Создать(ТипСтрока, "0030");
   
   
   Рез = СервисЗАГС.getMinMaxDaysZB(Пар_ид, Парам_EnumZBTorj);

Должен возвратить две даты, такак в редакторе SOAP 4.0 работает.
79 Serginio1
 
17.07.12
12:14
А с Парам_EnumZBTorj работает?
80 Serginio1
 
17.07.12
12:18
(78) То есть ругается на возвращаемый тип?
Еще для 1С все out параметры должны идти в конце параметров. При чем если out параметр сделать не в конце 1С не ругнется, но при вызове ве равно поставит его в конец. А потом думай поставил одно а получил другое. Но это относистся к собственым сервисам
81 AllJoke
 
17.07.12
12:26
(79) такого сервиса нет с одним параметром. Эти два (в коде 78) и так минимальны
82 AllJoke
 
17.07.12
12:27
(80)  а ругается на структру объекта которая не соответствует типу. Что за структура? Какого объекта? Какому типу? Об этом информации воообще ноль!
83 Serginio1
 
17.07.12
13:54
(82) А что  возвращает getMinMaxDaysZB. Надо понимать DateRange?
84 Serginio1
 
17.07.12
13:59
Посмотри v8: MSSOAP 1C
85 AllJoke
 
17.07.12
14:11
(83) да
86 AllJoke
 
17.07.12
14:14
(84) Так там вообще стандартные средства не используются.
87 Serginio1
 
17.07.12
14:43
(86) Ну 1С не все понимает. Мало того, они еще и собственные структуры по разному записывать например СериализаторXDTO и ОбъектXDTO по той же схеме по разному запишут регистр сведений.