Ну зацикливание можно обойти просто проверкой инфоблока
и отдельный обработчик на OnProductAdd?
<?
$arSelect = Array(
'IBLOCK_ID',
'ID',
'NAME',
'CODE'
);
$arFilter = Array(
'ID' => $arResult['PROPERTIES']['CML2_COLLECTION']['VALUE']
);
$db_res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if($arElement = $db_res->GetNext()) {
$CODE = $arElement['CODE'];
$NAME = $arElement['NAME'];
}
?>
Пожалуйста. Хорошо что разобрались.