Разработка и Конфигурация · 10 мин
Сериализация в 1С: что это и как применяется
Что такое сериализация в 1С, зачем нужна, какие форматы используются (XML, JSON, XDTO) и как выполнить сериализацию объектов на встроенном языке.
Сериализация в 1С — это процесс преобразования объектов платформы (документов, справочников, таблиц значений, структур) в текстовое или двоичное представление, которое можно сохранить в файл, передать по сети или записать в строку. Обратная операция — десериализация — восстанавливает объект из этого представления обратно в память программы. Без сериализации невозможен обмен данными между базами 1С, интеграция с веб-сервисами, сайтами и внешними системами.
Термин пришёл из общей теории программирования, но в экосистеме 1С имеет свою специфику: платформа предоставляет собственные механизмы сериализации, встроенные в язык и в технологию XDTO. Разработчику редко приходится писать «ручной» разбор — большинство типов сериализуются штатными средствами.
На практике с сериализацией сталкиваются в трёх ситуациях: при обмене между конфигурациями (например, выгрузка из УТ в БП), при интеграции через HTTP-сервисы и REST API, а также при сохранении настроек и сложных структур данных в хранилище значений или файлы.
Где в 1С применяется сериализация
Основные сценарии, в которых без сериализации не обойтись:
- Обмен данными между информационными базами (РИБ, планы обмена, универсальный формат EnterpriseData).
- Интеграция с внешними системами через HTTP-сервисы, веб-сервисы (SOAP) и REST API.
- Сохранение произвольных структур данных в хранилище значений, файлы или строковые реквизиты.
- Передача данных между клиентом и сервером, между сеансами, через очереди сообщений.
- Выгрузка отчётов, печатных форм и настроек в файлы для переноса между базами.
Типичный пример: база Управление торговлей должна передать заказ на сайт интернет-магазина. Объект «Заказ клиента» нельзя «отправить» напрямую — его преобразуют в JSON-строку, передают по HTTP, а на стороне сайта строка разбирается обратно в структуру данных.
Основные форматы и механизмы сериализации в 1С
Платформа предлагает несколько штатных способов, каждый со своей областью применения.
| Механизм | Формат | Когда использовать |
|---|---|---|
| ЗаписьJSON / ЧтениеJSON | JSON | Интеграция с веб-сервисами, сайтами, мобильными приложениями |
| ЗаписьXML / ЧтениеXML | XML | Файловые выгрузки, обмен с системами, работающими на XML |
| XDTO (фабрика XDTO) | XML по схеме | Обмен с валидацией по схеме, планы обмена, веб-сервисы SOAP |
| ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр | Внутренний формат 1С | Перенос данных только между базами 1С |
| СериализаторXDTO | XML (типы 1С) | Сериализация объектов платформы: ссылок, документов, записей |
Выбор зависит от приёмника данных. Если обмен идёт только между базами 1С, удобны внутренние функции или СериализаторXDTO — они сохраняют типы платформы без потерь. Если приёмник — внешняя система, стандартом де-факто стал JSON: он компактнее XML и нативно поддерживается большинством языков.
Сравнение вариантов
Подходит для REST API и веб-интеграций. Ограничение: нет строгой типизации, даты и ссылки 1С приходится преобразовывать вручную.
Подходит для обменов со схемной валидацией и SOAP. Ограничение: более громоздкий формат и сложнее настройка пакетов.
Подходит для переноса между базами 1С без потери типов. Ограничение: результат нечитаем и бесполезен вне платформы 1С.
Как сериализовать объект в JSON
Наиболее востребованная задача — сформировать JSON из структуры или соответствия. Для этого используются объекты ЗаписьJSON и ЧтениеJSON встроенного языка.
Структура = Новый Структура;
Структура.Вставить("Номер", "000000001");
Структура.Вставить("Дата", Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd"));
Структура.Вставить("Сумма", 1500.50);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Структура);
СтрокаJSON = Запись.Закрыть();Обратная операция — чтение строки JSON в структуру:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение, Истина); // Истина — читать в соответствие
Чтение.Закрыть();Параметр «Истина» в ПрочитатьJSON означает чтение в соответствие, а не в структуру. Это удобно, когда имена ключей могут содержать символы, недопустимые для имён свойств структуры (например, дефисы или пробелы).
Сериализация объектов платформы через XDTO
Когда нужно сериализовать ссылку на справочник, документ или набор записей с сохранением типов 1С, применяется объект СериализаторXDTO. Он преобразует значения платформы в XML-элементы и обратно.
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СсылкаНаДокумент);
СтрокаXML = ЗаписьXML.Закрыть();
// Обратное восстановление
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Если СериализаторXDTO.ВозможностьЧтенияXML(ЧтениеXML) Тогда
ВосстановленнаяСсылка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
КонецЕсли;Такой подход используется в механизмах обмена данными: планы обмена, конвертация данных и универсальный формат построены именно на XDTO. Разработчику это даёт гарантию, что типы (ссылки, перечисления, даты) восстановятся корректно, если приёмник — тоже база 1С с совместимой конфигурацией.
Сохранение данных в хранилище значений
Отдельный частный случай — сохранение произвольных данных (таблицы значений, картинки, настройки) в реквизит типа ХранилищеЗначения. Платформа автоматически сериализует объект во внутренний формат при помещении в хранилище и десериализует при извлечении методом Получить().
Это удобно для настроек отчётов, вложений и служебных структур, но имеет ограничения: содержимое хранилища недоступно для запросов и поиска, а при больших объёмах данных раздувает таблицу и замедляет выборки. Для данных, по которым нужен поиск или отборы, хранилище значений не подходит.
Проверка результата сериализации
После формирования строки стоит убедиться, что она корректна и читается обратно. Минимальная проверка — выполнить десериализацию той же строкой и сравнить ключевые поля с исходным объектом.
Как проверить результат
ПрочитатьJSON/ПрочитатьXML выполняется без исключения, структура содержит все ключи
Исключение «Ошибка формата потока» или пустой результат
Числа — числами, даты распознаны приёмником, ссылки соответствуют исходным GUID
Числа пришли строками, даты сдвинуты, ссылки не находятся в базе-приёмнике
Строка разумного размера, передача укладывается в тайм-ауты
Мегабайты текста в одном запросе, обрывы по тайм-ауту
Для отладки удобно выводить сформированную строку в файл и проверять её валидатором JSON или XML — синтаксическая ошибка (лишняя запятая, незакрытый тег) обнаруживается сразу.
- 1Определите приёмника: база 1С или внешняя система — от этого зависит формат.
- 2Составьте структуру передаваемых данных и договоритесь о формате дат и идентификаторов.
- 3Реализуйте сериализацию (ЗаписатьJSON или СериализаторXDTO) и оберните в попытку/исключение.
- 4Реализуйте десериализацию на стороне приёмника с проверкой обязательных полей.
- 5Протестируйте на копии базы: сформируйте строку, прочитайте обратно, сверьте данные.
Частые вопросы о сериализации в 1С
Чем сериализация отличается от выгрузки в файл?
Выгрузка в файл — частный случай применения сериализации. Сериализация — сам процесс преобразования объекта в строковое или двоичное представление; результат можно записать в файл, отправить по HTTP или сохранить в реквизит. Выгрузка же подразумевает именно сохранение в файл.
Можно ли сериализовать любой объект 1С?
Нет. Примитивные типы, структуры, массивы, ссылки и объекты данных сериализуются штатно. А вот объекты, привязанные к контексту сеанса (например, элементы формы, построители запросов), сериализации не подлежат — попытка вызовет ошибку. Для передачи таких данных сначала извлекают их содержимое в сериализуемые структуры.
Что выбрать для REST-интеграции: JSON или XML?
Обычно JSON: он компактнее, проще разбирается на стороне веб-приложений и является стандартом для REST API. XML оправдан, если внешняя система уже работает с ним или требуется валидация по XSD-схеме.
Как передать ссылку на документ между разными базами?
Через GUID: метод УникальныйИдентификатор() у ссылки даёт строку, которую передают в JSON или XML. На стороне приёмника ссылку восстанавливают через ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Это работает, только если обе базы содержат одинаковые типы объектов.
Безопасно ли хранить сериализованные данные в открытом виде?
Нет, если в данных есть конфиденциальная информация. JSON и XML — обычный текст. Для чувствительных данных применяйте шифрование канала (HTTPS) и, при необходимости, шифрование самого содержимого перед сериализацией.
Почему после десериализации даты отличаются на несколько часов?
Причина — часовые пояса и формат представления даты. Если дата передана в формате с указанием смещения (например, ISO 8601 с зоной), а приёмник интерпретирует её как локальную, возникает сдвиг. Договоритесь о едином формате и явно указывайте, в каком часовом поясе передаётся значение.
Что важно запомнить
Сериализация в 1С — преобразование объектов в строку (JSON, XML, XDTO) для передачи или хранения, десериализация — обратное восстановление. Для внешних систем используйте JSON, для обмена между базами 1С — СериализаторXDTO или внутренние функции. Всегда согласовывайте формат дат и идентификаторов, обрабатывайте ошибки разбора и проверяйте результат обратным чтением.