|   |   | 
| 
 | 8.1 СериализаторXDTO Отсутствует отображение для типа 'Структура' | ☑ | ||
|---|---|---|---|---|
| 0
    
        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 загружены требуемые схемы. Почему не работает? | |||
| 1
    
        Franchiser 14.04.18✎ 14:47 | 
        На клиенте делаешь?     | |||
| 2
    
        MaxS 14.04.18✎ 14:54 | 
        (1) Толстый клиент, платформа 8.1, конфигурация УТ 10.2.
 Та же самая конфигурация на платформе 8.3 в режиме совместимости платформы 8.1, тот же код - всё работает. | |||
| 3
    
        Franchiser 14.04.18✎ 17:50 | 
        Попробуй в модуль объекта вставить этот код     | |||
| 4
    
        hhhh 14.04.18✎ 18:11 | 
        (2) сама структура ни при чем. Это внутри структуры в одном из полей какая то фигня. Com-объект или еще что-то     | |||
| 5
    
        Franchiser 14.04.18✎ 18:16 | 
        В (0) в структуре только элемент "тест"     | |||
| 6
    
        hhhh 14.04.18✎ 18:21 | 
        а, блин - это 8.1     | |||
| 7
    
        MaxS 14.04.18✎ 21:16 | 
        (3) В модуле объекта и в модуле формы результат одинаков, пробовал.     | |||
| 8
    
        MaxS 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" - такой вот костыль. | |||
| 9
    
        drei 15.04.18✎ 12:51 | 
        (8) А с чего ты вообще взял, что это ошибка? 8.1 не умеет сериализовать структуру. Совсем. 8.3 в режиме совместимости дает тебе этот шанс. Так что меня платформу или засучивай рукава и пиши XML без обработки вручную.
 Хотя можно еще повозмущаться, что 7.7 в XDTO не умеет, да. | |||
| 10
    
        MaxS 15.04.18✎ 13:11 | 
        (9) Ну 8.1 не умеет и ладно. Почему фабрика, которую создали программно зависит от фабрики платформы? 
 Менять платформу - это не выход, т.к. моя цель предоставить решение для клиентов с любой платформой. И 7.7 можно заставить генерировать xml, пригодный для последующего разбора, тут вопросов нет, т.к. границы возможностей известны. | |||
| 11
    
        drei 15.04.18✎ 13:24 | 
        (10) Потому что пространство имен.     | |||
| 12
    
        MaxS 15.04.18✎ 13:37 | 
        (11) Вероятно так и задумано, но неудобно. Если забыл указать какую-то схему в своей фабрике, то типовая не подхватывается, а если хочешь подменить типовую, то она мешается. Если разработчик так решил, значит так надо, зачем мешать и "баг" делать фичей? ;)     | |||
| 13
    
        drei 15.04.18✎ 13:54 | 
        (12) В пространство имен, например, "http://www.w3.org/2001/XMLSchema" ничего не хочешь добавить? Ну слава Богу!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |