Как загрузить иерархический справочник из JSON в 1С:Предприятие?

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

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

        как правильно загрузить с помощью Json иерархический справочник

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

          Загрузка иерархического справочника из JSON в 1С:Предприятии требует правильной обработки структуры данных, так как справочник содержит элементы с вложенностью (родительские и дочерние элементы). Общий алгоритм следующий:

          1. **Подготовка JSON**
          JSON должен содержать массив объектов, где каждый объект — элемент справочника с полями:
          — Уникальный идентификатор (например, Код или ВнешнийИд)
          — Наименование
          — Ссылка на родителя (например, РодительВнешнийИд или РодительКод) — для построения иерархии
          — Другие реквизиты справочника

          Пример JSON:

             [
               {
                 "Код": "001",
                 "Наименование": "Корневая категория",
                 "РодительКод": null
               },
               {
                 "Код": "001-01",
                 "Наименование": "Подкатегория 1",
                 "РодительКод": "001"
               },
               {
                 "Код": "001-02",
                 "Наименование": "Подкатегория 2",
                 "РодительКод": "001"
               }
             ]
             

          2. **Чтение JSON в 1С**
          Используйте встроенные средства платформы:

             ДанныеJSON = ПрочитатьJSON(СтрокаJSON);
             

          3. **Построение словаря для быстрого поиска элементов по коду**
          Чтобы быстро находить ссылки на элементы справочника по внешнему идентификатору, создайте соответствие:

             СоответствиеКодов = Новый Соответствие;
             

          4. **Обработка элементов и создание/обновление справочника**
          Для корректной загрузки иерархии нужно:
          — Сначала создать все корневые элементы (где РодительКод = null)
          — Затем рекурсивно или циклом создавать дочерние элементы, подставляя ссылку на родителя

          Пример кода:

             Процедура ЗагрузитьСправочникИзJSON(ДанныеJSON)
                 СоответствиеКодов = Новый Соответствие;
                 
                 // Сначала создаем корневые элементы
                 Для Каждого Элемент Из ДанныеJSON Цикл
                     Если ПустаяСтрока(Элемент.РодительКод) Тогда
                         Ссылка = Справочники.ИерархическийСправочник.СоздатьЭлемент();
                         Ссылка.Код = Элемент.Код;
                         Ссылка.Наименование = Элемент.Наименование;
                         // Заполнить другие реквизиты
                         Ссылка.Записать();
                         СоответствиеКодов.Вставить(Элемент.Код, Ссылка);
                     КонецЕсли;
                 КонецЦикла;
                 
                 // Затем создаем дочерние элементы
                 Для Каждого Элемент Из ДанныеJSON Цикл
                     Если НЕ ПустаяСтрока(Элемент.РодительКод) Тогда
                         Если СоответствиеКодов.Содержит(Элемент.РодительКод) Тогда
                             Родитель = СоответствиеКодов.Получить(Элемент.РодительКод);
                             Ссылка = Справочники.ИерархическийСправочник.СоздатьЭлемент();
                             Ссылка.Код = Элемент.Код;
                             Ссылка.Наименование = Элемент.Наименование;
                             Ссылка.Родитель = Родитель;
                             // Заполнить другие реквизиты
                             Ссылка.Записать();
                             СоответствиеКодов.Вставить(Элемент.Код, Ссылка);
                         Иначе
                             // Обработка ошибки: родитель не найден
                         КонецЕсли;
                     КонецЕсли;
                 КонецЦикла;
             КонецПроцедуры
             

          5. **Особенности**
          — Если иерархия глубже двух уровней, можно реализовать рекурсивную функцию, которая будет создавать элементы по уровням.
          — Для обновления существующих элементов сначала ищите их по коду или внешнему идентификатору, а не создавайте заново.
          — Для больших объемов данных рекомендуется использовать пакетную обработку и транзакции.

          6. **Пример вызова**

             Строка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С, включая чтение и запись.

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