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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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