Когда-то ковырялся со списком всех пунктов меню. Тоже зачем-то нужен был уровень. Написал маленький джобик с использованием рекурсии, причём получившаяся компактность поразила. Может быть, на что сгодится (например, уровни надо куда-то в таблицу нагенерить). Уровень иерархии hLevel по ходу вычисляется простой инкрементацией "туда-сюда". Признаться, сейчас не сразу смогу сообразить, как это всё работает, но работает
X++:
static void Job_MenusList(Args _args)
{
int row, hLevel;
TreeNode treeNode = new xInfo().rootNode().AOTfindChild('Menus');
void nextNode( treeNode _tn)
{
;
hLevel++;
_tn = _tn.AOTfirstChild();
while (_tn )
{
row++;
info(strfmt('%1 -- %2 -- %3',
row, hLevel, _tn.treeNodePath()));
nextNode(_tn );
_tn = _tn.AOTnextSibling();
}
hLevel--;
}
;
nextNode( treeNode );
}