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

update

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

Метод изменяет запись товара, обновляет внутренний кеш и запускает автоматические действия каталога. Статический метод.

Метод унаследован от \Bitrix\Catalog\Model\Entity. Класс Product дополняет базовый алгоритм проверкой полей товара, расчетом доступности и последующими действиями каталога.

Параметры

ПараметрОписание
$idИдентификатор товара. Метод приводит значение к целому числу при подготовке данных
$data Поля для изменения. Метод принимает плоский массив полей или структуру:
[
	"fields" => [
		"QUANTITY" => 5
	],
	"external_fields" => [
		"IBLOCK_ID" => 2
	],
	"actions" => []
]
В fields передают только изменяемые поля товара. Подробное описание полей массива fields смотрите в описании метода add.

Ключ external_fields может содержать IBLOCK_ID. Массив actions обычно не заполняют вручную

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

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

Особенности

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

Пример

Изменение количества товара

Пример изменяет количество заранее подготовленного тестового товара. Передайте идентификаторы товара и его инфоблока.

<?php

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

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

// Идентификатор тестового товара, количество которого можно изменить
$productId = 123;
// Идентификатор каталога товара
$iblockId = 2;

try
{
	$result = Product::update($productId, [
		'fields' => [
			'QUANTITY' => 5,
		],
		'external_fields' => [
			'IBLOCK_ID' => $iblockId,
		],
	]);

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

	echo 'Данные товара обновлены';
}
catch (Throwable $exception)
{
	echo $exception->getMessage();
}

Изменение маркировки товара

Пример устанавливает для заранее подготовленного тестового товара группу маркировки «изделия из меха». Системное поле маркировки должно существовать.

<?php

use Bitrix\Catalog\Model\Product;
use Bitrix\Catalog\Product\SystemField\MarkingCodeGroup;
use Bitrix\Catalog\Product\SystemField\Type\HighloadBlock;
use Bitrix\Main\Loader;

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

// Идентификатор тестового товара, маркировку которого можно изменить
$productId = 123;
// XML_ID группы маркировки «изделия из меха»
$markingGroupXmlId = '02';

try
{
	$markingField = MarkingCodeGroup::load();
	if ($markingField === null)
	{
		throw new RuntimeException('Системное поле маркировки товара не найдено');
	}

	$markingGroupIds = HighloadBlock::getIdByXmlId(
		(int)$markingField['SETTINGS']['HLBLOCK_ID'],
		[$markingGroupXmlId]
	);
	$markingGroupId = $markingGroupIds[$markingGroupXmlId] ?? null;

	if ($markingGroupId === null)
	{
		throw new RuntimeException('Группа маркировки не найдена');
	}

	$result = Product::update($productId, [
		'fields' => [
			$markingField['FIELD_NAME'] => $markingGroupId,
		],
	]);

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

	echo 'Маркировка товара обновлена';
}
catch (Throwable $exception)
{
	echo $exception->getMessage();
}


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