Вход | Регистрация

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"; ничего не хочешь добавить? Ну слава Богу!

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