Ловим событие перед сохранением заказа OnSaleOrderBeforeSaved
и устанавливаем нужное значение свойства:
/**
* @param \Bitrix\Main\Event $event
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ObjectNotFoundException
* @throws \Exception
*/
public static function onBeforeOrderSaveHandler(\Bitrix\Main\Event $event)
{
$propertyCode = 'MY_PROPERTY_CODE';
$propertyNewValue = 'my new value';
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter('ENTITY');
/** @var \Bitrix\Sale\PropertyValue $property */
foreach ($order->getPropertyCollection() as $property) {
if ($property->getField('CODE') === $propertyCode) {
$property->setValue($propertyNewValue);
}
}
$saveResult = $order->getPropertyCollection()->save();
if (!$saveResult->isSuccess()) {
throw new \Exception(implode('; ', $saveResult->getErrorMessages()));
}
}