Смысл подобного списания бонусных баллов УТ 11.5?
У клиента обнаружил странные движения по бонусным баллам в чеках и ОРП — при оплате баллами делается расход по «Начислено» и на такую же сумму расход по «К списанию».
Допустим было начислено 1200, к списанию 1000, остаток баллов получается 200.
Если при оплате 50 баллами УТ делает списание начисленных 50 и списание к списанию 50, получается:
начислено 1150, к списанию 950, остаток 200.
Несмотря на то, что должно быть 150, ведь баллами рассчитались.
Хуже того, остаток «К списанию» так может уйти в минус.

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

Не понимаю, как даже в такой простой теме разработчики 1С умудрились накосячить.
Среда: УТ 11.5.21.102

Свежие комментарии