#0
by Dagmanor
Доброго времени суток, Есть веб-сервис, написанный на другой конфигурации 1С (платформа 8.2). В текущей конфигурации (тоже 8.2) я создал ВС-Ссылку, все как обычно, но в одной из операций Веб-сервиса один из параметров имеет тип AnyType (изначально так писалось потому, что туда передается массив из стороннего приложения), а теперь мне необходимо передать туда массив из другой 1С, при потытке это сделать 1С ругается на несоответствие типов... Может кто подскажет почему? Теоретически AnyType должен принимать любой тип...
#7
by Dagmanor
Пробовал так: ====Ошибка==== Невідома помилка. Невідповідність типів XDTO: Тип '{' не знайдений Тип належить пакету, що відсутній у фабриці типів XDTO через: Невідповідність типів XDTO: Тип '{' не знайдений Тип належить пакету, що відсутній у фабриці типів XDTO
#11
by blopp
Отец! А дальше с этим что делать, в свой SOAP клиент пихать? Может тогда заодно и код приложишь? Для того что бы массив пролез в web-сервис, у него в wsdl должен быть импортирован /data/core
#12
by Serginio1
А по русски. А то я по хохляцки неразумею. Ну смысл в том, что в пакете нет массива. Тьфу. Тебе надо не СериализаторXDTO.ЗаписатьXDTO(массив); а прокси использовать. ТипСтрока=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","string"); Дя каждого стр из массив Цикл
#14
by blopp
Вот за что я люблю мисту ;) Приведенный код сделает тоже самое что и автора , но гораздо более громоздко и только для строк. Разница только в том что у автора используется глобальная фабрика, а в от web-сервиса. От web-сервиса более правильно (по сути, единственно правильно), но для встроенных типов пофигу.
#16
by blopp
Спс. кэп, это вроде как бы следует из ;) Какое это имеет отношение к: - коду который сам формирует XML мимо фабрики XDTO из - тому факту что в этот web-сервис не импортировано пространство имен и массив в него не влезет?
#17
by blopp
Точно Одна глобальная, а другая от web-сервиса. И присваивать объекты созданные фабрики свойствам объектов созданных другой нельзя. Но для встроенных в платформу пакетов (кроме current-config) разницы нету - т.е. присваивать можно
#21
by blopp
Довольно странно выглядит: - записать наколенными средствами XML - прочитать его в anyType - установить в качестве значения другого свйоства anyType Почему сразу не создать нужный XDTO объект? Что бы не заморачиваться с синтаксисом методов фабрики? Это не очень работающий код XMLСтрока - это вообще не XDTO сериализация. Лучше уж просто записать все в XML одной фабрикой и прочитать другой Угу. Это местами в БСП юзается, хотя наверное зря - не документировано ведь.
#24
by blopp
Не оч. понятно какое-то отношение странный способ создания XDTO объекта в 1сике имеет к внешней системе - она ведь уже XML получает. Ну да мне пофиг, если честно. Если типизированный - ни как. Но ты ведь и создаешь не типизированный. Создаешь anyType и добавляешь ему свойства (ну или текст заполняешь).
#25
by Serginio1
Для встроенных платформ просто можно передавать через строку используя ЗаписатьXML ПрочитатьXML Как раз и создает нужное представление. Другое дело, что может не быть такого типа в другой конфигурации. Это работает. Я перенос между базами делаю на уровне объектовXDTO
#28
by blopp
XMLСтрока - это сериализация от 8.0. Для некоторых типов (для которых есть XDTO сериалиазация) она просто не предусмотрена Под рукой нет - постараюсь вечером скинуть Линк на ветку не сохранился случайно?
#30
by Serginio1
29+ а вот объекты приходится копировать. Но там есть проблема с Anyref их нужно отдельно обрабатывать
#32
by Serginio1
Кстати для регистров сведений СерализатоXDTO и ФабрикаXDTO по разному генерируют XML
#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..
#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;
#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С
- Как из типа значения (Тип) получить значение по умолчанию данного типа?
- Как из типа значения (Тип) получить значение по умолчанию данного типа?
- Как ограничить тип у поля выбора с типом "Описание типов"?
- Тип(Реквизит.Тип) = Тип("Строка")
- Тип(Реквизит.Тип) = Тип("Строка")
- Как привести значение типа "Описание типов" к значению типа "Тип"
- Тип цен номенклатуры контрагентов --> Тип цен номенклатуры 1С 8.2
- Поле ввода с составным типом данных. Как убрать выбор типа, если указан тип?
В этой группе 1С
- Сложить две таблицы значений
- Поле отбора СКД вывести в отдельное поле формы
- Ограничения (RLS) на просмотр базы только после указанной даты, как?
- УТ11 продавали в минус
- Конвертация контактных данных в регистр сведений
- Delphi. Двухмерный массив разных типов данных.
- Розница 2.0 - печать товарного чека до записи документа чека
- Постоянно зависает FreeNas
- ЗУП с удержание не расчитывается НДФЛ как исправить?
- 8.1. Переменная не определена (ВнешниеОбработки). Недоступно на сервере
- Бух 3.0 - переделать Юрлицо на Физлицо
- Автоматическое заполнение подчиненного объекта в справочнике 1с 8.2
- Ideal Administration: меняется фон рабочего стола при подключении.
- https запрос из 1с
- Произвольный заголовок в СКД
- Управление медиаплеером по сети
- выгрузить колонку из табличной части по отбору
- Как посчитать итог в таблице на управляемой форме?
- Неправильный путь к файлу 'v8srvr://dbeng8/f044D34A0/Config'
- УФ как удалить реквизит формы