Почему перестали рассчитываться скидки по дисконтным картам в 1С:Розница?

Программист 1С v8.3 (Обычные формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В процессе повседневной эксплуатации торговых конфигураций на платформе 1С («Розница 1.0», «Управление торговлей 10.3») иногда возникает критическая ситуация: скидки по дисконтным картам внезапно перестают рассчитываться в чеках ККМ и документах продажи, при этом скидки без использования карт продолжают работать штатно. Программа не выдает синтаксических ошибок, тестирование и исправление информационной базы не приносит результата, а в отладчике механизм просто возвращает нулевую скидку. Разберем детально, из-за чего возникает такое поведение и как быстро локализовать и устранить сбой.

Главная причина: пустая строка в табличной части исключений

Проанализируем механику работы запросов, рассчитывающих автоматические скидки. При настройке маркетинговых акций или документов установки скидок часто задаются списки исключений (номенклатура или группы, на которые действие скидки не распространяется).

В типовых запросах конфигураций проверка исключений строится с использованием конструкции языка запросов НЕ В (&СписокИсключений). Если пользователь случайно добавил в табличную часть исключений новую строку и оставил реквизит незаполненным, в массив параметров передается Справочники.Номенклатура.ПустаяСсылка() или значение NULL.

В логике реляционных СУБД и языка запросов 1С предикат NOT IN при наличии в сравниваемом списке пустого значения возвращает отрицательный результат для всех проверяемых позиций. В результате запрос расчета скидки возвращает пустую таблицу, скидка не начисляется ни на один товар в чеке, а система не генерирует никаких ошибок в журнал регистрации.

Пошаговый поиск и устранение пустых строк

Разберем по шагам, как проверить и исправить настройки действующих скидок:

  1. Откроем документы «Установка скидок номенклатуры» или элементы справочников условий предоставления скидок, действующие на текущий момент.
  2. Проверим все табличные части, отвечающие за исключения (номенклатура, группы номенклатуры, сегменты, ценовые группы).
  3. Найдем и удалим пустые строки, в которых не выбраны конкретные элементы или группы справочников.
  4. Перезапишем и перепроведем документ. Проверим расчет скидки при считывании дисконтной карты в рабочем месте кассира (РМК).

Программная защита от появления пустых строк

Для предотвращения повторения подобных инцидентов со стороны пользователей рекомендуется добавить валидацию табличных частей перед записью документов скидок. Рассмотрим пример проверки в модуле объекта документа установки скидок:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    // Очистим пустые строки в табличной части исключений перед проведением
    Индекс = ТаблицаИсключений.Количество() - 1;
    Пока Индекс >= 0 Цикл
        Строка = ТаблицаИсключений[Индекс];
        Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
            ТаблицаИсключений.Удалить(Индекс);
        КонецЕсли;
        Индекс = Индекс - 1;
    КонецЦикла;
    
КонецПроцедуры

Другие возможные причины сбоя расчета скидок по картам

Если пустых строк в исключениях не обнаружено, проанализируем другие типовые факторы, влияющие на расчет скидок по дисконтным картам:

  1. Контроль минимальных цен продажи: если в системе включен контроль минимальных цен, и розничная цена с учетом скидки опускается ниже установленного порога (или базовая цена уже равна минимальной), расчет скидки принудительно блокируется.
  2. Ограничения по шкале накопительных порогов: для накопительных карт сумма покупок клиента может превысить максимальный порог, заданный в периодическом регистре сведений Пороги накопительных скидок. Если для диапазона «свыше максимального» строка не заведена, скидка перестает рассчитываться.
  3. Смещение точки актуальности итогов: сбой актуальности итогов в регистре накопления Продажи по дисконтным картам приводит к получению нулевой суммы накоплений. Решением является процедура пересчета итогов в режиме «Тестирование и исправление».
  4. Ограничения по времени и расписанию: в условии скидки могут быть заданы временные рамки (например, действие только до определенного часа). При наступлении указанного времени скидка отключается автоматически.
  5. Статус дисконтной карты: в справочнике Информационные карты следует проверить, активна ли карта, не установлена ли пометка аннулирования или блокировки, и корректно ли указан вид дисконтной карты.
← На главную