Перейти к основному содержимому

Сериализатор JSON

Библиотека для сериализации и десериализации данных 1С (объектов метаданных, ссылок, таблиц значений, наборов записей регистров, настроек и схем СКД, данных формы) в универсальные структуры и JSON.

к сведению

Перед использованием необходимо создать экземпляр обработки:

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

Основные методы

МетодОписаниеВозврат
ЗначениеВСтруктуру(Значение)Преобразует произвольное значение 1С (строка, число, дата, массив, структура, ТЗ, дерево, ссылка, объект, набор записей и др.) в универсальную структуруСтруктура / Массив / атомарный тип
ЗначениеИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки = Ложь)Восстанавливает значение 1С из универсальной структурыПроизвольный
ЗаписатьОписаниеОбъектаВJSON(ОписаниеОбъекта)Сериализует структуру (описание объекта) в строку JSON с сохранением информации о типахСтрока
ПрочитатьОписаниеОбъектаИзJSON(ТекстОписанияОбъекта, СвойстваСоЗначениемДата = Неопр)Десериализует JSON обратно в структуру (описание объекта)Структура

Сериализация объектов метаданных

МетодОписаниеВозврат
ОбъектВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)Преобразует объект (справочник, документ, ПВХ, ПС, ПВР, план обмена, БП, задача) в структуру с реквизитами и ТЧСтруктура
СоздатьОбъектИзСтруктуры(СтруктураОбъекта, ...)Создаёт новый объект из структуры и заполняет егоОбъект
ЗаполнитьОбъектИзСтруктуры(Объект, СтруктураОбъекта, ...)Заполняет существующий объект данными из структуры
НайтиЗаполнитьОбъектИзСтруктуры(СтруктураОбъекта, ...)Находит объект по ссылке, заполняет его; при необходимости создаёт новыйОбъект
СсылкаВСтруктуру(Значение)Преобразует ссылку в структуру (тип, ИД, признак предопределённости, представление)Структура
СсылкаИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки)Восстанавливает ссылку из структурыЛюбаяСсылка
УдалениеОбъектаВСтруктуру(Значение)Преобразует УдалениеОбъекта в структуруСтруктура
УдалениеОбъектаИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки)Восстанавливает УдалениеОбъекта из структурыУдалениеОбъекта

Сериализация наборов записей и движений

МетодОписаниеВозврат
НаборЗаписейРегистраВСтруктуру(НаборЗаписей, ...)Преобразует набор записей регистра (сведений, накопления, бухгалтерии, расчёта) в структуруСтруктура
ЗаполнитьНаборЗаписейРегистраИзСтруктуры(...)Заполняет набор записей из структуры
СоздатьНаборЗаписейРегистраИзСтруктуры(...)Создаёт и заполняет набор записей из структурыНаборЗаписей
РегистрПоОтборуВСтруктуру(Регистр, Отбор)Читает записи регистра по отбору и преобразует в структуруСтруктура
ДвиженияДокументаВСтруктуру(Объект, СписокРегистров, ИсключаяРегистры)Преобразует движения документа по всем или указанным регистрамСтруктура
ДвиженияДокументаИзСтруктуры(Объект, СтруктураДвижений, ...)Заполняет движения документа из структуры

Сериализация СКД

МетодОписаниеВозврат
НастройкиСКДВСтруктуру(Объект)Преобразует НастройкиКомпоновкиДанных в структуруСтруктура
НастройкиСКДИзСтруктуры(Объект, СтруктураОбъекта)Заполняет НастройкиКомпоновкиДанных из структуры
СКДВСтруктуру(Объект)Преобразует СхемаКомпоновкиДанных в структуруСтруктура
СКДИзСтруктуры(Объект, СтруктураОбъекта)Заполняет СхемаКомпоновкиДанных из структуры

Сериализация данных формы

МетодОписаниеВозврат
ДанныеФормыВСтруктуру(Форма, ТолькоСохраняемые, ...)Преобразует реквизиты управляемой формы в структуруСтруктура
ДанныеФормыИзСтруктуры(Форма, СтруктураДанных, ...)Заполняет реквизиты формы из структуры

Вспомогательные функции

МетодОписаниеВозврат
Версия()Версия подсистемыСтрока
ЭтоСсылка(Значение)Проверяет, является ли значение ссылкойБулево
ЭтоОбъект(Значение)Проверяет, является ли значение объектомБулево
ЭтоНаборЗаписейРегистра(Значение)Проверяет, является ли значение набором записейБулево
ЭтоОписаниеТипов(Значение)Проверяет, является ли значение ОписаниеТиповБулево
СсылкаСуществует(Значение)Проверяет существование объекта по ссылкеБулево
ОписаниеТиповВСтруктуру(ОписаниеТипов)Преобразует ОписаниеТипов в структуруСтруктура
ОписаниеТиповИзСтруктуры(СтруктураОписаниеТипов)Восстанавливает ОписаниеТипов из структурыОписаниеТипов
ДобавитьПравилоВыгрузкиТипа(ТипИсточника, ФункцияДополнения, Модуль)Регистрирует пользовательское правило выгрузки типа
ДобавитьПравилоЗагрузкиТипа(ТипИсточника, ТипПриемника, ФункцияПоиска, Модуль)Регистрирует пользовательское правило загрузки типа
ПолучитьОписаниеВидаОбъектов(Значение, ИБ)Получает описание вида объекта метаданныхСтруктура

Полное описание параметров и возвращаемых значений см. в README репозитория.

Примеры

Сериализация элемента справочника в JSON

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

Ссылка = Справочники.Номенклатура.НайтиПоКоду("00001");
Объект = Ссылка.ПолучитьОбъект();

Структура = СериализаторJSON.ЗначениеВСтруктуру(Объект);
СтрокаJSON = СериализаторJSON.ЗаписатьОписаниеОбъектаВJSON(Структура);

Десериализация из JSON и создание нового объекта

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

Структура = СериализаторJSON.ПрочитатьОписаниеОбъектаИзJSON(СтрокаJSON);
Структура.Ссылка.Ид = Новый УникальныйИдентификатор; // новый ИД

НовыйОбъект = СериализаторJSON.СоздатьОбъектИзСтруктуры(
Структура,
Истина // УстановитьСсылку
);
НовыйОбъект.Записать();

Сериализация таблицы значений в JSON и обратно

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
ТЗ.Добавить().Товар = "Ручка"; ТЗ[0].Количество = 10;
ТЗ.Добавить().Товар = "Бумага"; ТЗ[1].Количество = 5;

СтруктураТЗ = СериализаторJSON.ЗначениеВСтруктуру(ТЗ);
JSON = СериализаторJSON.ЗаписатьОписаниеОбъектаВJSON(СтруктураТЗ);

СтруктураИзJSON = СериализаторJSON.ПрочитатьОписаниеОбъектаИзJSON(JSON);
ВосстановленнаяТЗ = СериализаторJSON.ЗначениеИзСтруктуры(СтруктураИзJSON);

Сохранение и загрузка настроек СКД

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

// Сохранение
СтруктураСКД = СериализаторJSON.НастройкиСКДВСтруктуру(НастройкиКомпоновкиДанных);
JSONНастроек = СериализаторJSON.ЗаписатьОписаниеОбъектаВJSON(СтруктураСКД);

// Загрузка
СтруктураИзJSON = СериализаторJSON.ПрочитатьОписаниеОбъектаИзJSON(JSONНастроек);
ВосстановленныеНастройки = Новый НастройкиКомпоновкиДанных;
СериализаторJSON.НастройкиСКДИзСтруктуры(ВосстановленныеНастройки, СтруктураИзJSON);

Чтение регистра по отбору в структуру

СериализаторJSON = Обработки.УИ_ПреобразованиеДанныхJSON.Создать();

Отбор = Новый Структура("Период,КурсВзаимоРасчетов", Дата(2024, 1, 1), Истина);
СтруктураДанных = СериализаторJSON.РегистрПоОтборуВСтруктуру(
"РегистрСведений.КурсыВалют",
Отбор
);

Для Каждого Запись Из СтруктураДанных.Записи Цикл
Сообщить(Запись.Валюта + ": " + Запись.Курс);
КонецЦикла;