Написал класс-хелпер, в котором набор методов-аналогов классов CSaleOrder и CSaleOrderPropsValue с логированием ошибок, успешного сохранения, бэктрейсом. Для логирования используется логгер monolog.

Доступны методы:

\Olegpro\Helpers\OrderHelper::cancelOrder($orderId, string $value, string $comment = '', $silenceMode = true): bool
 
\Olegpro\Helpers\OrderHelper::setOrderPropertySingle($orderId, $code, $value, $silenceMode = true): bool
 
\Olegpro\Helpers\OrderHelper::setOrderPropertyMultiply($orderId, array $values, $silenceMode = true): bool
 
\Olegpro\Helpers\OrderHelper::setOrderField($orderId, $fieldName, $fieldValue, $silenceMode = true): bool
 
\Olegpro\Helpers\OrderHelper::setShipmentField($orderId, string $deliveryCode, string $fieldName, $fieldValue, $orderDeliveryId = null, $silenceMode = true): bool

Все методы подразумевают использование вне цикла сохранения заказа (внутри каждого используется \Bitrix\Sale\Order::save). Это важно учитывать или можно получить циклический вызов обработчиков ядра (но если сильно надо — то можно и обойти).

У всех последним параметром есть $silenceMode = true. Если его передать в false, то будет выкинуто исключение OrderHelperException.

С хелпером OrderHelper этих мамонтов можно забыть:

  • CSaleOrder::PayOrder
  • CSaleOrder::CancelOrder
  • CSaleOrder::StatusOrder
  • CSaleOrderPropsValue::Add
  • CSaleOrderPropsValue::Update
  • CSaleOrder::Update

Классы OrderHelper и OrderHelperException