XDTO-сериализация в 1С

 

В прошлой статье я рассказывал о том, что такое XDTO в 1С, для чего этот механизм нужен и как его использовать.

Сегодня я попробую рассказать о еще одном применении механизма XDTO, а именно об XDTO-сериализации.

Для начала рассмотрим простой случай: предположим у нас есть две конфигурации, и эти две конфигурации имеют одинаковые по структуре объекты, например, справочники (одинаковыми должны быть названия объектов, а также названия, количество и типы реквизитов).

Пример справочника
Пример справочника

В этом случае передать данные из одной конфигурации в другую достаточно просто.

Сериализация:

Десериализация:

После сериализации  у нас получается вот такой файл:

XDTO-сериализация объекта
XDTO-сериализация объекта

А после десериализации у нас будет ссылка на тот же самый объект в другой конфигурации.

 

Нужно заметить, что XDTO-сериализации подвергаются не только объекты конфигурации (документы, справочники), но и многие объекты встроенного языка (структуры например):

XDTO-сериализация объектов встроенного языка
XDTO-сериализация объектов встроенного языка

Если же у нам не нужно сериализировать все реквизиты или в принимающей конфигурации нет копии объекта отдающей конфигурации, то тут работает несколько более сложная схема.

На самом деле, я не знаю, как выполнить эту задачу при помощи объекта «СериализаторXDTO», я пользуюсь только фабрикой, но продолжаю считать этот процесс XDTO-сериализацией. Если Вы знаете более правильный способ, то я с удовольствием его изучу. А сейчас продолжим.

Во-первых нам потребуется XDTO-пакет (или соответствующий XSD-файл) описывающий данные которые мы хотим сериализировать. Для своего справочника я сделал вот такой XDTO-пакет:

XDTO-пакет для сериализации
XDTO-пакет для сериализации

Как видно, я хочу чтобы в сериализации участвовали только «Код», «Наименование» и «Реквизит1».

Сама XDTO-сериализация выглядит так:

В коде выше на основании XDTO-пакета создается фабрика, затем тип объекта XDTO, а после этого и сам объект XDTO нужного типа. После заполнения всех нужных свойств, объект записывается в XML-файл:

Выборочная XDTO-сериализация объекта
Выборочная XDTO-сериализация объекта

По очень похожему алгоритму происходит и десериализация объекта:

На выходе мы получаем объект XDTO со свойствами заполненными из файла, дальше мы можем делать с этим объектом все, что нам нужно.

На этом все, буду рад услышать любые дополнения и замечания.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 4, средняя оценка: 5,00 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 5
  1. Елена

    Здравствуйте! Ваш блог нашла поиском по ошибке, кот возникает в конфигурации Витязь (достроенная БГУ) при загрузке комплекта отчетности.
    Если Вы так просто рассказываете о непонятной сериализации, то:
    Помогите разобраться что происходит и как выпутаться из этой ситуации!

    Вот проблема:
    [2016-07-28 12:49:51 (•)]: Начало загрузки существующего объекта.
    — Объект: «ф.0503178\стр. 02\гр. 3»
    — Метаданные: «Справочник.ОперандыПоказателей»
    [EESE0000] [SDXC0200] Объект XDTO ‘/assertionGroup[4]/assertionGroup[1]/assertionDef[63]/operand[2]’ не может быть прочитан.
    Модуль: , Номер строки:
    причина:

    [EESE0000] Поле объекта не обнаружено (СпособыВычисленияПараметровОперандов)
    Модуль: Обработка.СериализацияУниверсальнаяОтчетностьМета.МодульОбъекта, Номер строки: 1 514
    Модуль: Обработка.ДиспетчерСериализации.МодульОбъекта, Номер строки: 1 042

    1. Тимур

      Добрый день, не уверен, но возможно, что это связанно с тем, что в конфигурации (куда загружаются данные) у справочника «ОперандыПоказателей» нет реквизита «СпособыВычисленияПараметровОперандов».
      Я бы добавил этот реквизит справочнику (перенес из выгружаемой конфигурации)

    2. Ed

      Елена, помог ли совет Тимура?

    3. Алексей

      Несмотря на одинаковое название реквизитов в разных базах,
      Очень важна одинаковая последовательность.
      При разной последовательности будет/может выдавать подобные ошибки.

      1. Татьяна

        Спасибо!!! Только это помогло. Порядок реквизитов. И ещё если во второй базе больше реквизитов, то их тоже нужно добавить

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: