Как из файла json записать корректно иерархический справочник
Добрый день, коллеги!
Помогите, пожалуйста, сделать правильный алгоритм для заполнения справочника с родителями из файла json. Я сделал код но результат не очень точный. Файл json прилагаю
Помогите, пожалуйста, сделать правильный алгоритм для заполнения справочника с родителями из файла json. Я сделал код но результат не очень точный. Файл json прилагаю
Для каждого Элем Из СтруктураJSON Цикл
Если ТекРодитель ="" И Счетчик =0 Тогда
НоваяНомГруппа = Справочники.Арт_НоменклатурныеГруппы.СоздатьЭлемент();
НоваяНомГруппа.Код = "_"+Элем.Код+"_";
НоваяНомГруппа.Наименование = Элем.Наименование;
НоваяНомГруппа.Комментарий = "Загружено из Документооборота2";
НоваяНомГруппа.Записать();
ТекРодитель = НоваяНомГруппа; //ПерваяКорневая группа
Счетчик = Счетчик + 1;
Иначе //Здесь Родитель равен ТекРодитель.Наименование
Если Элем.Родитель = ТекРодитель.Наименование Тогда
НоваяНомГруппа = Справочники.Арт_НоменклатурныеГруппы.СоздатьЭлемент();
НоваяНомГруппа.Код = "_"+Элем.Код+"_";
НоваяНомГруппа.Родитель = ТекРодитель;
НоваяНомГруппа.Наименование = Элем.Наименование;
НоваяНомГруппа.Комментарий = "Загружено из Документооборота2";
НоваяНомГруппа.Записать();
Счетчик = Счетчик + 1;
Иначе //новый родитель ищем по наименованию
НайденныйРодитель = Справочники.Арт_НоменклатурныеГруппы.НайтиПоНаименованию(Элем.Родитель);
НоваяНомГруппа = Справочники.Арт_НоменклатурныеГруппы.СоздатьЭлемент();
НоваяНомГруппа.Код = "_"+Элем.Код+"_";
НоваяНомГруппа.Наименование = Элем.Наименование;
НоваяНомГруппа.Родитель = НайденныйРодитель;
НоваяНомГруппа.Комментарий = "Загружено из Документооборота2";
НоваяНомГруппа.Записать();
Счетчик = Счетчик + 1;
ТекРодитель = НайденныйРодитель;
КонецЕсли;
КонецЕсли;
конецЦикла;
ПоказатьПрикрепленные файлы:
simpleWrite.json
По теме из базы знаний
- Интеграция сценарного тестирования в процесс разработки
- HTTP Сервисы: Путь к своему сервису. Часть 4
- Использование системы мониторинга Zabbix с 1С для мониторинга ключевых показателей бизнеса
- Сравнительный анализ вариантов интеграции между системами
- Управление сборкой. Расширение для конфигурации СППР
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) из подготовленного ТЗ получить все элементы, у которых не заполнен родитель.
Из полученного массива в цикле получать элемент. Создавать элемент справочника. Сохранять. И сразу получать из ТЗ массив элементов, у которых этот элемент является родителем.
В итоге получится обход рекурсией.
Но тут может быть подводный камень - зацикливание рекурсии, если окажется, что элемент (поиск ведь по строке) является родителем в во вложенной иерархии элементов.
По ГУИД будет более надежно.
Из полученного массива в цикле получать элемент. Создавать элемент справочника. Сохранять. И сразу получать из ТЗ массив элементов, у которых этот элемент является родителем.
В итоге получится обход рекурсией.
Но тут может быть подводный камень - зацикливание рекурсии, если окажется, что элемент (поиск ведь по строке) является родителем в во вложенной иерархии элементов.
По ГУИД будет более надежно.
(12) а еще момент как контролировать корневую группу? ГУИД пустая строка?
Нужна проверка на пустоту ГУИД? перед вот этим кодом?
Нужна проверка на пустоту ГУИД? перед вот этим кодом?
СсылкаНаНоменклатуру = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИД_Строкой));
Попытка
ОбъектПоСсылке = СсылкаНаНоменклатуру.Получитьобъект();
Исключение
ОбъектПоСсылке = Неопределено;
КонецПопытки;
Источник что за программа?
Почему каждый раз создается новый элемент? Загрузка одноразовая или предполагается повторная загрузка?
Если источник 1С, то в json добавить ГУИД элемента и ГУИД родителя и не заниматься поиском.
Почему каждый раз создается новый элемент? Загрузка одноразовая или предполагается повторная загрузка?
Если источник 1С, то в json добавить ГУИД элемента и ГУИД родителя и не заниматься поиском.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот