Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

8.1 СериализаторXDTO Отсутствует отображение для типа 'Структура'

8.1 СериализаторXDTO Отсутствует отображение для типа 'Структура'
Я
   MaxS
 
14.04.18 - 13:23
Нужно выгрузить структуру в xml файл. Код на платформе 8.1 генерирует ошибку, на 8.3 работает.

ЗначениеСвойства = Новый Структура("тест","тест");
ЗначениеXDTO = СериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства);

МойСериализаторXDTO = Новый СериализаторXDTO(МояФабрикаXDTO);
ЗначениеXDTO = МойСериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства);

Текст ошибки:
Ошибка при вызове метода контекста (ЗаписатьXDTO): Ошибка отображения типов:
Отсутствует отображение для типа 'Структура'
ЗначениеXDTO = СериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства);
Или: ЗначениеXDTO = МойСериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства);

Если из МояФабрикаXDTO убрать xsd схему "http://v8.1c.ru/8.1/data/core";, то ошибка появляется на любой платформе. Логично предположить, что в МояФабрикаXDTO загружены требуемые схемы. Почему не работает?
 
 
   Franchiser
 
1 - 14.04.18 - 14:47
На клиенте делаешь?
   MaxS
 
2 - 14.04.18 - 14:54
(1) Толстый клиент, платформа 8.1, конфигурация УТ 10.2.
Та же самая конфигурация на платформе 8.3 в режиме совместимости платформы 8.1, тот же код - всё работает.
   Franchiser
 
3 - 14.04.18 - 17:50
Попробуй в модуль объекта вставить этот код
   hhhh
 
4 - 14.04.18 - 18:11
(2) сама структура ни при чем. Это внутри структуры в одном из полей какая то фигня. Com-объект или еще что-то
   Franchiser
 
5 - 14.04.18 - 18:16
В (0) в структуре только элемент "тест"
   hhhh
 
6 - 14.04.18 - 18:21
а, блин - это 8.1
   MaxS
 
7 - 14.04.18 - 21:16
(3) В модуле объекта и в модуле формы результат одинаков, пробовал.
   MaxS
 
8 - 15.04.18 - 07:45
Решение нашлось. Поиск причин бага и его исправления более простым способом продолжается!

Информация по схеме "http://v8.1c.ru/8.1/data/core";
МойСериализаторXDTO.Фабрика.Пакеты[1].Количество() равно 43 на платформе 8.3 и равно 18 на платформе 8.1. Тип "Structure" почему-то пропадает.
Если загрузить такую же схему, изменив URI на такой  "http://v8.1c.ru/8.2/data/core";, на платформе 8.1 количество получаем 43.
Но МойСериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства) все равно не работает.
Нашлось обходное решение. Такая конструкция работает:
ТипСтруктура =  МояФабрикаXDTO.Тип("http://v8.1c.ru/8.2/data/core";, "Structure");

СтруктураXDTO = МояФабрикаXDTO.Создать(ТипСтруктура);
Далее дело техники в цикле рекурсивно обходим структуру и заполняем ОбъектXDTO
Вызывать функцию примерно так: ЗначениеXDTO = МояСтруктураВОбъектXDTO(ЗначениеСвойства, МойСериализаторXDTO);
Корректно обрабатываются такие значения:
ЗначениеСвойства1 = Новый Структура("тест3,тест4","тест",ТекущаяДата());
ЗначениеСвойства2 = Новый Структура("тест2",ЗначениеСвойства1);
ЗначениеСвойства = Новый Структура("тест",ЗначениеСвойства2);

После записи xml файла открываем его как текстовый и меняем "http://v8.1c.ru/8.2/data/core"; на "http://v8.1c.ru/8.1/data/core"; - такой вот костыль.
   drei
 
9 - 15.04.18 - 12:51
(8) А с чего ты вообще взял, что это ошибка? 8.1 не умеет сериализовать структуру. Совсем. 8.3 в режиме совместимости дает тебе этот шанс. Так что меня платформу или засучивай рукава и пиши XML без обработки вручную.

Хотя можно еще повозмущаться, что 7.7 в XDTO не умеет, да.
   MaxS
 
10 - 15.04.18 - 13:11
(9) Ну 8.1 не умеет и ладно. Почему фабрика, которую создали программно зависит от фабрики платформы?
Менять платформу - это не выход, т.к. моя цель предоставить решение для клиентов  с любой платформой.
И 7.7 можно заставить генерировать xml, пригодный для последующего разбора, тут вопросов нет, т.к. границы возможностей известны.
 
 Рекламное место пустует
   drei
 
11 - 15.04.18 - 13:24
(10) Потому что пространство имен.
   MaxS
 
12 - 15.04.18 - 13:37
(11) Вероятно так и задумано, но неудобно. Если забыл указать какую-то схему в своей фабрике, то типовая не подхватывается, а если хочешь подменить типовую, то она мешается. Если разработчик так решил, значит так надо, зачем мешать и "баг" делать фичей? ;)
   drei
 
13 - 15.04.18 - 13:54
(12) В пространство имен, например, "http://www.w3.org/2001/XMLSchema"; ничего не хочешь добавить? Ну слава Богу!

Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует