База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как загрузить иерархический справочник из JSON в 1С:Предприятие? › Ответ в теме: Как загрузить иерархический справочник из JSON в 1С:Предприятие?
Загрузка иерархического справочника из JSON в 1С:Предприятии требует правильной обработки структуры данных, так как справочник содержит элементы с вложенностью (родительские и дочерние элементы). Общий алгоритм следующий:
1. **Подготовка JSON**
JSON должен содержать массив объектов, где каждый объект — элемент справочника с полями:
— Уникальный идентификатор (например, Код или ВнешнийИд)
— Наименование
— Ссылка на родителя (например, РодительВнешнийИд или РодительКод) — для построения иерархии
— Другие реквизиты справочника
Пример JSON:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[ { "Код": "001", "Наименование": "Корневая категория", "РодительКод": null }, { "Код": "001-01", "Наименование": "Подкатегория 1", "РодительКод": "001" }, { "Код": "001-02", "Наименование": "Подкатегория 2", "РодительКод": "001" } ] |
2. **Чтение JSON в 1С**
Используйте встроенные средства платформы:
|
1 |
ДанныеJSON = ПрочитатьJSON(СтрокаJSON); |
3. **Построение словаря для быстрого поиска элементов по коду**
Чтобы быстро находить ссылки на элементы справочника по внешнему идентификатору, создайте соответствие:
|
1 |
СоответствиеКодов = Новый Соответствие; |
4. **Обработка элементов и создание/обновление справочника**
Для корректной загрузки иерархии нужно:
— Сначала создать все корневые элементы (где РодительКод = null)
— Затем рекурсивно или циклом создавать дочерние элементы, подставляя ссылку на родителя
Пример кода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Процедура ЗагрузитьСправочникИзJSON(ДанныеJSON) СоответствиеКодов = Новый Соответствие; // Сначала создаем корневые элементы Для Каждого Элемент Из ДанныеJSON Цикл Если ПустаяСтрока(Элемент.РодительКод) Тогда Ссылка = Справочники.ИерархическийСправочник.СоздатьЭлемент(); Ссылка.Код = Элемент.Код; Ссылка.Наименование = Элемент.Наименование; // Заполнить другие реквизиты Ссылка.Записать(); СоответствиеКодов.Вставить(Элемент.Код, Ссылка); КонецЕсли; КонецЦикла; // Затем создаем дочерние элементы Для Каждого Элемент Из ДанныеJSON Цикл Если НЕ ПустаяСтрока(Элемент.РодительКод) Тогда Если СоответствиеКодов.Содержит(Элемент.РодительКод) Тогда Родитель = СоответствиеКодов.Получить(Элемент.РодительКод); Ссылка = Справочники.ИерархическийСправочник.СоздатьЭлемент(); Ссылка.Код = Элемент.Код; Ссылка.Наименование = Элемент.Наименование; Ссылка.Родитель = Родитель; // Заполнить другие реквизиты Ссылка.Записать(); СоответствиеКодов.Вставить(Элемент.Код, Ссылка); Иначе // Обработка ошибки: родитель не найден КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
5. **Особенности**
— Если иерархия глубже двух уровней, можно реализовать рекурсивную функцию, которая будет создавать элементы по уровням.
— Для обновления существующих элементов сначала ищите их по коду или внешнему идентификатору, а не создавайте заново.
— Для больших объемов данных рекомендуется использовать пакетную обработку и транзакции.
6. **Пример вызова**
|
1 2 3 |
СтрокаJSON = ПолучитьСтрокуJSONИзФайлаИлиВеба(); ДанныеJSON = ПрочитатьJSON(СтрокаJSON); ЗагрузитьСправочникИзJSON(ДанныеJSON); |
—
### Рекомендую посмотреть здесь:
https://infostart.ru/public/667123/ — пример загрузки иерархического справочника из JSON с разбором кода и нюансами.
https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/ — работа с JSON в 1С, включая чтение и запись.