@smoln

Синхронизация остатков на складе торгового предложения и товара, как сделать?

Добрый день, есть автоматическая выгрузка из 1С в битрикс, но выгружаются только торговые предложения, соответственно выгружаются остатки на складах, соответсвенно остатки в товаре не появляются, везде стоит 0.
Вот код обработчика который позволит синхронизировать остатки. То есть в момент редактирования количества на складе для торгового предложения мы подсчитываем все остатки по остальным предложениям и сохраняем их у товара.
AddEventHandler("catalog", "OnStoreProductUpdate","MyOnStoreProductSave");
AddEventHandler("catalog", "OnStoreProductAdd","MyOnStoreProductSave");
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
function MyOnStoreProductSave($id, $arFields){   
   $allAmount = $arFields['AMOUNT'];
   if(CModule::IncludeModule('catalog') & CModule::IncludeModule('iblock')){
      //Получаем информацию о товаре привязанном к данному приложения, вмести с этим проверяем не является ли это товаром.      
      $arProductInfo = CCatalogSKU::GetProductInfo($arFields['PRODUCT_ID']);            
      if(is_array($arProductInfo)){
         //Получаем данные о инфоблоке Торговых предложений
         $arOffersInfo = CCatalogSKU::GetInfoByProductIBlock($arProductInfo['IBLOCK_ID']);         
         $arFilter = Array(
            'IBLOCK_ID'=>$arOffersInfo['IBLOCK_ID'],
            "PROPERTY_".$arOffersInfo['SKU_PROPERTY_ID']=>$arProductInfo['ID'],
            "!ID"=>$arFields['PRODUCT_ID']
         );
         //Получаем список торговых предложений.
         $obOffersList = CIBlockElement::GetList(Array("SORT"=>"ASC"),$arFilter,false,false,array());
         $arOffers = array();
         while($arOffers = $obOffersList->Fetch()){
            //Получаем данные об остатках на складе для торгового предложения.
            $obStoreOffer = CCatalogStoreProduct::GetList(array(), array('STORE_ID'=>$arFields['STORE_ID'], 'PRODUCT_ID' =>$arOffers['ID']), false,false,array());
            while($arStore = $obStoreOffer->Fetch()){
               $arAllStore[] = $arStore;
               $allAmount = $allAmount + $arStore['AMOUNT']; 
            }               
         }   
         //Получаем данные о складе товара и формируем массив для обновления данных.
         $obStoreProduct = CCatalogStoreProduct::GetList(array(), array('STORE_ID'=>$arFields['STORE_ID'], 'PRODUCT_ID' =>$arProductInfo['ID']), false,false,array());         
         $arFieldsProduct = array (
             'PRODUCT_ID' => $arProductInfo['ID'],
             'STORE_ID' => $arFields['STORE_ID'],
             'AMOUNT' => $allAmount,
           );
       $result = FALSE;
         if($arStoreProduct = $obStoreProduct->Fetch()){            
           $result = CCatalogStoreProduct::Update($arStoreProduct["ID"],$arFieldsProduct);                  
         }else{
           $result = CCatalogStoreProduct::Add($arFieldsProduct);         
         }       
       if($result){          
          $obStoreProduct = CCatalogStoreProduct::GetList(array(), array('PRODUCT_ID' =>$arProductInfo['ID']), false,false,array());
            while($arStoreProduct = $obStoreProduct->Fetch()){
               $allAmountProduct = $allAmountProduct + $arStoreProduct['AMOUNT'];         
             }                     
          $arFieldsProduct = array(
            "QUANTITY" => $allAmountProduct,
         ); 
          CCatalogProduct::Update ($arProductInfo['ID'],$arFieldsProduct);
       }
      }   
   }   
}


куда мне нужно впихнуть этот код, что бы остатки у товара автоматически сохранялись, не понимаю!
  • Вопрос задан
  • 1931 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы