Чтобы избежать такой ситуации, надо сформулировать условия таким образом, чтобы множество товаров-условий для промо-подарка не пересекалось с множеством промо-подарков.
Это можно сделать несколькими способами:
- конкретно перечислить в условии артикулы промо-подарков в качестве исключений (использовать предикат-отрицание)
- создать в магазине скрытый товарный раздел для промо-подарков, и поместить туда промо-подарки, не исключая их из их текущего раздела, а затем в условии для получения промо-подарков указать скрытый раздел в качестве исключения (использовать предикат-отрицание).
- и т.п.