Тип AnyType в Веб-сервисах и массив #665719


#0 by Dagmanor
Доброго времени суток, Есть веб-сервис, написанный на другой конфигурации 1С (платформа 8.2). В текущей конфигурации (тоже 8.2) я создал ВС-Ссылку, все как обычно, но в одной из операций Веб-сервиса один из параметров имеет тип AnyType (изначально так писалось потому, что туда передается массив из стороннего приложения), а теперь мне необходимо передать туда массив из другой 1С, при потытке это сделать 1С ругается на несоответствие типов... Может кто подскажет почему? Теоретически AnyType должен принимать любой тип...
#1 by acsent
1совский массив передаешь что ли?
#2 by Dagmanor
Да
#3 by Dagmanor
Актуально
#4 by Dagmanor
Люди... реально нужна помощь... Неужели никто не знает в чем загвоздка?
#5 by Serginio1
А как передаешь? Парам=СериализаторXDTO.ЗаписатьXDTO(массив)
#6 by Dagmanor
нет. как обычно: "массив = новый массив" и в параметр его
#7 by Dagmanor
Пробовал так:     ====Ошибка==== Невідома помилка. Невідповідність типів XDTO: Тип '{' не знайдений Тип належить пакету, що відсутній у фабриці типів XDTO через: Невідповідність типів XDTO: Тип '{' не знайдений Тип належить пакету, що відсутній у фабриці типів XDTO
#8 by Dagmanor
Как мне его втулить в AnyType?
#9 by Fragster
пихай элементы в списокXDTO
#10 by acsent
#11 by blopp
Отец! А дальше с этим что делать, в свой SOAP клиент пихать? Может тогда заодно и код приложишь? Для того что бы массив пролез в web-сервис, у него в wsdl должен быть импортирован /data/core
#12 by Serginio1
А по русски. А то я по хохляцки неразумею. Ну смысл в том, что в пакете нет массива. Тьфу. Тебе надо не СериализаторXDTO.ЗаписатьXDTO(массив); а прокси использовать. ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); Дя каждого стр из массив Цикл
#13 by Serginio1
У него (Есть веб-сервис, написанный на другой конфигурации 1С (платформа 8.2))
#14 by blopp
Вот за что я люблю мисту ;) Приведенный код сделает тоже самое что и автора , но гораздо более громоздко и только для строк. Разница только в том что у автора используется глобальная фабрика, а в от web-сервиса. От web-сервиса более правильно (по сути, единственно правильно), но для встроенных типов пофигу.
#15 by Serginio1
Есть разница между ФабрикаXDTO и Прокси.ФабрикаXDTO
#16 by blopp
Спс. кэп, это вроде как бы следует из ;) Какое это имеет отношение к: - коду который сам формирует XML мимо фабрики XDTO из - тому факту что в этот web-сервис не импортировано пространство имен и массив в него не влезет?
#17 by blopp
Точно Одна глобальная, а другая от web-сервиса. И присваивать объекты созданные фабрики свойствам объектов созданных другой нельзя. Но для встроенных в платформу пакетов (кроме current-config) разницы нету - т.е. присваивать можно
#18 by acsent
в был код как своствам XDTO устанавливать произвольную XML структуру
#19 by Serginio1
Но Можно копировать
#20 by Serginio1
Ты пробовал?
#21 by blopp
Довольно странно выглядит: - записать наколенными средствами XML - прочитать его в anyType - установить в качестве значения другого свйоства anyType Почему сразу не создать нужный XDTO объект? Что бы не заморачиваться с синтаксисом методов фабрики? Это не очень работающий код XMLСтрока - это вообще не XDTO сериализация. Лучше уж просто записать все в XML одной фабрикой и прочитать другой Угу. Это местами в БСП юзается, хотя наверное зря - не документировано ведь.
#22 by acsent
так устроены веб сервисы шарепойнт
#23 by acsent
как создать нужный объект, если его нет в типах?
#24 by blopp
Не оч. понятно какое-то отношение странный способ создания XDTO объекта в 1сике имеет к внешней системе - она ведь уже XML получает. Ну да мне пофиг, если честно. Если типизированный - ни как. Но ты ведь и создаешь не типизированный. Создаешь anyType и добавляешь ему свойства (ну или текст заполняешь).
#25 by Serginio1
Для встроенных платформ просто можно передавать через строку используя ЗаписатьXML ПрочитатьXML Как раз и создает нужное представление. Другое дело, что может не быть такого типа в другой конфигурации. Это работает. Я перенос между базами делаю на уровне объектовXDTO
#26 by acsent
покажи код, как anytype создать и добавить свойства
#27 by acsent
собственно вариант из предложили 1совцы на партнерском
#28 by blopp
XMLСтрока - это сериализация от 8.0. Для некоторых типов (для которых есть XDTO сериалиазация) она просто не предусмотрена Под рукой нет - постараюсь вечером скинуть Линк на ветку не сохранился случайно?
#29 by Serginio1
В данном случае для значений (не объектов) я еще не видел такого.
#30 by Serginio1
29+ а вот объекты приходится копировать. Но там есть проблема с Anyref их нужно отдельно обрабатывать
#31 by Serginio1
Да можно
#32 by Serginio1
Кстати для регистров сведений СерализатоXDTO и ФабрикаXDTO по разному генерируют XML
#33 by Serginio1
#34 by Fragster
мне больше нравится то, что в 8.1 (а возможно и 8.2) Сериализатор.ЗаписатьXML для набора записей регистра бухгалтерии с несколькими субконто не работает
#35 by blopp
Пример не нашел, видимо вытер когда переделывал на другую ветку. Примерно так: Объект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "anyType"));
#36 by blopp
Я не оч. понимаю для чего все это? Почему просто весь объект не записать в XML одной фабрикой а потом прочитать другой? Пруф? Или хотя бы пример разного XML'а? Для 8.2 точно работает, ну а 8.1..
#37 by Serginio1
#38 by Serginio1
Вообще показаны различные техники. Необязательно заполнять массив а потом преобразовывать в ОбъектXDTO. в 33 есть и этот вариант. Можно просто заполняить нужный ОбъектXDTO. Например для такой подход не срабатывает для объектов (DocumentObject,CatalogObject ...) если реквизиты Чем больше вариантов более понятние ТК, а может и другим кто хочет разобраться.
#39 by Serginio1
37 если добавить Объект.Добавить(ФормаXML.Элемент, "http://www.w3.org/2001/XMLSchema", "elem",ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"), "Значение Элемента")); уже появляется elem как СписокXDTO. Спасибо буду знать. Аналогичное решение для  "http://schemas.xmlsoap.org/wsdl/", "Array",
#40 by Serginio1
Возьми просто набор для регистров запиши через ЗаписатьXML и ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Объект); где объект это ОбъектXDTO поэтому для ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,Имя)); Кстати были проблемы и с для набора записей регистра бухгалтерии  как уже отмечал   Fragster в 34
#41 by Serginio1
Вот разница Это формирует ФабрикаXDTO А вот Сериализатор <InformationRegisterRecordSet.КонтактнаяИнформация>
#42 by blopp
Кажется, это мелочь. Фактически XML эквивалентен. От того что еще пространству имен назначается еще один префикс ничего страшного не произойдет. Приведенный XML от фабрики - это явно фрагмент. Где-то выше должно быть написано что все записано в контексте , т.е. типы без указания пространства имен к нему и относятся.
#43 by Serginio1
Но вот Объект=СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO); такой текст не читает Конечно фрагмент зачем тебе описание типов? Я привел различие. При этом справочники, документы прекрасно читаются. Там везде стоит ЗаписьXML.ЗаписатьОбъявлениеXML;
#44 by Serginio1
43 в Любом случае не должно быть различий. Это баг
#45 by Serginio1
Вернее сериализатор не читает ОбъектXDTO. Не помню Про ПрочитатьXML. Сейчас посмотрю.
#46 by blopp
- да их и нет. Как записывать все равно - просто фабрика не умеет определять не явно заданный тип. Если типы задавать явно - будет работать все равно через что писать. На всякий случай проверил:
#47 by Serginio1
Да сейчас сам проверил на 8.3 все проходит. Видно подправили. Буду знать. было 2 года назад.
#48 by Serginio1
Фабрика не умеет но тип есть в Xml Имя=ЧтениеXML.Имя;  ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,Имя));
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С