А сейчас немного о самом определении: Сериализация указывает возможность поддержки чтении/записи значений данных.
Когда нам нужно сохранить значения, для дальнейшего его хранения или передачи, в этом случае нам без нее не обойтись, но стоит учитывать, что сериализация данных применима для всех объектов 1С, в описании которых есть пометка "Сериализуется".
Хочется уточнить, что речь идет не только сериализации, применимой в рамках одной базы данных, но и о XML – сериализация. Последняя является отдельной возможностью, и применяется между различными базами данных.
Согласитесь, это неотъемлемая часть 1С, так как очень часто данные в базе нужно сохранять, а тем более если речь идет о передаче данных из одной базы в другую или например, во внешний источник.
Сейчас рассмотрим сериализацию в рамках одной информационной базы.
Для сохранения значений во время сеанса используют методы ЗначениеВФайл() и ЗначениеИзФайла(). Если же нам требуется сохранить данные между сеансами, что удобно для пользователя, чтобы не вводить данные каждый раз на форме, то мы будем использовать методы СохранитьЗначение() и ВосстановитьЗначение(), но стоит обратить внимание что данные методы работают только при корректном завершении работы в программе, если вдруг пк будет обесточен, то значения не сохранятся. Также не стоит забывать о сохранении значений в объекте типа ХранилищеЗначений. Подобный тип используется для картинок, образов файлов, так как для них в конфигурации нет соответствующих типов полей.
Если необходимо сохранить значения в строку и восстановить значения из строки, то для этого используются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Эти методы реализованы в основном для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать их в большинстве случаев не рекомендуется. Для сохранения значений в базу данных рекомендуется использовать, описанный выше, объект типа ХранилищеЗначения, а для получения некоторого строкового идентификатора ссылочного значения можно использовать возможность получения уникального идентификатора ссылки (метод УникальныйИдентификатор()) и соответственно преобразование его к строке.
А теперь немного о XML – сериализации.
Рассмотрим сериализацию на примере объектов xml, потому что они используются чаще всего.
Есть глобальный метод ЗаписатьXML() предназначенный для этого.
Стоит отметить, что значения не всех типов могут быть записаны в формате XML данным методом. Доступные для записи типы данных делятся на на два типа: простые и сложные.
К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:
К первому относятся:
- Число;
- Строка;
- Дата;
- Булево;
- ДвоичныеДанные;
- Null;
- УникальныйИдентификатор;
- ХранилищеЗначения;
- все ссылки на объекты базы данных;
- ссылки на перечисления, определяемые в метаданных.
Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы:
- Тип;
- ОписаниеТипов;
- КонстантаМенеджерЗначения.<имя константы>;
- все объекты базы данных;
- наборы записей регистров, последовательностей, перерасчетов;
- УдалениеОбъекта;
Пример кода
Функция ПолучитьПримерXML(Значение)
ЗаписьПримерXML = Новый ЗаписьXML;
ЗаписьПримерXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьПримерXML, Значение);
Возврат ЗаписьПримерXML.Закрыть();
КонецФункции
Для всех остальных типов, для которых невозможно использовать метод ЗаписатьXML() - будем преобразовывать сначала значения в XDTO, а затем уже используем выше описанный метод.
Рассмотрим на примере подробнее:
У нас есть таблица значений, которую мы хотим записать в XML:
Пример кода
Функция ПолучитьПримерXML(Значение)
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Значение);
ЗаписьПримерXML = Новый ЗаписьXML;
ЗаписьПримерXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьПримерXML, ОбъектXDTO);
Возврат ЗаписьПримерXML.Закрыть();
КонецФункции
Надеюсь, моя статья была для Вас полезна. Спасибо, что прочли.