Ну в общем Вы двигаетесь в правильном направлении.
Если я Вас правлиьно понял, Вам надо выбрать все дочерние записи отталкиваясь от определенного значения SalesUnitId,
тогда напишите рекурсивную функцию, которая, получая SalesUnitId как параметр, выбирает по очереди (while select) все дочерние записи, и, если какая нибудь из них тоже содержит дочерние, вызывается рекурсивно для этой конкретой дочерней записи.
Ну например:
X++:
static void Job45(Args _args)
{
SMMSalesUnitId salesUnitId;
List salesUnits = new List(Types::String);
List getChildSalesUnit(SMMSalesUnitId _salesUnitIdParent)
{
SMMSalesUnit salesUnit;
List childSalesUnit = new List(Types::String);
//Add current sales unit to list
childSalesUnit.addEnd(_salesUnitIdParent);
//Check for child records
select count(RecId)
from salesUnit
where salesUnit.ParentId == _salesUnitIdParent;
if (!salesUnit)
{
return childSalesUnit;
}
//Go through child records and call recurent function
while select SalesUnitId
from salesUnit
where salesUnit.ParentId == _salesUnitIdParent
{
//Merge list with the result list of all children
childSalesUnit = List::merge(childSalesUnit, getChildSalesUnit(salesUnit.SalesUnitId));
}
return childSalesUnit;
}
;
salesUnitId = "any value";
salesUnits = getChildSalesUnit(salesUnitId);
}