По умолчанию Битрикс выгружает в YML (Яндекс Маркет) все активированные товары.
Товарам у которых указана цена и количество на складе больше нуля, в выгружаемом файле XML присваивается значение available=”true”
Товарам у которых указана цена и количество на складе меньше или равно 0, в выгружаемом файле XML присваивается значение available=”false”
Задача сделать выгрузку только тех товаров, которые есть на складе, то есть их количество больше нуля, не важно указана цена или нет.
1) Создадим свой скрипт экспорта. Для этого возьмем из /bitrix/modules/catalog/load/ два файла: yandex_run.php и yandex_setup.php
2) Скопируем их в любое место на диск и переименуем, например new, главное сохранить окончание _run.php, в нашем случае получится так: new_run.php и new_setup.php
3) Теперь копируем эти файлы в /bitrix/php_interface/include/catalog_export/
4) После этого в админке битрикса появится новый скрипт экспорта:
5) Теперь нужно добавить в наш файл скрипта условие для фильтра. Открываем файл new_run.php и находим строку 590:
$filter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
6) Вставляем условие:
"!CATALOG_QUANTITY" => 0
Получаем строку:
$filter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!CATALOG_QUANTITY"=>0);
Теперь будут выгружаться только те товары, которые есть в наличии.
Если у вас включены Торговые предложения (SKU), то нужно добавить такое же условие в строке 868, найдите:
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
и замените на:
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "!CATALOG_QUANTITY" => 0);
Вот и все. Удачи