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

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
Наверх