Xml сериализация 1с что это
Сериализация – механизм сохранения значения объекта базы данных в некотором виде, который позволяет выполнить последующее восстановление (десериализацию) в объект базы данных.
Выделяют следующие типы сериализации:
1. Сериализация объекта
Данный тип позволяет сохранять и восстанавливать объекты в пределах одной информационной базы. Так как формат сериализации объектов использует внутренние идентификаторы типов данных и внутренние идентификаторы метаданных, его нельзя использовать для обмена между различными информационными системами. Нужно учитывать, что не все типы данных могут быть сериализованны. Понять может ли объект быть сериализованн можно из указания «Сериализуется» в синтакс-помощнике.
Существуют ряд штатных механизмов платформы 1С, которые используют сериализацию:
Сохранение значения в файл и восстановление из файла
Данный механизм может применяться для передачи каких-либо значений внутри сеанса либо между сеансами посредством использования методов ЗначениеВФайл() и ЗначениеИзФайла().
Сохранение значения в объекте Хранилище значений
Значения, записанные в реквизит с типом данным Хранилище значений, хранятся в сериализованном виде. Чаще всего это применяется для хранения картинок или других двоичных данных. Но иногда это может использоваться для хранения таблиц значений или массивов. Например, хранение табличных частей. Основным требованием к хранению коллекций в хранилище значений является возможность сериализации данных каждого поля коллекции.
В целях оптимизации поля с типом данных Хранилище значений «выносят» в отдельный объект, не связанный с объектом-владельцем данных. Например, в типовых конфигурациях файлы и картинки хранятся в отдельном справочнике с окончанием наименования «ПрисоединенныеФайлы».
Сохранение параметров между сеансами
Эта возможность используется для сохранения настроек форм, отчетов, обработок. Могут также использоваться методы СохранитьЗначение() и ВосстановитьЗначение(). Надо учитывать, что при сохранении резервной копии информационной базы значения настроек не сохраняются.
Сохранение значения в строку и восстановление из строки
Для этих целей применяются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Данные методы используются в основном в версии платформы 1С 7.7. С помощью этих методов можно, например, сохранять в строке ссылочные объекты для последующего восстановления в текущей информационной базе.
2. Сериализация XML
Данный тип осуществляет, преобразование объектов 1С в строку, содержащую данные в формате xml. В отличии от предыдущего типа сериализации, сериализация XML может быть использована для обмена данными между различными ИБ. Суть данного механизма состоит в представлении объекта в виде последовательности данных формата XML. Базовыми средствами такой сериализации являются ЧтениеXML и ЗаписьXML.
Сериализация XML – ЗаписьXML
Процедура Сериализации XML
Сериализация XML - ЧтениеXML
3. Сериализация данных XDTO
Сериализация XDTO, как и сериализация xml, используется для организации обмена между информационными системами. В свою очередь, сериализация данных XDTO является более универсальным способом представления данных. XDTO (XML Data Transfer Objects) – механизм объектного моделирования данных, описываемых с помощью схемы XML. Механизм XDTO решает следующие задачи: обмен между информационными системами 1С различной структуры метаданных, обмен с информационными системами не являющимися системами 1С, разработка собственных типов данных, описание типов данных и возвращаемых параметров web-сервисов.
Основой механизма XDTO является использование фабрики XDTO, в которой храниться описание всех типов данных с которыми оперирует система, а точнее говоря, всех типов в рамках определенного пространства имен. Наряду с предопределенными пространствами, предустановленными в платформе 1С, можно создавать свои пользовательские. Для этого существует объект Фабрика.
Использование фабрики XDTO
Пример использования фабрики XDTO
Пример сериализации JSON
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
XML-сериализация — это процесс преобразования данных 1С:Предприятия 8 в последовательность данных формата XML и наоборот, преобразование последовательности данных формата XML в данные 1С:Предприятия 8, если существует подходящий тип данных.
Средства XML-сериализации активно используются при реализации различных схем обмена данными.
Сериализуемые типы данных 1С:Предприятия 8
С точки зрения представления в XML типы данных 1С:Предприятия 8 делятся на простые и сложные.
К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:
- Число;
- Строка;
- Дата;
- Булево;
- ДвоичныеДанные;
- Null;
- УникальныйИдентификатор;
- ХранилищеЗначения;
- все ссылки на объекты базы данных;
- ссылки на перечисления, определяемые в метаданных.
- Тип;
- ОписаниеТипов;
- КонстантаМенеджерЗначения.;
- все объекты базы данных;
- наборы записей регистров, последовательностей, перерасчетов;
- УдалениеОбъекта;
Объекты базы данных представляются в XML как совокупность значений реквизитов и табличных частей. Состав элементов XML, вложенных в корневой элемент, определяется типом объекта базы данных, а также составом реквизитов и табличных частей. Каждый из реквизитов объекта представляется отдельным вложенным элементом XML; каждая из табличных частей также представляется отдельным вложенным элементом XML. Каждая из строк табличной части представляется элементом XML, вложенным в элемент, представляющий табличную часть. Реквизиты табличной части представляются элементами XML, вложенными в элемент, представляющий строку табличной части.
Представление в XML набора записей включает отбор, по которому получен набор записей и сами записи, входящие в отбор. Значения отбора представляются вложенным элементом XML с именем Filter, а все записи составляющие набор записей — вложенным элементом XML с именем Records. Отдельные записи представляются элементами XML с именем Record, вложенными в элемент Records.
А сейчас немного о самом определении: Сериализация указывает возможность поддержки чтении/записи значений данных.
Когда нам нужно сохранить значения, для дальнейшего его хранения или передачи, в этом случае нам без нее не обойтись, но стоит учитывать, что сериализация данных применима для всех объектов 1С, в описании которых есть пометка "Сериализуется".
Хочется уточнить, что речь идет не только сериализации, применимой в рамках одной базы данных, но и о XML – сериализация. Последняя является отдельной возможностью, и применяется между различными базами данных.
Согласитесь, это неотъемлемая часть 1С, так как очень часто данные в базе нужно сохранять, а тем более если речь идет о передаче данных из одной базы в другую или например, во внешний источник.
Сейчас рассмотрим сериализацию в рамках одной информационной базы.
Для сохранения значений во время сеанса используют методы ЗначениеВФайл() и ЗначениеИзФайла(). Если же нам требуется сохранить данные между сеансами, что удобно для пользователя, чтобы не вводить данные каждый раз на форме, то мы будем использовать методы СохранитьЗначение() и ВосстановитьЗначение(), но стоит обратить внимание что данные методы работают только при корректном завершении работы в программе, если вдруг пк будет обесточен, то значения не сохранятся. Также не стоит забывать о сохранении значений в объекте типа ХранилищеЗначений. Подобный тип используется для картинок, образов файлов, так как для них в конфигурации нет соответствующих типов полей.
Если необходимо сохранить значения в строку и восстановить значения из строки, то для этого используются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Эти методы реализованы в основном для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать их в большинстве случаев не рекомендуется. Для сохранения значений в базу данных рекомендуется использовать, описанный выше, объект типа ХранилищеЗначения, а для получения некоторого строкового идентификатора ссылочного значения можно использовать возможность получения уникального идентификатора ссылки (метод УникальныйИдентификатор()) и соответственно преобразование его к строке.
А теперь немного о XML – сериализации.
Рассмотрим сериализацию на примере объектов xml, потому что они используются чаще всего.
Есть глобальный метод ЗаписатьXML() предназначенный для этого.
Стоит отметить, что значения не всех типов могут быть записаны в формате XML данным методом. Доступные для записи типы данных делятся на на два типа: простые и сложные.
К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым:
К первому относятся:
- Число;
- Строка;
- Дата;
- Булево;
- ДвоичныеДанные;
- Null;
- УникальныйИдентификатор;
- ХранилищеЗначения;
- все ссылки на объекты базы данных;
- ссылки на перечисления, определяемые в метаданных.
Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы:
- Тип;
- ОписаниеТипов;
- КонстантаМенеджерЗначения.;
- все объекты базы данных;
- наборы записей регистров, последовательностей, перерасчетов;
- УдалениеОбъекта;
Пример кода
Для всех остальных типов, для которых невозможно использовать метод ЗаписатьXML() - будем преобразовывать сначала значения в XDTO, а затем уже используем выше описанный метод.
В настоящее время со стороны 1С существуют 3 метода сериализации значений:
- Старый способ со времен 7.7.
- Метод XML - довольно распространенный.
- Метод JSON - начиная с 8.3.6.
Однако, при знакомстве с мобильной платформой выяснились следующие проблемы: старые добрые функции для серилизации не работают - это ЗначениеИзВнутСтроки() и ЗначениеВоВнутСтроку(). Точнее их вообще нет здесь.
Так как при создании моей Консоли Запросов я использовал не только платформу 8.3, но и 8.2 - то единственным доступным вариантом в моем случае остался 2-й метод.
Универсальная Сериализация через XML
Стандартно для этих целей существуют следующие функции из БСП:
Эти функции, взятые из БСП, - хорошие. Однако передать через них серьезные объекты (в моем случае это был тип данных РезультатЗапроса) без выгрузки или других танцев с бубном в рамках портирования консоли на мобильные платформы оказалось абсолютно невозможным, так как данные типы тип не сериализуются XDTO.
Однако для этого можно применить следующее правило, которое может работать в пределах одной базы:
- Если тип сериализуется - ничего не делаем. Сразу преобразуем.
- Если нельзя сериализовать- упаковываем в хранилище значений. Следует отметить, что хранилище значений упаковывается также, чтобы с ним не было проблем.
Итоговые правки в код дают следующие функции:
Если есть необходимость ввести универсальную функцию, которая совместима на компьютерных платформах со старым внутренним форматом 1С (мне понадобилось для работы с Консолью Запросов на Windows), тогда полученные универсальные функции:
PS: приведенными функциями в пределах одной базы можно пользоваться на следующих платформах:
- Компьютерные: 1С 8.2 и 1С 8.3 - Тонкий, Толстый, ВебКлиент.
- На мобильных платформах 8.3 можно использовать универсальные переделанные функции БСП для аналога внутренних значений.
Тестировалось на платформах 8.2 и 8.3. Режим совместимости с 8.1 не пострадал.
Сериализация – механизм сохранения значения объекта базы данных в некотором виде, который позволяет выполнить последующее восстановление (десериализацию) в объект базы данных.
Выделяют следующие типы сериализации:
1. Сериализация объекта
Данный тип позволяет сохранять и восстанавливать объекты в пределах одной информационной базы. Так как формат сериализации объектов использует внутренние идентификаторы типов данных и внутренние идентификаторы метаданных, его нельзя использовать для обмена между различными информационными системами. Нужно учитывать, что не все типы данных могут быть сериализованны. Понять может ли объект быть сериализованн можно из указания «Сериализуется» в синтакс-помощнике.
Существуют ряд штатных механизмов платформы 1С, которые используют сериализацию:
Сохранение значения в файл и восстановление из файла
Данный механизм может применяться для передачи каких-либо значений внутри сеанса либо между сеансами посредством использования методов ЗначениеВФайл() и ЗначениеИзФайла().
Сохранение значения в объекте Хранилище значений
Значения, записанные в реквизит с типом данным Хранилище значений, хранятся в сериализованном виде. Чаще всего это применяется для хранения картинок или других двоичных данных. Но иногда это может использоваться для хранения таблиц значений или массивов. Например, хранение табличных частей. Основным требованием к хранению коллекций в хранилище значений является возможность сериализации данных каждого поля коллекции.
В целях оптимизации поля с типом данных Хранилище значений «выносят» в отдельный объект, не связанный с объектом-владельцем данных. Например, в типовых конфигурациях файлы и картинки хранятся в отдельном справочнике с окончанием наименования «ПрисоединенныеФайлы».
Сохранение параметров между сеансами
Эта возможность используется для сохранения настроек форм, отчетов, обработок. Могут также использоваться методы СохранитьЗначение() и ВосстановитьЗначение(). Надо учитывать, что при сохранении резервной копии информационной базы значения настроек не сохраняются.
Сохранение значения в строку и восстановление из строки
Для этих целей применяются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Данные методы используются в основном в версии платформы 1С 7.7. С помощью этих методов можно, например, сохранять в строке ссылочные объекты для последующего восстановления в текущей информационной базе.
2. Сериализация XML
Данный тип осуществляет, преобразование объектов 1С в строку, содержащую данные в формате xml. В отличии от предыдущего типа сериализации, сериализация XML может быть использована для обмена данными между различными ИБ. Суть данного механизма состоит в представлении объекта в виде последовательности данных формата XML. Базовыми средствами такой сериализации являются ЧтениеXML и ЗаписьXML.
Сериализация XML – ЗаписьXML
Процедура Сериализации XML
Сериализация XML - ЧтениеXML
3. Сериализация данных XDTO
Сериализация XDTO, как и сериализация xml, используется для организации обмена между информационными системами. В свою очередь, сериализация данных XDTO является более универсальным способом представления данных. XDTO (XML Data Transfer Objects) – механизм объектного моделирования данных, описываемых с помощью схемы XML. Механизм XDTO решает следующие задачи: обмен между информационными системами 1С различной структуры метаданных, обмен с информационными системами не являющимися системами 1С, разработка собственных типов данных, описание типов данных и возвращаемых параметров web-сервисов.
Основой механизма XDTO является использование фабрики XDTO, в которой храниться описание всех типов данных с которыми оперирует система, а точнее говоря, всех типов в рамках определенного пространства имен. Наряду с предопределенными пространствами, предустановленными в платформе 1С, можно создавать свои пользовательские. Для этого существует объект Фабрика.
Использование фабрики XDTO
Пример использования фабрики XDTO
Пример сериализации JSON
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Читайте также: