При фильтрации в умном фильтре например по размеру «S» в список попадает товар с недоступным предложением по размеру «S»
В доступности товара у нас стоит Нет и в настройках каталога также стоит «не отображать недоступные товары»
Проблема заключается в том, что пока у недоступного товара стоит признак активности в товарных предложениях он будет выводиться в карточке товара как доступный.
После синхронизации с 1С это хорошо видно когда в каталоге происходит реальный бедлам и фильтр например по размеру категорически работать не хочет.
Для решения данной задачи нам нужно в инфоблоке каталога (в моем случае 23) найти все активные товары с признаком недоступности и перевести их в недоступные.
Сам код решения был реализован Романом Ка
<?php
if (!empty($_SERVER["DOCUMENT_ROOT"])) $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
else $DOCUMENT_ROOT = '/home/public_html';
require_once($DOCUMENT_ROOT."/bitrix/modules/main/include/prolog.php");
CModule::IncludeModule('iblock');
$c = 0;
$obE = new CIBlockElement();
$arSelectWin = Array("ID", "NAME");
$arFilterWin = Array("IBLOCK_ID"=>23, "ACTIVE"=>"Y", '=AVAILABLE' => 'N');
$resWin = CIBlockElement::GetList(Array("sort"=>"asc"), $arFilterWin, false, false, $arSelectWin);
//print_r($resWin);
while($obWin = $resWin->Fetch())
{
$arFields_update = Array(
"ACTIVE" => "N",
"IBLOCK_ID" => 23,
);
if ($obE->Update($obWin["ID"], $arFields_update)){
$c++;
}
}
echo '<br>Успешно деактивировано товаров: '.$c;
Для автоматического запуска деактивации недоступных товаров после выгрузки создаем init.php ,например, по пути /public_html/bitrix/php_interface/init.php со следующим содержимым
<?php
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "startNoStockDeactivate");
function startNoStockDeactivate() {
require("/include/nostock_deactivate.php");
}
?>
где /include/nostock_deactivate.php — путь расположения предыдущего файла