Сериализатор JSON
Библиотека для сериализации и десериализации данных 1С (объектов метаданных, ссылок, таблиц значений, наборов записей регистров, настроек и схем СКД, данных формы) в универсальные структуры и JSON.
- Обработка: УИ_ПреобразованиеДанныхJSON
- Репозиторий: github.com/arkuznetsov/SerLib1C
- Описание API: README репозитория
- Лицензия: MPL-2.0
к сведению
Перед использованием необходимо создать экземпляр обработки:
Сериализатор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.РегистрПоОтборуВСтруктуру(
"РегистрСведений.КурсыВалют",
Отбор
);
Для Каждого Запись Из СтруктураДанных.Записи Цикл
Сообщить(Запись.Валюта + ": " + Запись.Курс);
КонецЦикла;