Имя: Пароль:
1C
1С v8
Интеграция 1С 8.3 и MS Project
,
0 denis_jj
 
03.04.15
15:15
Здравствуйте, коллеги.

Столкнулись с такой проблемой. Интегрируем 1С 8.3 (8.3.5.1383) и Microsoft Project 2013. Используем для этого WEB-сервисы Project PSI. На стороне 1С подключаемся к сервису Project и считываем список проектов. В момент чтения Ответ = Прокси.ReadProjectList(Парам); платформа выдает ошибку:

{Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (ReadProjectList)
                Ответ = Прокси.ReadProjectList(Парам);
по причине:
Ошибка вызова операции сервиса:  {http://schemas.microsoft.com/office/project/server/webservices/Project/}:Project:ReadProjectList()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [1,613]
Проверка дополнительного свойства:
                форма: Элемент
                имя: {http://www.w3.org/2001/XMLSchema}element
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [1,613]
Проверка дополнительного свойства:
                форма: Элемент
                имя: {http://www.w3.org/2001/XMLSchema}element
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.w3.org/2001/XMLSchema}anyType

по причине:
Несоответствие типов XDTO:
Тип '{http://www.w3.org/2001/XMLSchema}anyType' не соответствует типу '{http://www.w3.org/2001/XMLSchema}topLevelElement'
Тип свойства не соответствует типу значения



Для моделирования конфигурации нужно создать пустую базу, создать в ней обработку с приведенным ниже кодом.

&НаСервере
Процедура ТестНаСервере()
    
    Определение = Новый WSОпределения("http://srvprj:8081/pwa1/_vti_bin/psi/Project.asmx?wsdl","domain\user","password";,,,);
    
    Прокси = Новый WSПрокси(Определение,"http://schemas.microsoft.com/office/project/server/webservices/Project/","Project","ProjectSoap";,,,);
    Прокси.Пользователь = "domain\user";
    Прокси.Пароль = "password";
    
    ТипПараметр = Прокси.ФабрикаXDTO.Пакеты.Получить("http://schemas.microsoft.com/office/project/server/webservices/Project/").Получить("ReadProjectList";);
    Парам = Прокси.ФабрикаXDTO.Создать(ТипПараметр);
    Ответ = Прокси.ReadProjectList(Парам);
    
КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)
    ТестНаСервере();
КонецПроцедуры

Кто сталкивался с подобной ситуацией? Подскажите как обойти.
1 Господин ПЖ
 
03.04.15
15:30
1с "не унесла" какой-то тип
2 denis_jj
 
03.04.15
15:36
Мы перехватили данные обмена между 1С и сервером Project. В них нигде нет ссылки на тип  '{http://www.w3.org/2001/XMLSchema}topLevelElement' на который ссылается платформа. Сервис, разработанный на C# работает с этим (и другими) методами нормально.
Считаем, что это баг платформы 1С.
3 DmitrO
 
03.04.15
15:42
(2)так платформа вам говорит что вы суете ей anyType, а она ожидает topLevelElement

в передаваемых данных может и не быть нигде имени типа (topLevelElement).
4 rsv
 
03.04.15
15:43
(0) Можа по старинке  через DOM ?
5 DmitrO
 
03.04.15
15:48
а так?
ТипПараметр = Прокси.ФабрикаXDTO.Тип("http://schemas.microsoft.com/office/project/server/webservices/Project/";, "ReadProjectList");
6 denis_jj
 
03.04.15
15:55
(5) Пробовали. То же самое. Пробовали и WS ссылку в конфигурацию вносить, ничего не получается.
7 timurhv
 
03.04.15
15:55
(2) Это кривой веб-сервис со стороны MS Project - проходили при интеграции с Java - программистами
8 DmitrO
 
03.04.15
15:56
по документации (или по схеме) какого типа должен быть параметр у метода ReadProjectList
9 DmitrO
 
03.04.15
15:56
?
10 denis_jj
 
03.04.15
16:00
(8)(9) Нет там параметра, пустой он. в C# этот метод без параметра.
11 timurhv
 
03.04.15
16:00
Ставьте wireshark, отлавливайте что возвращает веб-сервис, смотрите что в xml не так.
12 denis_jj
 
03.04.15
16:01
(7) Можно более точные данные? Готовы привлечь Microsoft к решению проблемы. На C# всё работает нормально, багов нет.
13 DmitrO
 
03.04.15
16:02
(10)а без параметра вызывать?
14 denis_jj
 
03.04.15
16:03
(11) отловили ответ. XML визуально нормальный. Содержит описание схемы и полученные данные. В C# читает корректно.
15 denis_jj
 
03.04.15
16:03
(10) без параметра выдает ошибку. Параметр должен быть, только он сам пустой.
16 Bloood
 
03.04.15
16:12
SOAP UI вам в помощь. На крайний случай сохраняйте wsdl описание на компьютере и правьте ее под 1С. С any type 1с работает.
17 timurhv
 
03.04.15
16:14
(15) Уверены, что параметр верный? Попробуйте так:
Параметры = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("адрес типа", "ReadProjectList"));
18 denis_jj
 
03.04.15
17:55
(17)  С параметром уверен. Пробовали другие методы, например ReadProject(). Для него аналогичным способом создавали параметр. В этом методе если передать пустой УИД проекта, то платформа возвращает результат, но только пустой. А как только передаем УИД существующего проекта и ответ из проджекта идет не пустой - возникает ошибка.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.