Обнаружили вот такую не очень приятную ошибку в бонусной системе УТ11: при оформлении нескольких возвратов по одному клиенту по одному сменному отчету бонусные баллы не списываются, а добавляются.
Создадим бонусную программу лояльности:
Создадим вид карт лояльности:
Создадим вид скидки бонусом для нашего вида карт лояльности:
Сделаем разовое начисление баллов
Теперь оформим продажу - Чек ККМ на какую-либо позицию в количестве 2-х штук, и закроем смену
Посмотрим остатки бонусных баллов:
Теперь проведем последовательно два документа возврата:
После проведения возвратов остаток бонусных баллов должен вернуться в исходное состояние, но не тут-то было:
Две ошибки содержатся в процедуре ЗаполнитьБонусныеБаллыВозвратТоваровОтКлиента модуля БонусныеБаллыСервер.
Во-первых, в запросе к оплатам бонусными баллами - при учете уже выполненных возвратов - разработчики учитывают их со знаком "-":
| ТаблицаБонусныеБаллы.БонуснаяПрограммаЛояльности,
| ТаблицаБонусныеБаллы.ДатаОплаты,
| -ТаблицаБонусныеБаллы.СуммаБонусныхБаллов
| ИЗ
| Документ.ВозвратТоваровОтКлиента.ОплатаБонуснымиБаллами КАК ТаблицаБонусныеБаллы
Хотя по смыслу вот этого участка кода в запросе надо брать со знаком "+":
НоваяСтрока = ТекущийОбъект.ОплатаБонуснымиБаллами.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ, "БонуснаяПрограммаЛояльности, ДатаОплаты");
НоваяСтрока.СуммаБонусныхБаллов = -КСписанию;
Во-вторых, для пропорционального распределения возвращаемых бонусных баллов неправильно берется база распределения - берутся все товары из отчета о розничных продажах, а надо за вычетом уже сделанных возвратов.
В итоге правильный запрос должен выглядеть так:
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Сумма КАК Сумма
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,
| Таблица.ДатаНачисления КАК ДатаНачисления,
| Таблица.ДатаСписания КАК ДатаСписания,
| СУММА(Таблица.СуммаБонусныхБаллов) КАК СуммаБонусныхБаллов
|ИЗ
| (ВЫБРАТЬ
| ТаблицаБонусныеБаллы.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,
| ТаблицаБонусныеБаллы.ДатаНачисления КАК ДатаНачисления,
| ТаблицаБонусныеБаллы.ДатаСписания КАК ДатаСписания,
| ТаблицаБонусныеБаллы.СуммаБонусныхБаллов КАК СуммаБонусныхБаллов
| ИЗ
| Документ.ОтчетОРозничныхПродажах.НачислениеБонусныхБаллов КАК ТаблицаБонусныеБаллы
| ГДЕ
| ТаблицаБонусныеБаллы.Ссылка = &ДокументОснование
| И ТаблицаБонусныеБаллы.Партнер = &Партнер
| И ТаблицаБонусныеБаллы.Ссылка.Проведен
| И ТаблицаБонусныеБаллы.СуммаБонусныхБаллов > 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаБонусныеБаллы.БонуснаяПрограммаЛояльности,
| ТаблицаБонусныеБаллы.ДатаНачисления,
| ТаблицаБонусныеБаллы.ДатаСписания,
| -ТаблицаБонусныеБаллы.СуммаБонусныхБаллов
| ИЗ
| Документ.ВозвратТоваровОтКлиента.НачислениеБонусныхБаллов КАК ТаблицаБонусныеБаллы
| ГДЕ
| ТаблицаБонусныеБаллы.Ссылка.ДокументРеализации = &ДокументОснование
| И ТаблицаБонусныеБаллы.Ссылка.Партнер = &Партнер
| И ТаблицаБонусныеБаллы.Ссылка.Проведен
| И ТаблицаБонусныеБаллы.СуммаБонусныхБаллов > 0
| И ТаблицаБонусныеБаллы.Ссылка.Ссылка <> &Ссылка) КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.БонуснаяПрограммаЛояльности,
| Таблица.ДатаНачисления,
| Таблица.ДатаСписания
|
|ИМЕЮЩИЕ
| СУММА(Таблица.СуммаБонусныхБаллов) <> 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,
| Таблица.ДатаОплаты КАК ДатаОплаты,
| СУММА(Таблица.СуммаБонусныхБаллов) КАК СуммаБонусныхБаллов
|ИЗ
| (ВЫБРАТЬ
| ТаблицаБонусныеБаллы.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,
| ТаблицаБонусныеБаллы.ДатаОплаты КАК ДатаОплаты,
| ТаблицаБонусныеБаллы.СуммаБонусныхБаллов КАК СуммаБонусныхБаллов
| ИЗ
| Документ.ОтчетОРозничныхПродажах.ОплатаБонуснымиБаллами КАК ТаблицаБонусныеБаллы
| ГДЕ
| ТаблицаБонусныеБаллы.Ссылка = &ДокументОснование
| И ТаблицаБонусныеБаллы.Партнер = &Партнер
| И ТаблицаБонусныеБаллы.Ссылка.Проведен
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаБонусныеБаллы.БонуснаяПрограммаЛояльности,
| ТаблицаБонусныеБаллы.ДатаОплаты,
| ТаблицаБонусныеБаллы.СуммаБонусныхБаллов
| ИЗ
| Документ.ВозвратТоваровОтКлиента.ОплатаБонуснымиБаллами КАК ТаблицаБонусныеБаллы
| ГДЕ
| ТаблицаБонусныеБаллы.Ссылка.ДокументРеализации = &ДокументОснование
| И ТаблицаБонусныеБаллы.Ссылка.Партнер = &Партнер
| И ТаблицаБонусныеБаллы.Ссылка.Проведен
| И ТаблицаБонусныеБаллы.Ссылка.Ссылка <> &Ссылка) КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.БонуснаяПрограммаЛояльности,
| Таблица.ДатаОплаты
|
|ИМЕЮЩИЕ
| СУММА(Таблица.СуммаБонусныхБаллов) <> 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Товары.Сумма), 0) КАК Сумма,
| ЕСТЬNULL(СУММА(Товары.СуммаВДокументе), 0) КАК СуммаВДокументе
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Сумма КАК Сумма,
| 0 КАК СуммаВДокументе
| ИЗ
| Документ.ОтчетОРозничныхПродажах.Товары КАК ТаблицаТовары
| ГДЕ
| ТаблицаТовары.Ссылка = &ДокументОснование
| И ТаблицаТовары.Ссылка.Проведен
| И ТаблицаТовары.Партнер = &Партнер
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВозвратТоваровОтКлиентаТовары.Номенклатура,
| ВозвратТоваровОтКлиентаТовары.Характеристика,
| -ВозвратТоваровОтКлиентаТовары.Сумма,
| 0
| ИЗ
| Документ.ВозвратТоваровОтКлиента.Товары КАК ВозвратТоваровОтКлиентаТовары
| ГДЕ
| ВозвратТоваровОтКлиентаТовары.Ссылка.ДокументРеализации = &ДокументОснование
| И ВозвратТоваровОтКлиентаТовары.Ссылка.Проведен
| И ВозвратТоваровОтКлиентаТовары.Ссылка.Партнер = &Партнер
| И ВозвратТоваровОтКлиентаТовары.Ссылка <> &Ссылка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Товары.Номенклатура,
| Товары.Характеристика,
| 0,
| Товары.Сумма
| ИЗ
| Товары КАК Товары) КАК Товары";
Для проверки таких ошибок в базе УТ 11 к публикации приложен отчет, который ищет ситуации нескольких возвратов по одному отчету о розничных продажах:
Также приложено расширение конфигурации для исправления указанной ошибки (подключать со снятым флагом "безопасный режим").
Протестировано на релизе УТ 11.4.3.144
Для дополнительного контроля движения бонусных баллов можно воспользоваться отчетом Отчет по движениям (оборотам) бонусных баллов в УТ11
Для информирования клиентов о начислении бонусных баллов по СМС можно посмотреть публикацию СМС о начислении баллов в УТ 11.4