Что делать если битрикс не ставит нет на складе? Мне часто задают этот вопрос, поэтому я думаю эта статья поможет решить эту проблему! При выгрузке каталога из 1С в инфоблок под дефолту Битрикс не ставит галочку «_уменьшать количество при заказе_», в результате чего товар, которого нет на складе можно купить, и при выгрузке в Яндекс.Маркет будет стоять, что товар можно купить, а на самом деле это не так, и Яндекс.Маркет за такое может забанить ваш магазин (из-за жалоб, плюс они сами иногда обзванивают магазины, и такое встречается). Чтобы исправить эту неприятную недоработку нам необходимо в файле init.php добавить маленький кусок кода, который срабатывает при любом добавлении товара в инфоблок, а делать мы это будем через стандартное событие OnProductAdd. Подробности и код под катом!

Вот код, который мы добавляем в init.php

 

<?
AddEventHandler("sale", "OnProductAdd", "OnProductAdd"); 

    function OnProductAdd(&$ID,$Fields)
    {
     $res=Array("QUANTITY_TRACE"=>'Y);
      CCatalogProduct::Update($ID,$res);
    }
?>

 

Хочу обратить внимание, что в данном скрипте НЕ проверяется инфоблок, в который идёт загрузка, поэтому могут возникнуть проблемы, например если вы будете добавлять товары в другой инфоблок, в котором вам не нужно учитывать количество на складе и уменьшать его. Вот такой вот капризый битрикс.

 

Хочу, так же, поделиться кодом, который подойдёт вам в том случае, если у вас уже есть список товаров, и вы не пользуетесь 1с Управлением торговлей, то вам этот скрипт может помочь:

 

<?

/*
* ----------------------------------------------------
* 1C-Bitrix
* ----------------------------------------------------
*/
     require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

     //
     // Загрузка модулей Битрикса
     //
     if (!CModule::IncludeModule('iblock') or !CModule::IncludeModule('catalog'))
     {
             die ('Ошибка в загрузки модулей...');
     }

     //
     // work.qtrace -> Конфигурация запроса
     //
     $e = false;
     $arFilter = array (
                         "IBLOCK_ID"   => 4,
          "IBLOCK_TYPE" => "1c_catalog",
             );

     $arSelect = array("ID");

     //
     // work.qtrace -> Запрос
     //
     $getQuery = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);

     //
     // work.qtrace -> Обновляем параметры
     //
     if ($getQuery->SelectedRowsCount() > 0)
     {
             while ($arFields = $getQuery->GetNext())
             {
                     $arProperty = array
                     (
                                 'QUANTITY_TRACE' => 'Y',
                     );

                     if (!CCatalogProduct::Update($arFields['ID'], $arProperty))
                     {
                             $e = true;
                             echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #ff0000;'>Error — ".$arFields['ID']."</p>";
                     }
             }
     }
     else
     {
             echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #ff0000;'>Not found elements...</p>";
     }

     if ($e === false)
     {
             echo "<p style='font: 1.3em Trebuchet MS, Tahoma, Sans-serif; color: #666666;'>Complete...</p>";
     }

?>

 

Этот скрипт проходит по всем товарам и ставит им галочки Уменьшать количество.

 

Если статья помогла — отблагодарите лайкнув её

 

Комментарии

comments powered by Disqus