При оформлении возврата товаров от розничного покупателя (особенно если возврат происходит не в день покупки, а в последующие дни) пользователи часто сталкиваются с ситуацией, когда по регистру БонусныеБаллы формируются только приходные движения или не происходит сторнирование начисленных при продаже бонусов. В результате на карте лояльности покупателя зависают баллы за возвращенный товар. Разберем подробно, почему возникает эта проблема, как устроены внутренние механизмы программы и какими способами можно восстановить корректный баланс баллов.
Проанализируем ключевые факторы, из-за которых программа не может автоматически рассчитать сумму баллов к списанию:
Возврат товаров от покупателя создан вручную, а табличная часть заполнена товарами без привязки к конкретному чеку продажи, система не может сопоставить позиции с историей начислений. В этом случае служебная табличная часть Бонусные баллы к начислению остается пустой.КлючСвязи может нарушиться, из-за чего модуль расчета скидок пропускает такие строки.Бонусные баллы к начислению, а не в основной остаточный регистр. При возврате на следующий день система пытается скорректировать именно отложенные баллы, а не остаток активных бонусов.Отчет о розничных продажах. Если при архивации очистились данные бонусных таблиц, штатный алгоритм не сможет определить исходную ставку начисления.Разберем по шагам регламент оформления возврата товара не в день покупки:
Возврат товаров от покупателя, подставит карту лояльности и заполнит табличную часть Бонусные баллы к начислению отрицательными суммами (сторно).Товары в каждой строке была сохранена ссылка на исходный Чек ККМ. Не будем удалять и повторно добавлять строки вручную, чтобы не разрушить системные ключи связи.БонусныеБаллы: в нем должна появиться расходная запись на сумму начисленных ранее бонусов.Если возврат заполнен по чеку, но баллы все равно не сторнируются, проверим состояние исходных данных. Выясним причину, выполнив запрос к табличным частям исходного чека продажи через консоль запросов:
ВЫБРАТЬ
Чек.Ссылка,
Чек.Проведен,
Чек.КартаЛояльности,
Чек.ДоговорЭквайринга
ИЗ
Документ.ЧекККМ КАК Чек
ГДЕ
Чек.Ссылка = &Ссылка;
ВЫБРАТЬ
ТЧТовары.НомерСтроки,
ТЧТовары.Номенклатура,
ТЧТовары.Количество,
ТЧТовары.Сумма,
ТЧТовары.КлючСвязи
ИЗ
Документ.ЧекККМ.Товары КАК ТЧТовары
ГДЕ
ТЧТовары.Ссылка = &Ссылка;
ВЫБРАТЬ
ТЧБонусы.НомерСтроки,
ТЧБонусы.БонуснаяПрограммаЛояльности,
ТЧБонусы.СуммаБонусов,
ТЧБонусы.КлючСвязи
ИЗ
Документ.ЧекККМ.БонусныеБаллыКНачислению КАК ТЧБонусы
ГДЕ
ТЧБонусы.Ссылка = &Ссылка;
Если третья таблица (БонусныеБаллыКНачислению) в исходном чеке пуста, алгоритм возврата не сможет определить, какую именно сумму бонусов требуется сторнировать. В таком случае программисту поможет точка останова в общем модуле БонусныеБаллыСервер.СторнироватьБонусныеБаллыПоДокументу, где можно отследить пошаговое выполнение сторнирования.
Если документ возврата уже проведен, кассовая смена закрыта, а перепроведение документов задним числом невозможно, скорректируем баланс штатным документом:
БонусныеБаллы примет правильное значение.Если в системе используется отложенное применение скидок и бонусов, проверим расписание фоновых заданий:
Расчет бонусных баллов и Начисление и списание бонусных баллов.