Битрикс авто установка флага уменьшать количество при заказе

При выгрузке из 1с в битриксе флаг уменьшать количество при заказе автоматически не проставляется, что приводит к потери актульности оперативных остатков  в битриксе + проблемы с выгрузкой в yandex market и другие торговые площадки.

Решение будет следующее

 

1. вариант кода класический

необходимо в файле init.php добавить код который будет срабатывать при добавление продукта (через событиеOnProductAdd):

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

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

} 
?>

2. вариант кода

Создаем файл update_q.php со следующим содержанием
<?
global $DB;
$DB->Query("UPDATE `apple`.`b_catalog_product` SET `QUANTITY_TRACE` = 'Y' WHERE `b_catalog_product`.`QUANTITY_TRACE` = 'N'");
?>

3. вариант кода

Создаем файл update_q.php со следующим содержанием

<?
/*
 * ----------------------------------------------------
 * 1C-Bitrix
 * ----------------------------------------------------
 * by Limarc /Alexander Lobashev/
 * (c) 2007-2009 by Limarc
 * _link: http://www.free-lance.ru/users/Limarc
 * ----------------------------------------------------
 * Index: work.qtrace.php
 * Version Number: 1.0
 * ----------------------------------------------------
 */
     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 &mdash; ".$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>";
     }

?>

Подключаем его выполнение после обмена с 1с, в файле /bitrix/admin/1c_exchange.php, в итоге мой файл 1c_exchange.php выглядит следующим образом

<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/admin/1c_exchange.php"); 
require_once($_SERVER["DOCUMENT_ROOT"]."/include/update_q.php");
?>

P.S.

Если решение не отрабатывает тогда вставляем код с update_q.php напрямую в /bitrix/modules/sale/admin/1c_exchange.php.

2 мысли о “Битрикс авто установка флага уменьшать количество при заказе”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *