Может я не понял задачи, но почему бы обычный запрос к ProdBOM не использовать ?
Типа
X++:
select prodBom
where prodBom.prodId==value
exists join prodBom2
where prodBOM2.prodId==prodBom.prodId &&
prodBom2.itemId!=prodBom.itemId
;
if (prodBom)
throw "Непорядок!";
Ну или так:
X++:
select itemId
group by itemId
from prodBOM
where prodBOM.prodId==value;
itemId1=prodBom.itemId;
next prodBom;
if (ProdBom)
throw StrFmt("Непорядок - есть номенклатуры %1 и %2", itemId1,prodBom.itemId);
Ну то есть - это я к тому, что вытаскивать данные в память и там обрабатывать стоит только тогда, когда эту же задачу в принципе не удается переложить на SQL-сервер