База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как выгрузить объект 1С со всеми реквизитами в JSON? › Ответ в теме: Как выгрузить объект 1С со всеми реквизитами в JSON?
Николай, чтобы выгрузить объект 1С со всеми реквизитами в JSON, нужно пройтись по всем реквизитам объекта и сформировать структуру, которую потом сериализовать в JSON. Вот пример кода на 1С, который выгружает объект (например, элемент справочника или документ) в JSON с использованием стандартных средств платформы 1С:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Функция ВыгрузитьОбъектВJSON(ОбъектСсылка) Экспорт // Получаем объект по ссылке Объект = ОбъектСсылка.ПолучитьОбъект(); // Создаем структуру для хранения данных Данные = Новый Структура; // Получаем метаданные объекта МетаданныеОбъекта = ОбъектСсылка.Метаданные(); // Перебираем реквизиты объекта Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл ИмяРеквизита = Реквизит.Имя; ЗначениеРеквизита = Объект[ИмяРеквизита]; // Если реквизит - это ссылка на другой объект, можно выгрузить его код или строковое представление Если ТипЗнч(ЗначениеРеквизита) = Тип("СправочникСсылка") Или ТипЗнч(ЗначениеРеквизита) = Тип("ДокументСсылка") Тогда Если ЗначениеРеквизита = Неопределено Тогда Данные.Вставить(ИмяРеквизита, Неопределено); Иначе // Можно выгрузить ссылку в виде строки Данные.Вставить(ИмяРеквизита, ЗначениеРеквизита.Представление()); КонецЕсли; ИначеЕсли ТипЗнч(ЗначениеРеквизита) = Тип("Дата") Тогда // Форматируем дату в ISO 8601 Если ЗначениеРеквизита = Неопределено Тогда Данные.Вставить(ИмяРеквизита, Неопределено); Иначе Данные.Вставить(ИмяРеквизита, Формат(ЗначениеРеквизита, "ДФ=yyyy-MM-ddTHH:mm:ss")); КонецЕсли; Иначе // Для остальных типов просто вставляем значение Данные.Вставить(ИмяРеквизита, ЗначениеРеквизита); КонецЕсли; КонецЦикла; // Создаем объект записи JSON ЗаписьJSON = Новый ЗаписьJSON; // Записываем структуру в строку СтрокаJSON = ЗаписьJSON.ЗаписатьСтрокуJSON(Данные); Возврат СтрокаJSON; КонецФункции |
Пример использования:
|
1 2 3 4 5 |
СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоКоду("0000001"); Если СсылкаНаОбъект <> Неопределено Тогда JSONСтрока = ВыгрузитьОбъектВJSON(СсылкаНаОбъект); Сообщить(JSONСтрока); КонецЕсли; |
Объяснение:
— Получаем объект по ссылке.
— Перебираем все реквизиты метаданных объекта.
— Для каждого реквизита получаем значение.
— Если реквизит — это ссылка на другой объект, выгружаем его строковое представление (можно заменить на код или другую информацию).
— Для дат форматируем в ISO 8601.
— Для остальных типов просто вставляем значение.
— Используем стандартный объект ЗаписьJSON для сериализации структуры в JSON.
Если нужно выгружать вложенные объекты (например, табличные части или реквизиты-ссылки с детализацией), то нужно рекурсивно вызывать такую же функцию для вложенных объектов.
Если у вас 1С версии 8.3.10 и выше, то можно использовать встроенный метод Объект.ЗаписатьJSON(), но он не всегда удобен для кастомизации.
Если нужна помощь с выгрузкой табличных частей или более сложных структур — могу помочь с кодом.