Документация для разработчиков
Темная тема

update

\Bitrix\Main\ORM\Data\UpdateResult public static
\Bitrix\Catalog\Model\Price::update(
	$id,
	array $data
);

Метод изменяет цену товара, обновляет внутренний кеш и запускает автоматические действия каталога. Статический метод. Метод унаследован от \Bitrix\Catalog\Model\Entity.

Параметры

ПараметрОписание
$idИдентификатор цены. Значение должно быть больше нуля
$dataПлоский массив изменяемых полей или структура с ключами fields, external_fields и actions. Подробное описание полей массива fields смотрите в описании метода add. Границы количества нужно передавать вместе

Возвращаемое значение

Метод возвращает объект \Bitrix\Main\ORM\Data\UpdateResult. Через объект можно проверить результат и получить ошибки.

Особенности

Если меняется цена или валюта, метод пересчитывает значение в базовой валюте. Когда подготовка данных добавила внутренние действия, после успешного изменения метод может пересчитать цены по наценкам и минимальные цены родительского товара. При запуске этих действий метод обновляет время изменения элемента инфоблока.

Пример

Пример кода временно меняет существующую тестовую цену и восстанавливает исходное значение и валюту.

<?php

use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;

if (!Loader::includeModule('catalog'))
{
	throw new RuntimeException('Не удалось подключить модуль catalog');
}

// Идентификатор тестовой цены, которую можно временно изменить
$priceId = 123;
// Код существующей валюты для временного значения
$currency = 'RUB';

try
{
	$originalPrice = Price::getRow([
		'select' => ['ID', 'PRICE', 'CURRENCY'],
		'filter' => ['=ID' => $priceId],
	]);

	if ($originalPrice === null)
	{
		echo 'Цена не найдена';
		return;
	}

	$updateResult = Price::update($priceId, [
		'fields' => [
			'PRICE' => 1000,
			'CURRENCY' => $currency,
		],
	]);

	if (!$updateResult->isSuccess())
	{
		echo implode(PHP_EOL, $updateResult->getErrorMessages());
		return;
	}

	echo 'Цена временно изменена' . PHP_EOL;

	$restoreResult = Price::update($priceId, [
		'fields' => [
			'PRICE' => $originalPrice['PRICE'],
			'CURRENCY' => $originalPrice['CURRENCY'],
		],
	]);

	if (!$restoreResult->isSuccess())
	{
		echo implode(PHP_EOL, $restoreResult->getErrorMessages());
		return;
	}

	echo 'Исходная цена восстановлена';
}
catch (Throwable $exception)
{
	echo $exception->getMessage();
}


© «Битрикс», 2001-2026, «1С-Битрикс», 2026