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

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

#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С