Заказывал на фл решение данной задачи - решал @roman_kalashnikoff (телеграм)
После проведения выгрузки деактивировать товары с количеством 0
23 - ID моего товарного каталога
Получился такой скрипт
nostock_deactivate.php
<?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
<?php
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "startNoStockDeactivate");
function startNoStockDeactivate() {
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/nostock_deactivate.php");
}
?>
И в процессе выгрузки после каждого блока прогрузки товаров, происходит выполнение скрипта. Возможно можно сделать более элегантно, но нас устраивает и такое решение
После проведения выгрузки деактивировать товары с количеством 0
23 - ID моего товарного каталога
Получился такой скрипт
nostock_deactivate.php
<?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
<?php
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "startNoStockDeactivate");
function startNoStockDeactivate() {
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/nostock_deactivate.php");
}
?>
И в процессе выгрузки после каждого блока прогрузки товаров, происходит выполнение скрипта. Возможно можно сделать более элегантно, но нас устраивает и такое решение