Почему типовой отчет по остаткам бонусных баллов в 1С:УТ 11 показывает неверные данные?

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

При внедрении бонусных программ в конфигурациях «1С:Управление торговлей 11», «1С:Комплексная автоматизация 2» или «1С:ERP» специалисты часто сталкиваются с ситуацией, когда отчет «Остатки бонусных баллов» начинает показывать необъяснимые цифры. Например, после полной траты бонусов клиентом отчет может отображать остаток, хотя по логике он должен быть нулевым. Рассмотрим подробно, почему это происходит и как правильно настроить систему, чтобы данные в отчетах соответствовали действительности.

Анализируем механику работы регистра «Бонусные баллы»

Для начала разберем, как система хранит данные о бонусах. Основным «хранилищем» является регистр накопления БонусныеБаллы. В нем присутствуют два критически важных ресурса:

  1. Начислено — это реальный остаток баллов, которые клиент получил и может использовать.
  2. К списанию — технический ресурс, в который записывается сумма баллов, имеющих ограниченный срок действия.

Проанализируем ситуацию: когда мы начисляем клиенту 100 бонусов со сроком действия 3 месяца, система делает запись «+100» в ресурс Начислено и одновременно «+100» в ресурс К списанию. Проблема заключается в том, как эти данные интерпретирует типовой отчет.

Разбираем логику типового запроса отчета

Типовой запрос отчета «Остатки бонусных баллов» не просто берет остаток по ресурсу Начислено. Он выполняет вычисление, чтобы показать пользователю только «живые» баллы, за вычетом тех, что уже должны были сгореть. Упрощенно логика запроса выглядит следующим образом:


ВЫБРАТЬ
    БонусныеБаллыОстатки.Партнер КАК Партнер,
    БонусныеБаллыОстатки.НачисленоОстаток КАК НачисленоОстаток,
    БонусныеБаллыОстатки.КСписаниюОстаток КАК КСписаниюОстаток,
    ВЫБОР
        КОГДА БонусныеБаллыОстатки.НачисленоОстаток - ВЫБОР
                КОГДА БонусныеБаллыОстатки.КСписаниюОстаток > 0
                    ТОГДА БонусныеБаллыОстатки.КСписаниюОстаток
                ИНАЧЕ 0
            КОНЕЦ >= 0
            ТОГДА БонусныеБаллыОстатки.НачисленоОстаток - ВЫБОР
                    КОГДА БонусныеБаллыОстатки.КСписаниюОстаток > 0
                        ТОГДА БонусныеБаллыОстатки.КСписаниюОстаток
                    ИНАЧЕ 0
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК ДоступныйОстаток
ИЗ
    РегистрНакопления.БонусныеБаллы.Остатки(&ДатаОстатка) КАК БонусныеБаллыОстатки

Как мы видим, отчет вычитает КСписаниюОстаток из НачисленоОстаток. И здесь кроется главная ловушка. Если клиент потратил баллы до того, как они «сгорели» по сроку, ресурс Начислено уменьшается (становится 0), а ресурс К списанию остается висеть в регистре (остается 100). В итоге формула отчета начинает выдавать некорректные результаты или «хвосты», которые путают пользователей.

Выясняем причину: отсутствие регламентного списания

Многие ошибочно полагают, что если в настройках бонусной программы или скидки указан параметр «Ограничен периодом N месяцев», то система сама будет аннулировать бонусы. Это не совсем так. Эта настройка лишь управляет заполнением ресурса К списанию в момент начисления.

Чтобы ресурс К списанию очищался, а «сгоревшие» баллы реально списывались из Начислено, необходимо задействовать специальный механизм — регламентное задание. Без его работы в регистре накапливается «мусор», который и ломает типовой отчет.

Пошаговое решение проблемы

Для исправления ситуации выполним следующие действия:

Шаг 1. Создание правила начисления и списания

Перейдем в справочник «Правила начисления и списания бонусных баллов» (раздел CRM и маркетинг). Даже если вы начисляете баллы вручную или документами, вам необходимо создать хотя бы одно правило с типом «Списание». В этом правиле не обязательно указывать сложные условия, достаточно самого факта его наличия для запуска механизма очистки регистра.

Шаг 2. Настройка регламентного задания

После создания правила необходимо убедиться, что регламентное задание «Начисление и списание бонусных баллов» включено и имеет актуальное расписание (рекомендуется выполнять его ежедневно в ночное время). Именно это задание «схлопывает» записи по ресурсам Начислено и К списанию, когда срок жизни баллов истекает или когда они уже были потрачены.

Шаг 3. Исправление накопленных ошибок («хвостов»)

Если система работала без регламентного задания долгое время, включение задания может не исправить старые записи за прошлые периоды. Проанализируем ситуацию в консоли запросов: если вы видите записи, где НачисленоОстаток равен 0, а КСписаниюОстаток не равен 0 по конкретному начислению, — это «битые» данные.

Для их исправления выполним «Корректировку бонусных баллов»:

  1. Создадим документ КорректировкаБонусныхБаллов.
  2. Выберем вид операции, позволяющий напрямую редактировать регистр.
  3. Вручную обнулим остатки по ресурсу К списанию для тех партнеров, по которым отчет показывает неверные данные.

Резюме для администратора

Важно помнить, что в 1С:УТ 11 использование бонусов со сроком годности неразрывно связано с использованием справочника ПравилаНачисленияИСписанияБонусныхБаллов. Даже если вы не используете автоматические начисления (например, ко дню рождения), правило для списания должно существовать и регулярно отрабатывать. Это гарантирует чистоту регистра накопления и корректность данных в типовом отчете.

← На главную