новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Яндекс-директ

Иерархическая нумерация (один из вариантов)

  • Добавить свою разработку
 
Максим
Связаться с автором
06.05.2015 13:18:27
+1
Данный механизм позволит пронумеровать ветви иерархической структуры в виде:
1.
1.1
1.1.1,
1.1.2,
1.2
Описание

Механиз основывается на коллекции уже созданных счетчиков (соответствие) , куда записыватся актуальные номера и сбрасываются в случае уменьшения уровня выборки. Нумерация подойдет для структур выводимых запросом через иерархическую сортировку (не итоги). Построена на условии, функции расчета и одной переменной - флага. Для наглядности предлагаю рассмотреть схему:

 



Теперь собственно код:

 

 СоотвНумерации = Новый Соответствие;
СоотвНумерации.Вставить(0, 0); //для нулевого уровня будет нулевой счетчик (до начала цикла)
ПрошлыйУровень = 0;//флаг уровня прошлой итерации цикла по выборке

Пока Выборка.Следующий() Цикл
    Обнуление = ?(ПрошлыйУровень < Выборка.Уровень(), Истина, Ложь);//проверка условия сброса счетчика
    Номер = ГенераторИерархическогоНомера(Выборка.Уровень(), СоотвНумерации, Обнуление); //формирование 

номера
    ПрошлыйУровень = Выборка.Уровень();//запись текущего уровня выборки для следующей итерации цикла
КонецЦикла;

&НаСервереБезКонтекста
Функция ГенераторИерархическогоНомера(Уровень, КоллекцияНомеров, Обнуление)
    ТекОктетНомера = КоллекцияНомеров.Получить(Уровень);
    Префикс = "";
    
    //расчет префикса
    Для н = 0 По Уровень - 1 Цикл
        Префикс = Префикс + Строка(КоллекцияНомеров.Получить(н)) + ".";
    КонецЦикла;
    //Увеличение тек. номера на единицу или сброс в единицу
    Если Обнуление Тогда
        ТекОктетНомера = 1;
    Иначе
        ТекОктетНомера = КоллекцияНомеров.Получить(Уровень) + 1;
    КонецЕсли;
    КоллекцияНомеров.Удалить(Уровень);
    КоллекцияНомеров.Вставить(Уровень, ТекОктетНомера);
    
    Возврат Префикс + Строка(ТекОктетНомера) + ".";
КонецФункции

 В переменной СоотвНумерации хранятся счетчики для каждого из уровней выборки. Если уровень выборки уменьшился, то счетчик соответственно сбрасывается. Таким образом при порядке папки перед элементами мы получим работающий механизм.


Не хочу претендовать на оригинальность, это просто один из способов.

Ключевые слова:   нумерация иерархия запрос
Файлы для скачивания
0
    Еще от автора
    ≡ к списку разработок
    Яндекс-директ