Вот пример sql запроса, который включает элемент, у которого хоть 1 активный SKU.
Он же делает наоборот: отключает элемент если все SKU неактивны.
/** * catalog_import_1C_finish * - событие, вызываемое после окончания обмена одним XML-файлом. * @param mixed $arParams - Параметры подключения компонента обмена. * @param mixed $ABS_FILE_NAME - Полный путь к XML-файлу обмена. * @return void */ function catalog_import_1C_finish($arParams, $ABS_FILE_NAME) { if(stripos($ABS_FILE_NAME,"offers.xml")) { global $DB; $strSql = "CREATE TEMPORARY TABLE `sku_active` SELECT `ID`,count(DISTINCT CASE WHEN `ACTIVE` = 'Y' THEN `ID` END) as `COUNT`, substr(`XML_ID`, 1, INSTR(`XML_ID`, '#')-1) AS `PARENT_XML_ID` FROM `b_iblock_element` WHERE `XML_ID` LIKE '%#%' GROUP BY `PARENT_XML_ID`; "; $DB->Query($strSql, true); $strSql = "UPDATE `b_iblock_element` AS `T1` SET `T1`.`ACTIVE` = (SELECT CASE WHEN `T2`.`COUNT`>0 THEN 'Y' ELSE 'N' END AS `ACTIVE` FROM `sku_active` AS `T2` WHERE `T1`.`XML_ID` = `T2`.`PARENT_XML_ID`) WHERE `T1`.`XML_ID` NOT LIKE '%#%' "; $DB->Query($strSql, true); } } |
p.s. для оптовой компании решение зашло.