Красивый код по загрузке иерархии

Гружу номенклатуру с сайта. Иерархия там задается полями category1-category6. Вот мой код, который создает группу, если не нашел ее по ID или наименованию, помещает номенклатуру в нужную группу и даже перемещает группы если их иерархия на сайте поменялась. При всей лаконичности кода он очень функционален:

//=== ЗАГРУЗКА ИЕРАРХИИ

//Идем до первого незаполненного объекта-родителя
idПредРодитель = 0;
СсылкаПредРодитель = Неопределено;
Для Инд = 1 По 6 + 1 Цикл
	Если Инд = 6 + 1 Тогда
		idРодитель = 0;
	Иначе
		idРодитель = ЧислоИзСтроки(ЭлементДанных["category" + Инд]); 
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(idРодитель) Тогда
		Если ЗначениеЗаполнено(СсылкаПредРодитель) Тогда
			ПрисвоитьБезопасно(НоменклатураОбъект.Родитель, СсылкаПредРодитель); 
		КонецЕсли;
		Прервать;
	Иначе
		//Переносим группы из группы в группу  (а не только номенклатуру)
		НаименованиеГруппы = EntityValueByID(ТаблицаИерархииНоменклатуры, idРодитель);
		СсылкаРодитель = НайтиГруппуНоменклатурыПоИДНаименованию(ТаблицаИерархииНоменклатуры, idРодитель, НаименованиеГруппы);
		Если НЕ ЗначениеЗаполнено(СсылкаРодитель) Тогда
			ГО = Справочники.Номенклатура.СоздатьГруппу();
			ГО.СайтИД = idРодитель;
			ГО.Наименование = НаименованиеГруппы;
			ГО.Записать();
			СсылкаРодитель = ГО.Ссылка;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(СсылкаРодитель) И 
			ЗначениеЗаполнено(СсылкаПредРодитель) И
			СсылкаРодитель.Родитель <> СсылкаПредРодитель
			Тогда
			ГО = СсылкаРодитель.ПолучитьОбъект();
			ПрисвоитьБезопасно(ГО.Родитель, СсылкаПредРодитель);
			Если ГО.Модифицированность() Тогда
				ГО.ОбменДанными.Загрузка = истина;
				ГО.Записать();
			КонецЕсли;
		КонецЕсли;
		
		//Переходим к следующему уровню родителя
		СсылкаПредРодитель = СсылкаРодитель; 
	КонецЕсли;
	
КонецЦикла;

Поиск по ID или наименованию с приоритетом ID сделан запросом:

Функция НайтиГруппуНоменклатурыПоИДНаименованию(ТаблицаИерархииНоменклатуры, id, НаименованиеГруппы) Экспорт
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.ЭтоГруппа
	|	И Номенклатура.СайтИД = &СайтИД
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ
	|	Номенклатура.Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.ЭтоГруппа
	|	И Номенклатура.Наименование = &Наименование И &ЕстьНаименование" );
	З.УстановитьПараметр("СайтИД", id);
	З.УстановитьПараметр("Наименование", НаименованиеГруппы);
	З.УстановитьПараметр("ЕстьНаименование", ЗначениеЗаполнено(НаименованиеГруппы));
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	КонецЕсли;
КонецФункции