Xml сериализация 1с что это

Обновлено: 06.07.2024

Особенности использования сериализации

В 1С:Предприятии для многих типов значений предусмотрена возможность сериализации, то есть сохранения их в том виде, который позволяет записывать значения и потом восстанавливать их. В документации по встроенному языку в описании объектов возможность сериализации указывается отметкой "Сериализуется".

Сериализация предназначена для сохранения значений используемых в рамках информационной базы 1С:Предприятия, в тех случаях, когда их по той или иной причине необходимо хранить или передавать в сериализованном виде.

Следует отметить, что в этом разделе речь идет о сериализации, а не о ХМ L – сериализации. XML – сериализация является отдельной возможностью, предназначенной прежде всего для обмена данными между различными информационными базами 1С:Предприятия, а также для обмена с другими программными системами. Возможность ХМ L – сериализации объектов указывается в документации отдельно.

Существует несколько механизмов 1С:Предприятия, которые используют возможность сериализации значений.

Сохранение значения в файл и восстановление значений из файла

Для этого используются методы ЗначениеВФайл() и ЗначениеИзФайла() . В основном эта возможность может быть использована для сохранения, каких либо временных значений в пределах сеанса или между сеансами.

Сохранение значений в объекте типа ХранилищеЗначения

Эта возможность используется, прежде всего, для записи в информационную базу различных значений, для которых не предусмотрено соответствующих типов полей. Например, таким способом сохраняются картинки, образы файлов. При помещении значения в хранилище значения может использоваться сжатие. Подробнее с этой возможностью рекомендуется ознакомиться в разделе "Хранение данных в полях типа ХранилищеЗначения".

Сохранение параметров пользователя между сеансами

Эта возможность используется системой при сохранении настроек в формах отчетов и обработок. Так же для этого могут быть использованы методы СохранитьЗначение() и ВосстановитьЗначение() . Их рекомендуется использовать для сохранения различных настроек специфичных для конкретного пользователя. Однако таким способом не рекомендуется сохранять существенные данные, потеря которых нежелательна. Эта информация не сохраняется при создании резервных копий информационной базы. Кроме того, эта информация сохраняется только при завершении сеанса работы пользователя и соответственно не будет сохранена при аварийном завершении.

Сохранение значения в строку и восстановление значения из строки

Для этого используются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр() . Эти методы реализованы в основном для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать их в большинстве случаев не рекомендуется. Для сохранения значений в базу данных рекомендуется использовать объект типа ХранилищеЗначения , а для получения некоторого строкового идентификатора ссылочного значения можно использовать возможность получения уникального идентификатора ссылки (метод УникальныйИдентификатор() ) и соответственно преобразование его к строке.

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

Следует учитывать, что формат сериализации является внутренним специфическим форматом 1С:Предприятия и не предназначен для разбора другими средствами.

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

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

Таким образом, сериализацию следует использовать для хранения и передачи значений в рамках информационной базы 1С:Предприятия и не следует использовать для обмена с другими информационными базами и другими программными системами.

В настоящее время со стороны 1С существуют 3 метода сериализации значений:

  1. Старый способ со времен 7.7.
  2. Метод XML - довольно распространенный.
  3. Метод JSON - начиная с 8.3.6.

Однако, при знакомстве с мобильной платформой выяснились следующие проблемы: старые добрые функции для серилизации не работают - это ЗначениеИзВнутСтроки() и ЗначениеВоВнутСтроку(). Точнее их вообще нет здесь.

Так как при создании моей Консоли Запросов я использовал не только платформу 8.3, но и 8.2 - то единственным доступным вариантом в моем случае остался 2-й метод.

Универсальная Сериализация через XML

Стандартно для этих целей существуют следующие функции из БСП:

Эти функции, взятые из БСП, - хорошие. Однако передать через них серьезные объекты (в моем случае это был тип данных РезультатЗапроса) без выгрузки или других танцев с бубном в рамках портирования консоли на мобильные платформы оказалось абсолютно невозможным, так как данные типы тип не сериализуются XDTO.

Однако для этого можно применить следующее правило, которое может работать в пределах одной базы:

  1. Если тип сериализуется - ничего не делаем. Сразу преобразуем.
  2. Если нельзя сериализовать- упаковываем в хранилище значений. Следует отметить, что хранилище значений упаковывается также, чтобы с ним не было проблем.

Итоговые правки в код дают следующие функции:

Если есть необходимость ввести универсальную функцию, которая совместима на компьютерных платформах со старым внутренним форматом 1С (мне понадобилось для работы с Консолью Запросов на Windows), тогда полученные универсальные функции:

PS: приведенными функциями в пределах одной базы можно пользоваться на следующих платформах:

  1. Компьютерные: 1С 8.2 и 1С 8.3 - Тонкий, Толстый, ВебКлиент.
  2. На мобильных платформах 8.3 можно использовать универсальные переделанные функции БСП для аналога внутренних значений.

Тестировалось на платформах 8.2 и 8.3. Режим совместимости с 8.1 не пострадал.

XML-сериализация — это процесс преобразования данных 1С:Предприятия 8 в последовательность данных формата XML и наоборот, преобразование последовательности данных формата XML в данные 1С:Предприятия 8, если существует подходящий тип данных.

Средства XML-сериализации активно используются при реализации различных схем обмена данными.

XML-сериализация

Сериализуемые типы данных 1С:Предприятия 8

С точки зрения представления в XML типы данных 1С:Предприятия 8 делятся на простые и сложные.

К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:
  • Число;
  • Строка;
  • Дата;
  • Булево;
  • ДвоичныеДанные;
  • Null;
  • УникальныйИдентификатор;
  • ХранилищеЗначения;
  • все ссылки на объекты базы данных;
  • ссылки на перечисления, определяемые в метаданных.
Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы:
  • Тип;
  • ОписаниеТипов;
  • КонстантаМенеджерЗначения.<имя константы>;
  • все объекты базы данных;
  • наборы записей регистров, последовательностей, перерасчетов;
  • УдалениеОбъекта;

Объекты базы данных представляются в XML как совокупность значений реквизитов и табличных частей. Состав элементов XML, вложенных в корневой элемент, определяется типом объекта базы данных, а также составом реквизитов и табличных частей. Каждый из реквизитов объекта представляется отдельным вложенным элементом XML; каждая из табличных частей также представляется отдельным вложенным элементом XML. Каждая из строк табличной части представляется элементом XML, вложенным в элемент, представляющий табличную часть. Реквизиты табличной части представляются элементами XML, вложенными в элемент, представляющий строку табличной части.

Представление в XML набора записей включает отбор, по которому получен набор записей и сами записи, входящие в отбор. Значения отбора представляются вложенным элементом XML с именем Filter, а все записи составляющие набор записей — вложенным элементом XML с именем Records. Отдельные записи представляются элементами XML с именем Record, вложенными в элемент Records.

Механизм XDTO

Аббревиатура XDTO расшифровывается как XML Data Transfer Objects. XDTO является механизмом объектного моделирования данных, описываемых с помощью схемы XML.

Основные возможности использования XDTO

  • описание типов параметров и возвращаемых значений Web-сервисов;
  • обмен данными между конфигурациями 1С:Предприятия 8 с существенно разными структурами данных;
  • обмен данными на основе схем XML, не привязанных к той или иной конфигурации (например, обмен с информационными системами, построенными не на основе 1С:Предприятия 8);
  • создание собственной системы типов и значений для обработки произвольных данных.

XDTO пакет

Механизм XDTO реализован с помощью набора объектов встроенного языка и объекта конфигурации XDTO пакет.


Возможно выполнение следующих действий:

  • создание XDTO пакета с помощью импорта схемы XML;
  • добавление нового XDTO пакета в дерево конфигурации и последующее его редактирование;
  • экспорт существующего XDTO пакета в схему XML.

Также система 1С:Предприятие 8 поддерживает возможность экспорта набора XML схем данных конфигурации.

Редактирование XDTO пакета осуществляется в специальном окне, отображающем иерархическую структуру XDTO пакета:


XDTO- сериализация

В системе 1С:Предприятие 8 реализована сериализация данных на основе механизма XDTO, которая позволяет сериализовать в/из XML:

  • все типы данных хранящиеся в базе данных
  • некоторые другие типы

XDTO-сериализация предназначена для сохранения данных объекта в файл XML и создания объекта на основе данных, хранящихся в файле XML:

Читайте также: