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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как выгрузить объект 1С со всеми реквизитами в JSON?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35579
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        выгрузить объект со всеми реквизитами в 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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С