Показать сообщение отдельно
Старый 13.02.2013, 13:42   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Штатно, имеются 2 способа.
1. Берем список всех классов (класс Dictionary, методы classCnt, classCnt2Id), перебираем их в цикле и смотрим на свойство extends. Если оно указывает на наш класс - значит это наследник. Если не на наш - значит пропускаем. Соответственно - сделав тут рекурсию - мы получим список наследников и наследников наследников.
Скорость работы п.1 хорошо заметна - когда мы создаем новый Shared Project. Система ищет всех наследников класса ProjectNode и список наследников выводит в качестве пунктов меню. И это еще без наследников наследников. Само собой - речь идет о первой попытке создания Shared Project после входа в АХ. Затем это кешируется.

2. Иерархия объектов (пункт меню из контекстного меню Надстройки из АОТ). Она ориентирована на то, что можно изначально заполнить спецтабличку (xrefTypeHierarchy) из формы построения перекрестных ссылок, а затем уже выбирать оттуда информацию гораздо быстрее, чем с помощью п.1

Я иногда задумываюсь - а не станет ли облегчение программирования в будущем усложнением в другом месте? Т.е. вроде как все знают - добавил наследника - он не активируется, пока его не пропишешь в конструкторе. А тут он взял и сам прицепился. Нетипичное поведение по сравнению с другим кодом. Что усложняет процесс изучения кода.

ЗЫ. Пока писал - уже AndyD ответил. Его вариант - наверное даже лучше, чем мой п.1
__________________
Возможно сделать все. Вопрос времени