База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как выгрузить объект 1С со всеми реквизитами в JSON? › Ответ в теме: Как выгрузить объект 1С со всеми реквизитами в JSON?
Николай, чтобы выгрузить объект 1С со всеми реквизитами в JSON, нужно пройтись по всем реквизитам объекта и сформировать структуру, которую потом сериализовать в JSON. Вот пример кода на 1С, который выгружает объект (например, элемент справочника или документ) в JSON с использованием стандартных средств платформы 1С:
Функция ВыгрузитьОбъектВJSON(ОбъектСсылка) Экспорт
// Получаем объект по ссылке
Объект = ОбъектСсылка.ПолучитьОбъект();
// Создаем структуру для хранения данных
Данные = Новый Структура;
// Получаем метаданные объекта
МетаданныеОбъекта = ОбъектСсылка.Метаданные();
// Перебираем реквизиты объекта
Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл
ИмяРеквизита = Реквизит.Имя;
ЗначениеРеквизита = Объект[ИмяРеквизита];
// Если реквизит - это ссылка на другой объект, можно выгрузить его код или строковое представление
Если ТипЗнч(ЗначениеРеквизита) = Тип("СправочникСсылка") Или ТипЗнч(ЗначениеРеквизита) = Тип("ДокументСсылка") Тогда
Если ЗначениеРеквизита = Неопределено Тогда
Данные.Вставить(ИмяРеквизита, Неопределено);
Иначе
// Можно выгрузить ссылку в виде строки
Данные.Вставить(ИмяРеквизита, ЗначениеРеквизита.Представление());
КонецЕсли;
ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип("Дата") Тогда
// Форматируем дату в ISO 8601
Если ЗначениеРеквизита = Неопределено Тогда
Данные.Вставить(ИмяРеквизита, Неопределено);
Иначе
Данные.Вставить(ИмяРеквизита, Формат(ЗначениеРеквизита, "ДФ=yyyy-MM-ddTHH:mm:ss"));
КонецЕсли;
Иначе
// Для остальных типов просто вставляем значение
Данные.Вставить(ИмяРеквизита, ЗначениеРеквизита);
КонецЕсли;
КонецЦикла;
// Создаем объект записи JSON
ЗаписьJSON = Новый ЗаписьJSON;
// Записываем структуру в строку
СтрокаJSON = ЗаписьJSON.ЗаписатьСтрокуJSON(Данные);
Возврат СтрокаJSON;
КонецФункции
Пример использования:
СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоКоду("0000001");
Если СсылкаНаОбъект <> Неопределено Тогда
JSONСтрока = ВыгрузитьОбъектВJSON(СсылкаНаОбъект);
Сообщить(JSONСтрока);
КонецЕсли;
Объяснение:
— Получаем объект по ссылке.
— Перебираем все реквизиты метаданных объекта.
— Для каждого реквизита получаем значение.
— Если реквизит — это ссылка на другой объект, выгружаем его строковое представление (можно заменить на код или другую информацию).
— Для дат форматируем в ISO 8601.
— Для остальных типов просто вставляем значение.
— Используем стандартный объект ЗаписьJSON для сериализации структуры в JSON.
Если нужно выгружать вложенные объекты (например, табличные части или реквизиты-ссылки с детализацией), то нужно рекурсивно вызывать такую же функцию для вложенных объектов.
Если у вас 1С версии 8.3.10 и выше, то можно использовать встроенный метод `Объект.ЗаписатьJSON()`, но он не всегда удобен для кастомизации.
Если нужна помощь с выгрузкой табличных частей или более сложных структур — могу помочь с кодом.