есть 2 пути:
1) отнаследоваться от CCatalogProductProvider ( или реализовать заново IBXSaleProductProvider), перенести нужную логику из result_modifier.php в его методы и записать имя этого класса в параметрах товара в корзине. Вот кусочек кода по теме:
/* @var \Bitrix\Sale\Baset $basket */
$fields = array(
'QUANTITY' => $quantity,
'CURRENCY' => 'RUB',
'LID' => 's1',
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
);
$item = $basket->createItem('catalog', $productId);
$item->setFields($fields);
$saveResult = $basket->save();
if (!$saveResult->isSuccess()) {
echo implode('<br>', $saveResult->getErrorMessages());
}
второй путь: вместо ключа PRODUCT_PROVIDER_CLASS задать другой ключ:
$fields['CUSTOM_PRICE'] = 'Y';
и ещё потребуется заполнить ключи NAME, DETAIL_PAGE_URL и PRODUCT_XML_ID - чтобы в админке заказов отображалось как надо. Этот путь менее гибкий и имеет больше ограничений.