TLDR : не изобретать велосипед, использовать существующие алгоритмы и структуры.
Я предполагаю, что ваш вопрос не о тренировочном упражнении, а реальной проблеме. Если это упражнение, постарайтесь получить хорошее представление о рекурсии на простом в использовании языке по вашему выбору в большом сообществе, прежде чем возвращаться к x ++.
Ваш метод рекурсии выглядит неполным, потому что в каждой рекурсии вы перебираете все записи tmpBom
, что (если вы не измените записи в этой таблице где-то еще) не имеет смысла и никогда не прекратится. Я также не понимаю, как этот метод может дать результат, который вы описываете. Я предлагаю вам взглянуть на некоторые учебные материалы по алгоритму рекурсии, чтобы узнать об основных частях рекурсии.
Вы отметили вопрос x ++ , и синтаксис также очень похож на этот. К сожалению, вы не добавили информацию о том, какую версию microsoft-Dynamics вы используете, но я предполагаю, что Dynamics-Ax-2012 , поскольку в настоящее время это самая распространенная используемая версия.
В этой версии уже есть готовый отчет SSRS, который покажет вам структуру ведомости материалов. Вы можете позвонить в отчет по номеру Управление запасами> Отчеты> Спецификации> Строки . Этот отчет должно быть довольно легко изменить, чтобы он также отображал уровень, если отчет еще не удовлетворяет вашим требованиям.
Если вам все еще нужно реализовать собственное решение, взгляните на класс BOMSearch
и его дочерние элементы. Он используется в нескольких местах (проверьте перекрестные ссылки), а также может использоваться для расширения / взрыва спецификации.
Также обратите внимание, что существует множество статей, которые пытаются объяснить, как расширить или взорвать спецификацию в коде x ++, но, как и во всех вещах в Интернете, будьте осторожны: большинство из них неполные или простые неправильно.