[B]Евгений Жуков,[/B] ситуация:
Торговое предложение кладется в корзину с другой ценой если покупается вкупе с другим (или с несколькими другими) товарным предложением. Другие товарные предложения тоже кладутся с другой ценой (меньшей). Динамически создавать скидки очень неудобно. Нужно именно класть в корзину с другой ценой а скидку формировать именно на весь заказ (а не на каждое товарное предложение). Разумеется должно учитываться и количество товара. (например покупаем ноутбук, чем больше аксов к нему покупаем - тем дешевле цена ноутбука, тем дешевле сами аксы и тем больше скидка на весь заказ)/
Например, такие связки товаров организованы отдельным инфоблоком условно назовем его B. инфоблок ноутбуков (N) со свойством привязка к иблоку B. Иблок B имеет множ свойство - привязка к элементам иблока аксессуаров (A), где у каждого аксессуара в свойствах указан фиксированный размер скидки который он дает и на сам ноутбук и на самого себя.
на мой взгляд это решается либо:
1 обработчик OnGetOptimalPrice (если это возможно)
2 Свои колбек-функции
3 Заранее подготавливать в некой отдельной "корзине" товары бандла, и класть их в основную корзину по очереди через CSaleBasket::Add() с новыми ценами и DISCOUNT_PRICE, уникальным свойством (о котором чуть ниже), игнорируя колбеки.
первые два способа неудобны тем, что нужно выдергивать корзину, узнавая какие там товары лежат и я думаю куча других подводных камней.
В компоненте корзины, при ее редактировании пользователем, распозновать такие товары по уникальному служебному свойству товара (timestamp к примеру), если покупатель хочет изменить количество или удалить какой-то товар из корзины купленный через "отдельную корзину бандла".
минус 3го способа в том, что товары нужно класть в основную корзину одновременно. И если покупатель положит товары в корзину с отдельных страниц сайта, то будут куплены по обычной цене.
и еще один - минус в игнорировании как раз колбек-функции, то есть товар (или его цена) может оказаться неактуальным при долгой сессии и т.д.