База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как выгрузить справочник «Категории номенклатуры» с характеристиками в JSON в УН › Ответ в теме: Как выгрузить справочник «Категории номенклатуры» с характеристиками в JSON в УН
В конфигурации «Управление нашей фирмой» (УНФ) 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/ (работа со справочниками в УНФ)