Причина такого поведения отчета выявлена. Метод BOMHierarchyReport\scanDownVersion() делает проверку на цикличность.
PHP код:
if (presLevel == 0 ||!circularBOMMap)
circularBOMMap = new Map(Types::Integer, Types::Enum); // RecId, more than once?
if (circularBOMMap.exists(BOM.RecId))
{
if (circularBOMMap.lookup(BOM.RecId) == NoYes::Yes)
return false;
else
circularBOMMap.insert(BOM.RecId, NoYes::Yes);
}
else
circularBOMMap.insert(BOM.RecId, NoYes::No);
reportRun.send(BOM);
В моем случае спецификация имеет вид:
PHP код:
-Сп1 (искусственная)
-Сп21
-Сп31
-Сп41
-Номенклатура1
-Номенклатура2
-Сп22
-Сп32
-Сп41
-Номенклатура3
-Номенклатура2
-Сп22
-Сп32
-Сп41
-Номенклатура1
-Номенклатура3
и т.д.
Вполне реальная производственная спецификация.
Так вот, в соответствии с приведенным выше кодом, Когда третий раз выводиться Сп41, этот метод вылетает. Вылетает из-за того, что при возврате на уровень 1 circularBOMMap не очищается.
Пытаемся понять логику такой работы кода, пока ни чего разумного на ум не приходит. Видимо, все же глюк.