Что такое сериализация в 1с
Перейти к содержимому

Что такое сериализация в 1с

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что значит «сериализуемый объект»?

Сериализация — переовод некоторой структуры данных в некоторую последовательность данных. Читая синтаксис-помощник вы могли видеть вот такую информацию для некоторых типов данных:

Изображение

Рассмотрим что это означает на практике и как это свойство можно использовать при разработке на платформе 1С:Предприятие 8.

Практическое использование

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

Это код обработчика кнопки формы обработки. Схема метаданных самой обработки следующая:

Изображение

Реквизит «СсылкаНаОбъект» имеет тип «ЛюбаяСсылка».

Результат

Запустим обработку и выберем ссылку на произвольный документ:

Изображение

Выполнив команду «Выгрузить в XML» и выбрав путь сохранения XML-файла мы получим сформированный XML-файл следующего вида:

Изображение

По ссылке Вы можете скачать пример сформированного файла. Содержимое документа было следующим:

Изображение

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

Cериализация и десериализация объектов 1C в XML

Часто появляется необходимость передавать объекты 1С между различными базами в файловом формате

Дмитрий Марочко

1C tricks

Чтобы не изобретать форматов обмена, лучшее решение — это сериализировать объекты “как есть”. Один из способов сохранения объекта в файл выглядит следующим образом.

ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Объект);

ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ПутьКФайлу); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);

ЗаписьXML.Закрыть();

Восстановление объекта происходит ненамного сложнее.

ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПутьКФайлу);

ТипОбъектаXDTO = ФабрикаXDTO.Тип(ТипОбъекта,ИмяОбъекта);

ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO); ОбъектXDTO.Проверить();

ЧтениеXML.Закрыть();

Объект = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);

Обратите внимание, что строковое представление типа и имени объекта всегда указаны в справке для тех объектов, которые можно сериализировать.

Сериализация данных в 1С

В данной статье я хочу рассказать о сериализации данных в 1С.

Немного о самом определении: Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.

Когда нам нужно сохранить значения, для дальнейшего его хранения или передачи, в этом случае нам без нее не обойтись, но стоит учитывать, что сериализация данных применима для тех объектов 1С, в описании которых есть пометка «Сериализуется».

Уточним, что серилиазация может применятся не только в рамках одной информационной базы, но и о XML – сериализация. Последняя является отдельной возможностью, и применяется между различными информационными базами данных.

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

Пример кода

Пример кода

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

Пример кода

Пример кода

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

Пример кода

Пример кода

А теперь немного о XML–сериализации.

Рассмотрим сериализацию на примере объектов xml, потому что они используются чаще всего.

Есть глобальный метод ЗаписатьXML() предназначенный для этого.

Стоит отметить, что значения не всех типов могут быть записаны в формате XML данным методом.Доступные для записи типы данных делятся на на два типа: простые и сложные.

К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:

К первому относятся:

  • Число;
  • Строка;
  • Дата;
  • Булево;
  • ДвоичныеДанные;
  • Null;
  • УникальныйИдентификатор;
  • ХранилищеЗначения;
  • все ссылки на объекты базы данных;
  • ссылки на перечисления, определяемые в метаданных.

Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы:

  • Тип;
  • ОписаниеТипов;
  • КонстантаМенеджерЗначения.<имя константы>;
  • все объекты базы данных;
  • наборы записей регистров, последовательностей, перерасчетов;
  • УдалениеОбъекта;

Пример кода

Для всех остальных типов, для которых невозможно использовать метод ЗаписатьXML() — будем преобразовывать сначала значения в XDTO, а затем уже используем выше описанный метод.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *