Также столкнулся сегодня с такой проблемой. УТ11. В файле offers.xml никогда не присутствовал тег Количество у товара, если количество равнялось 0, но при этом остаток обновлялся (устанавливался 0).
Сравнил класс импорта на текущем сайте с классом на старом сайте. Обнаружил, что раньше был вот такой код:
Код |
---|
if(isset($arXMLElement[GetMessage("IBLOCK_XML2_AMOUNT")]))
{
$arElementTmp = array();
$arElement["QUANTITY_RESERVED"] = 0;
if($arElement["ID"])
$arElementTmp = CCatalogProduct::GetById($arElement["ID"]);
if(is_array($arElementTmp) && !empty($arElementTmp) && isset($arElementTmp["QUANTITY_RESERVED"]))
$arElement["QUANTITY_RESERVED"] = $arElementTmp["QUANTITY_RESERVED"];
$arElement["QUANTITY"] = $this->ToFloat($arXMLElement[GetMessage("IBLOCK_XML2_AMOUNT")]) - doubleval($arElement["QUANTITY_RESERVED"]);
}
else
$arElement["QUANTITY"] = 0;
|
а сейчас вот такой:
Код |
---|
if(array_key_exists($this->mess["IBLOCK_XML2_AMOUNT"], $arXMLElement))
{
$arElementTmp = array();
$arElement["QUANTITY_RESERVED"] = 0;
if($arElement["ID"])
$arElementTmp = CCatalogProduct::GetById($arElement["ID"]);
if(is_array($arElementTmp) && !empty($arElementTmp) && isset($arElementTmp["QUANTITY_RESERVED"]))
$arElement["QUANTITY_RESERVED"] = $arElementTmp["QUANTITY_RESERVED"];
$arElement["QUANTITY"] = $this->ToFloat($arXMLElement[$this->mess["IBLOCK_XML2_AMOUNT"]]) - doubleval($arElement["QUANTITY_RESERVED"]);
}
|
Т.е. раньше при отсутствии тега количества, количество устанавливалось 0.
файл /bitrix/modules/iblock/classes/general/cml2.php функция ImportElementPrices
На время существования проблемы поправил код по аналогии со старым, всё работает.