Добрый день, есть автоматическая выгрузка из 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);
}
}
}
}
куда мне нужно впихнуть этот код, что бы остатки у товара автоматически сохранялись, не понимаю!