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

OnBeforePriceUpdate

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

bool функция-обработчик( 
 int ID, 
 array &arFields
)

OnBeforePriceUpdate - событие, вызываемое перед обновлением существующей цены. На входе получает ID цены и ссылку на массив полей.

Событие устарело. Будет работать только если в настройках модуля Каталог включена опция Включить поддержку устаревших событий.

Параметры

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

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

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

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

Может вернуть false, если нужно воспрепятствовать обновлению. В противном случае нужно вернуть значение true.

Смотрите также

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

//Обработчик запрещает менять валюту цен на любую, кроме рублей
function NationalCurrency(ID, &arFields)  
{  
   if (array_key_exists('CURRENCY', $arFields) && $arFields['CURRENCY'] != 'RUB')  
{   
      return false;  
   } 

   else 
   { 
      return true; 
   }
}



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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Valentin Borisenko
Цитата
Событие устарело. Будет работать только если в настройках модуля Каталог включена опция Включить поддержку устаревших событий.

Примеры новых событий в ядре D7 описаны в документации https://dev.1c-bitrix.ru/community/blogs/vad/orm.php. Это теперь универсальный механизм.
2
Нагонов Сергей
Тоже самое событие, но через d7 (Что, кстати, и рекомендуется)
Код
/**
 * @see CProductEventsHandler::OnBeforePriceUpdate()
 */
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
   'catalog', '\Bitrix\Catalog\Price::OnBeforeUpdate',
   ['CProductEventsHandler', 'OnBeforePriceUpdate']
);

class CProductEventsHandler {

   public static function OnBeforePriceUpdate(Bitrix\Main\Event $event) {
      
      $arParams = $event->getParameters();
      $obResult = new \Bitrix\Main\Entity\EventResult();
      
      // Если надо изменить поле/поля, на примере автоматического перерасчета цены
      if ($arParams['CURRENCY'] == 'USD') {
         
         $arFields = [];
         $arFields['CURRENCY'] = 'RUB';
         $arFields['PRICE'] = CCurrencyRates::ConvertCurrency($arParams['fields']['PRICE'], 'USD', 'RUB');
      
         $obResult->modifyFields($arFields);
      }
      // Если надо запретить обновление
      if ($isSomethingWrong) {
         
         $obResult->addError(
            new \Bitrix\Main\Entity\EntityError('')
         );
      }

      return $obResult;
   }
}
© «Битрикс», 2001-2020, «1С-Битрикс», 2020
Наверх