Тебе надо менять не стоимость доставки, а стоимость отгрузки. Как-то так:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', ['OrderEvents', 'onBeforeOrderSaveHandler']);
class OrderEvents {
public static function onBeforeOrderSaveHandler(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$shipmentCollection = $order->getShipmentCollection();
foreach($shipmentCollection as $shipment) {
if(!$shipment->isSystem())
$shipment->setBasePriceDelivery(0, false);
}
}
}
UPD
Насчет if(!$shipment->isSystem()) я не уверен, взял с компонента sale.order.ajax. Помню, что там типа две отгрузки создаются - одна системная, а вот зачем не помню.