Trionik, да я и не говорил что его нельзя подключать в компоненте.
ИМХО
Просто смысла в этом нет. Я предпочитаю классы подключать либо в модулях либо через composer autoload. Тогда классы и методы доступны везде без лишних include.
ognevin, ядро битрикс не статично. Его постоянно дорабатывают. Видимо разработчики Bitrix решили убрать данную настройку. Смотрю на сайт с довольно старым ядром - там эта настройка есть. А на сайте с последними обновлениями, её уже нет.
Потому что комплексный компонент каталог, и не должен выводить в корне /catalog/ товары. За вывод информации в /catalog/ отвечает файл шаблона sections.php. В нём подключается компонент bitrix:catalog.section.list.
Чтобы выводить товары в /catalog/ надо добавить подключение компонента bitrix.catalog.section в sections.php
Попробуйте зайти в любой другой инфоблок. И там переключитесь количество отображаемых элементов на странице. После откройте инфоблок с торговыми предложениями.
Пишу с телефона, поэтому только в общих чертах. Надо редактировать шаблон компонента sale.order.ajax в папке шаблона есть файл confirm.php. этот файл подключается после того как заказ уже сформирован. В arResult шаблона должны быть данные которые Вам нужны. Если их нет то по Id заказа с помощью API можно получить все что угодно.
Есть скидки от модуля catalog, а есть правила корзины от модуля sale. И купоны правил корзины редактируются через ORM класс \Bitrix\Sale\Internals\DiscountCouponTable
Я нормального решения и на чистом SQL тут не подскажу. Если n+1 запросы в решении этой задачи не допустимы, то можно решить это архитектурно. Сделать таблицу в которой хранить N последних записей для каждого родительского элемента. Но тут возможно затраты на формирование этих данных будут больше чем на n+1 запросы