Как выгрузить справочник «Категории номенклатуры» с характеристиками в JSON в УН

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как выгрузить справочник «Категории номенклатуры» с характеристиками в JSON в УН

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

        уточняю управление нашей фирмой 3.0.12.211

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

          В конфигурации «Управление нашей фирмой» (УНФ) 3.0.12.211 для выгрузки справочника «Категории номенклатуры» со значениями характеристик в формате JSON потребуется написать собственный код на встроенном языке 1С, так как типовой функционал выгрузки в JSON для справочников с вложенными характеристиками отсутствует.

          Общий подход следующий:

          1. **Получить данные из справочника «Категории номенклатуры»**
          Выполнить запрос или перебор элементов справочника, получить основные реквизиты категорий.

          2. **Для каждой категории получить связанные характеристики**
          В УНФ характеристики категорий хранятся в справочнике «Характеристики категорий номенклатуры» (или аналогичном). Нужно получить все характеристики, у которых владелец — текущая категория.

          3. **Сформировать структуру данных для JSON**
          Для каждой категории создать структуру с реквизитами категории и массивом характеристик, где каждая характеристика — это структура с нужными реквизитами (код, наименование и т.п.).

          4. **Преобразовать структуру в JSON**
          Использовать стандартный механизм 1С — объект `JSON` и метод `ЗаписатьСтрокуJSON` или `ПреобразоватьВJSON`.

          ### Пример кода выгрузки

          Процедура ВыгрузитьКатегорииСХарактеристикамиВJSON()
          
              Результат = Новый Массив;
          
              // Получаем все категории номенклатуры
              Категории = Справочники.КатегорииНоменклатуры.Выбрать();
          
              Пока Категории.Следующий() Цикл
                  КатегорияСтруктура = Новый Структура;
                  КатегорияСтруктура.Вставить("Ссылка", Категории.Ссылка);
                  КатегорияСтруктура.Вставить("Код", Категории.Код);
                  КатегорияСтруктура.Вставить("Наименование", Категории.Наименование);
          
                  // Получаем характеристики для текущей категории
                  Характеристики = Новый Массив;
                  Запрос = Новый Запрос;
                  Запрос.Текст = 
                  "ВЫБРАТЬ
                   | Характеристики.Ссылка КАК Ссылка,
                   | Характеристики.Код КАК Код,
                   | Характеристики.Наименование КАК Наименование
                   |ИЗ
                   | Справочник.ХарактеристикиКатегорийНоменклатуры КАК Характеристики
                   |ГДЕ
                   | Характеристики.Владелец = &Категория";
          
                  Запрос.УстановитьПараметр("Категория", Категории.Ссылка);
                  РезультатЗапроса = Запрос.Выполнить();
                  ВыборкаХар = РезультатЗапроса.Выбрать();
          
                  Пока ВыборкаХар.Следующий() Цикл
                      ХарСтруктура = Новый Структура;
                      ХарСтруктура.Вставить("Ссылка", ВыборкаХар.Ссылка);
                      ХарСтруктура.Вставить("Код", ВыборкаХар.Код);
                      ХарСтруктура.Вставить("Наименование", ВыборкаХар.Наименование);
                      Характеристики.Добавить(ХарСтруктура);
                  КонецЦикла;
          
                  КатегорияСтруктура.Вставить("Характеристики", Характеристики);
          
                  Результат.Добавить(КатегорияСтруктура);
              КонецЦикла;
          
              // Преобразуем в JSON
              JSONСтрока = ОбщегоНазначения.ПреобразоватьВJSON(Результат);
          
              // Записываем в файл
              ИмяФайла = КаталогВременныхФайлов() + "КатегорииНоменклатурыСХарактеристиками.json";
              ЗаписьФайла = Новый Файл(ИмяФайла);
              ПотокЗаписи = ЗаписьФайла.ПолучитьПотокЗаписи();
              ПотокЗаписи.ЗаписатьСтроку(JSONСтрока);
              ПотокЗаписи.Закрыть();
          
              Сообщить("Выгрузка завершена. Файл: " + ИмяФайла);
          
          КонецПроцедуры
          

          ### Важные моменты:

          — В УНФ 3.0.12.211 справочник характеристик категорий может называться иначе, уточните точное имя в вашей базе.
          — Если характеристик много, можно добавить фильтрацию или пагинацию.
          — Для более сложных структур можно расширить структуру данных.
          — Для удобства можно сделать обработку с выбором пути сохранения файла.

          ### Рекомендации

          — Используйте встроенный механизм `ОбщийМодуль.ОбщегоНазначения.ПреобразоватьВJSON` для преобразования структур и массивов в JSON.
          — Если требуется выгрузка с учетом вложенных характеристик номенклатуры, то алгоритм аналогичный, только меняется справочник и связи.
          — Для отладки можно выводить промежуточные данные через `Сообщить`.

          Рекомендую посмотреть здесь:
          https://infostart.ru/public/1012589/ (пример обхода характеристик)
          https://infostart.ru/public/137862/ (работа с табличными документами и JSON)
          https://infostart.ru/public/1839811/ (работа со справочниками в УНФ)

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С