Добрый день! Расскажу про одну задачу, которую решал на днях. Необходимо было рассортировать номенклатуру в 50 тыс. наименований в 4 категории. Алгоритм был рассортировки очень прост. Если на одном из уровней категоризации (категория, подкатегория, подкатегория подкатегории и так далее) встречается сочетание букв, например «внеш», то это внешние, если «внутр», то внутренние. Казалось бы, что сложного?) Сложность в том, как организовано хранение данных в 1С. А организовано оно в таблице вида «Parent-child», то есть всё записано в 1 таблице, но есть поле, в котором указано, что является «родительским элементом». В целом, практика вполне распространённая. Однако подобное хранение обычно организуется для сущностей одного типа. Например, сотрудники. Есть директор отдела, его подчинённые и так далее. В этом случае ключ к id директора отдела имеет смысл, потому что директор отдела тоже что-то делает, и на него должна ссылаться табличка фактов. Организация подобного для разных сущностей, выглядит не самым удачным решением, с моей точки зрения. Ибо это… разные сущности – единица номенклатуры и её подкатегория. Второй, и куда более важный (в худшую сторону) фактор – это то, что уровни иерархий были разными. То есть, если у нас генеалогические древо – где-то 3 поколения, где-то 8 – нормально. Потому что это люди, у каждого из них свой id и так далее. А вот в категоризации товаров это крайне неудобно. Где-то 3 уровня категорий, а где-то – 1, то есть категория и сразу единицы товаров. Именно про решение этой проблемы я хотел написать, так как готовых решений в сети не было. Собственно, где наша не пропадала. Я обозначил порядок действий: 1. Каждой строке присвоить номер «поколения» 2. Вытащить все «некатегории» в таблицу справочник номенкелатуры 3. Далее поэтапно вытаскивать уровни категорий с условием – если уровня категории нет, то брать название более высокой категории. Пример: если есть Категория1-Подкатегория1-Субкатегория1-Товар1 и Категория2 и Товар 2, то первую оставляем как есть, а вторую раскладываем как: Категория2 – Категория2-Категория2-Товар2.
В этом случае будет отличная каскадная звезда 4. А вот тут же сделать категоризацию, как меня попросил заказчик. Код и прочее я напишу в след части.