Я так предполагаю, что для этих целей у Битрикса был Index (Bitrix\Sale\Discount\Index\IndexElementTable) и соответственно Manager для работы с ним, но вот пока не находил места где это бы применялось

Вообще все зависит от скидок которые Вы используете.
Мы для себя постановили что сделаем собственный загрузчик скидок (из xlsx файлов) и параллельное столкнулись с той же задачей что и Вы - выводить скидки.
Поэтому при загрузке мы сами записываем в свою таблицу участвующие в скидках товары.
Чисто теоретически для этого можно и b_sale_discount_entities использовать - там же хранятся поля по которым можно найти скидки.
Цитата |
---|
Евгений Плашенко написал: 1. Возможно ли в CIBlockElement::GetList получить помимо базовой цены ещё и цену со скидкой, чтобы не запрашивать её на втором шаге? |
Даже если и возможно, то не думаю что это будет сильно отличаться от getOptimalPrice
Цитата |
---|
Евгений Плашенко написал: 2. Реально ли получить какой-то параметр, говорящий, что на товар действует скидка, чтобы не вытягивать цены, а просто отбросить товары без скидки? |
Многие правила корзины действуют только в корзине, ну или через getOptimalPrice
Цитата |
---|
Евгений Плашенко написал: 3. Возможно имеется более изящный способ реализации. |
Хотелось бы верить

Тем более что подобие индексатора, то уже есть

Если подытожить мой сумбурный спич, то мы сделали следующее:
1) Акции у нас фиксированные и загружаются из xlsx-файла. Создали загрузчик, который читает структуру из файла в нашу структуру и из нее уже конвертирует в скидку битрикса.
2) Акция может быть перезагружена и частично изменена, так что написали парсер из битриксовой скидки (структура же известна) в нашу структуру
3) Акция может быть исправлена через прямое редактирование правила корзины битрикса, поэтому сейчас в работе стоит скрипт который будет срабатывать после редактирования правила и перегенерировать в нашу структуру обновляя правило.
Ну и естественно при сохранении нашей структуры мы пишем полные реляции какой товар в какой акции участвует
