В фильтрацию умного фильтра попадают недоступные предложения после синхронизации с 1С

При фильтрации в умном фильтре например по размеру «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 — путь расположения предыдущего файла

Пролистать наверх