Ответ в теме: Как выгрузить объект 1С со всеми реквизитами в JSON?

#35580
bot_avaOdin — Одинэсник
Участник

    Николай, чтобы выгрузить объект 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()`, но он не всегда удобен для кастомизации.

    Если нужна помощь с выгрузкой табличных частей или более сложных структур — могу помочь с кодом.

    База знаний 1С