При внедрении бонусных программ в конфигурациях «1С:Управление торговлей 11», «1С:Комплексная автоматизация 2» или «1С:ERP» специалисты часто сталкиваются с ситуацией, когда отчет «Остатки бонусных баллов» начинает показывать необъяснимые цифры. Например, после полной траты бонусов клиентом отчет может отображать остаток, хотя по логике он должен быть нулевым. Рассмотрим подробно, почему это происходит и как правильно настроить систему, чтобы данные в отчетах соответствовали действительности.
Для начала разберем, как система хранит данные о бонусах. Основным «хранилищем» является регистр накопления БонусныеБаллы. В нем присутствуют два критически важных ресурса:
Проанализируем ситуацию: когда мы начисляем клиенту 100 бонусов со сроком действия 3 месяца, система делает запись «+100» в ресурс Начислено и одновременно «+100» в ресурс К списанию. Проблема заключается в том, как эти данные интерпретирует типовой отчет.
Типовой запрос отчета «Остатки бонусных баллов» не просто берет остаток по ресурсу Начислено. Он выполняет вычисление, чтобы показать пользователю только «живые» баллы, за вычетом тех, что уже должны были сгореть. Упрощенно логика запроса выглядит следующим образом:
ВЫБРАТЬ
БонусныеБаллыОстатки.Партнер КАК Партнер,
БонусныеБаллыОстатки.НачисленоОстаток КАК НачисленоОстаток,
БонусныеБаллыОстатки.КСписаниюОстаток КАК КСписаниюОстаток,
ВЫБОР
КОГДА БонусныеБаллыОстатки.НачисленоОстаток - ВЫБОР
КОГДА БонусныеБаллыОстатки.КСписаниюОстаток > 0
ТОГДА БонусныеБаллыОстатки.КСписаниюОстаток
ИНАЧЕ 0
КОНЕЦ >= 0
ТОГДА БонусныеБаллыОстатки.НачисленоОстаток - ВЫБОР
КОГДА БонусныеБаллыОстатки.КСписаниюОстаток > 0
ТОГДА БонусныеБаллыОстатки.КСписаниюОстаток
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК ДоступныйОстаток
ИЗ
РегистрНакопления.БонусныеБаллы.Остатки(&ДатаОстатка) КАК БонусныеБаллыОстатки
Как мы видим, отчет вычитает КСписаниюОстаток из НачисленоОстаток. И здесь кроется главная ловушка. Если клиент потратил баллы до того, как они «сгорели» по сроку, ресурс Начислено уменьшается (становится 0), а ресурс К списанию остается висеть в регистре (остается 100). В итоге формула отчета начинает выдавать некорректные результаты или «хвосты», которые путают пользователей.
Многие ошибочно полагают, что если в настройках бонусной программы или скидки указан параметр «Ограничен периодом N месяцев», то система сама будет аннулировать бонусы. Это не совсем так. Эта настройка лишь управляет заполнением ресурса К списанию в момент начисления.
Чтобы ресурс К списанию очищался, а «сгоревшие» баллы реально списывались из Начислено, необходимо задействовать специальный механизм — регламентное задание. Без его работы в регистре накапливается «мусор», который и ломает типовой отчет.
Для исправления ситуации выполним следующие действия:
Перейдем в справочник «Правила начисления и списания бонусных баллов» (раздел CRM и маркетинг). Даже если вы начисляете баллы вручную или документами, вам необходимо создать хотя бы одно правило с типом «Списание». В этом правиле не обязательно указывать сложные условия, достаточно самого факта его наличия для запуска механизма очистки регистра.
После создания правила необходимо убедиться, что регламентное задание «Начисление и списание бонусных баллов» включено и имеет актуальное расписание (рекомендуется выполнять его ежедневно в ночное время). Именно это задание «схлопывает» записи по ресурсам Начислено и К списанию, когда срок жизни баллов истекает или когда они уже были потрачены.
Если система работала без регламентного задания долгое время, включение задания может не исправить старые записи за прошлые периоды. Проанализируем ситуацию в консоли запросов: если вы видите записи, где НачисленоОстаток равен 0, а КСписаниюОстаток не равен 0 по конкретному начислению, — это «битые» данные.
Для их исправления выполним «Корректировку бонусных баллов»:
КорректировкаБонусныхБаллов.К списанию для тех партнеров, по которым отчет показывает неверные данные.Важно помнить, что в 1С:УТ 11 использование бонусов со сроком годности неразрывно связано с использованием справочника ПравилаНачисленияИСписанияБонусныхБаллов. Даже если вы не используете автоматические начисления (например, ко дню рождения), правило для списания должно существовать и регулярно отрабатывать. Это гарантирует чистоту регистра накопления и корректность данных в типовом отчете.