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

Add

Описание и параметры

mixed CPrice::Add(
	array arFields,
	boolean $boolRecalc = false
);

Метод добавляет новое ценовое предложение (новую цену) для товара. Нестатический метод.

Метод работоспособен, но устарел. Вместо него рекомендуется использовать \Bitrix\Catalog\Model\Price::add.

Параметры вызова

ПараметрОписание С версии
arFields Ассоциативный массив параметров ценового предложения. Допустимые параметры:
  • PRODUCT_ID - код товара или торгового предложения (ID элемента инфоблока).;
  • EXTRA_ID - код наценки;
  • CATALOG_GROUP_ID - код типа цены;
  • PRICE - цена;
  • CURRENCY - валюта цены (обязательный параметр);
  • QUANTITY_FROM - количество товара, начиная с приобретения которого действует эта цена;
  • QUANTITY_TO - количество товара, при приобретении которого заканчивает действие эта цена.

    Примечание: если необходимо, чтобы значения параметров QUANTITY_FROM и QUANTITY_TO не были заданы, необходимо указать у них в качестве значения false либо не задавать поля QUANTITY_FROM и QUANTITY_TO в Update вообще.

Если установлен код наценки, то появляется возможность автоматически пересчитывать эту цену при изменении базовой цены или процента наценки.
boolRecalc Пересчитать цены. Если передать true, то включается механизм пересчета цен.
Если добавляется базовая цена (в CATALOG_GROUP_ID задан тип цен, являющийся базовым), будут пересчитаны все остальные типы цен для товара, если у них задан код наценки.
Если добавляется иная цена (не базовая), для нее задан код наценки и уже существует базовая - значения PRICE и CURRENCY буду пересчитаны.
Необязательный параметр. По умолчанию - false.
11.0.0

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

Возвращает идентификатор добавленной цены в случае успешного сохранения и false - в противном случае. Для получения детальной информации об ошибке следует вызвать $APPLICATION->GetException().

События

Метод работает с событиями OnBeforePriceAdd и OnPriceAdd.

Примечания:
  • Если параметр $boolRecalc = true, все равно необходимо указывать цену и валюту (в том случае, когда тип цены - не базовый). Если существует базовая цена, значения цены и валюты будут изменены, если нет - код наценки будет изменен на ноль.
  • В обработчиках события OnBeforePriceAdd можно запретить или, наоборот, включить пересчет цены. За это отвечает ключ RECALC массива данных, передаваемых в обработчик.

Примеры использования

Добавление цены

<?
// Установим для товара с кодом 15 цену типа 2 в значение 29.95 USD
$PRODUCT_ID = 15;
$PRICE_TYPE_ID = 2;

$arFields = Array(
	"PRODUCT_ID" => $PRODUCT_ID,
	"CATALOG_GROUP_ID" => $PRICE_TYPE_ID,
	"PRICE" => 29.95,
	"CURRENCY" => "USD",
	"QUANTITY_FROM" => 1,
	"QUANTITY_TO" => 10
);

$res = CPrice::GetList(
	array(),
	array(
		"PRODUCT_ID" => $PRODUCT_ID,
		"CATALOG_GROUP_ID" => $PRICE_TYPE_ID
	)
);

if ($arr = $res->Fetch())
{
	CPrice::Update($arr["ID"], $arFields);
}
else
{
	CPrice::Add($arFields);
}
?>

Добавление цены с пересчетом (базовая существует)

$PRODUCT_ID = 15;
$PRICE_TYPE_ID = 2;
$arFields = array(
	"PRODUCT_ID" => $PRODUCT_ID,
	"CATALOG_GROUP_ID" => $PRICE_TYPE_ID,
	"PRICE" => 0,
	"CURRENCY" => "RUB",
	"EXTRA_ID" => 4,
	"QUANTITY_FROM" => 1,
	"QUANTITY_TO" => 10
);


$obPrice = new CPrice();
$obPrice->Add($arFields,true);

Величина и валюта цены будет расчитана исходя из наценки и базовой цены.



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Вячеслав Докукин
Сообщение не промодерировано, возможны ошибки и неточности.
Не рабочий этот код и пример, ни этот
CPrice::Add
ни
\Bitrix\Catalog\Model\Price::add

работает только этот!
$obPrice = new CPrice();
$obPrice->Add($arFields,true);
1
cd rww
Если нужно изменить цены внутри события добавления элемента, следует обращаться к решению из этой статьи https://dev.1c-bitrix.ru/community/webdev/user/17090/blog/12425/
15
Антон Долганин
Если вы вроде бы все делаете правильно, а цена не показывается в форме в админке, проверьте, существует ли товар для данного элемента (CCatalogProduct). Без него цены не будут показываться в форме.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх