Не изменяется цена Bitrix "Bitrix\Catalog\Model\Price::update"
Всем привет!
Была поставлена задача, сделать синхронизацию цен и остатков товаров с api производителя
Для обновления цены использую вот такой код
$arFieldsPrice = Array(
"PRODUCT_ID" => $ID, //ID добавленного товара
"CATALOG_GROUP_ID" => 1, //ID типа цены
"PRICE" => $price_rozn, //значение цены
"CURRENCY" => !$currency ? "RUB" : $currency, // валюта
);
//Смотрим установлена ли цена адля данного товара
$dbPrice = \Bitrix\Catalog\Model\Price::getList([
"filter" => array(
"PRODUCT_ID" => $ID,
"CATALOG_GROUP_ID" => 1
)
]);
if ($arPrice = $dbPrice->fetch()) {
//Если цена установлена, то обновляем
$result = \Bitrix\Catalog\Model\Price::update($arPrice["ID"], $arFieldsPrice, true);
if ($result->isSuccess()){
echo "Обновили цену у товара у элемента каталога " . $ID . " Цена " . $price_rozn . PHP_EOL;
} else {
echo "Ошибка обновления цены у товара у элемента каталога " . $ID . " Ошибка " . $result->getErrorMessages() . PHP_EOL;
}
}else{
//Если цены нет, то добавляем
$result = \Bitrix\Catalog\Model\Price::add($arFieldsPrice, true);
if ($result->isSuccess()){
echo "Добавили цену у товара у элемента каталога " . $ID . " Цена " . $price_rozn . PHP_EOL;
} else {
echo "Ошибка добавления цены у товара у элемента каталога " . $ID . " Ошибка " . $result->getErrorMessages() . PHP_EOL;
}
}
Цены обновились, но цена в корзине стала 0... Пробовал CIBlock::clearIblockTagCache() не помогло, так же сбрасывая кеш ничего не происходит.
Кто нибудь сталкивался с подобной проблемой?
Ответы (1 шт):
Автор решения: Дмитрий Иванов
→ Ссылка
Попробуй так
$obPrice = new CPrice;
// обновляем цены
$arFieldsForPrice = [
"PRODUCT_ID" => $elementId, // id именно элемента, а не торгового предложения
"CATALOG_GROUP_ID" => 1,
"PRICE" => $arElement["#"]["price"][0]["#"],
"CURRENCY" => "RUB",
];
$resPrice = $obPrice->GetList([], ["PRODUCT_ID" => $elementId, "CATALOG_GROUP_ID" => 1]);
if ($arPrice = $resPrice->Fetch()) {
pre($arPrice);
$obPrice->Update($arPrice["ID"], $arFieldsForPrice);
} else {
$obPrice->Add($arFieldsForPrice);
}