Вот пример 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. для оптовой компании решение зашло.