Вход | Регистрация

1С:Предприятие ::

Метки: 

Реализация кэшбэка

Я
   prilforreal
 
27.11.17 - 12:26
Пишу обработку для начисления кэшбэка. Принцип работы такой: раз в месяц будет запускаться, выбирать документы по этим контрагентам, считать сумму из этих доков, и начислять процент на баланс, пока пишу  код для расчета этого процента, но появилась проблема, запускаю обработку для проверки, жму выполнить, никакой реакции... смотрю отладчиком, доходит до цикла и завершает процедуру, помогите разобраться будьте добры)

Процедура КнопкаВыполнитьНажатие(Кнопка)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    ТабДок = Новый ТабличныйДокумент;
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ДилЗаказ.Дилер,
        |    СУММА(ДилЗаказ.Сумма_Итог) КАК Сумма_Итог
        |ИЗ
        |    Документ.ДилЗаказ КАК ДилЗаказ
        |ГДЕ
        |    ДилЗаказ.Проведен = &Истина
        |    И ДилЗаказ.Дилер.Кэшбэк = &Истина
        |    И ДилЗаказ.Дата МЕЖДУ &НачПериода И &КонПериода
        |
        |СГРУППИРОВАТЬ ПО
        |    ДилЗаказ.Дилер";
    
    Запрос.УстановитьПараметр("Истина", Истина);
    Запрос.УстановитьПараметр("КонПериода", ТекущаяДата());
    НачПериода = НачалоДня(ТекущаяДата()-86400);
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    СуммаКБ=0;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СуммаКБ=(ВыборкаДетальныеЗаписи.Сумма_Итог/100)*6;
        Сообщить(СуммаКБ);
    КонецЦикла;
    
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры
 
  Рекламное место пустует
   Numerus Mikhail
 
1 - 27.11.17 - 12:28
Сообщить(РезультатЗапроса.Пустой());
   Джинн
 
2 - 27.11.17 - 12:28
И что, по не выполненным заказам тоже откаты начисляете?
   Numerus Mikhail
 
3 - 27.11.17 - 12:30
НачПериода = НачалоДня(ТекущаяДата()-86400);
это не месяц, а день, если что. Возможно у вас нет документов за последний день
   Рэйв
 
4 - 27.11.17 - 12:31
(0)>>Реализация кэшбэка
В цивилизованном мире это называется ретро-бонус:-)
   prilforreal
 
5 - 27.11.17 - 12:34
(2) Есть проверка на проведенные документы, если документ проведен, значит заказ выполнен) (3) Ух, точно, какой невнимательный я, сейчас исправлю и посмотрю) (4) Нууууу! Где цивилизация а где мы?))
   vde69
 
6 - 27.11.17 - 12:37
что-либо начислять на основании документов (вне этого документа) - грубейшая методологическая ошибка.

надо так
1. сделать новый регистр "УчитываемыеПродажи"
2. подписку на событие по документам где делаем проводки по этому регистру
3. уже на основании движений в этом регистре начисляем бонусы/откаты

плюс такого подхода - можно часть документов отсторнировать по этому одному документу, или наоборот ввести начальные остатки...
   wondkind
 
7 - 27.11.17 - 12:46
&Истина - да, это сильно
   vde69
 
8 - 27.11.17 - 12:51
еще один момент - при изменений в контрагенте реквизита "Кэшбэк" у тебя сразу начнет считать для всех документов.

Так не делается... например мы до 1 января начисляли, потом с 1 января по 1 июля не начисляем а дальше опять начисляем... твоя схема такое не сможет реализовать...
   Адинэснег
 
9 - 27.11.17 - 13:11
(0)ты регистр накопления не думал под задачу сделать?
помимо начисления, надо еще и списывать баланс
   prilforreal
 
10 - 27.11.17 - 14:55
(9) Кэшбэк только начисляет, есть регистр расчеты, в него и запишу, тз толкового не дали, так что думаю еще придется поплясать. (8) Как так для всех? Только для ДилЗаказа, в запросе же написано)
 
  Рекламное место пустует
   prilforreal
 
11 - 27.11.17 - 14:56
(8) Каждого пятого числа будет начислять:
C 5ого ноября по 5 декабря, с 5 декабря по 5 января итд
   Numerus Mikhail
 
12 - 27.11.17 - 14:59
(11) Имеется в виду, что если вы подключили контрагента к кэшбеку 1 декабря, твоя система посчитает все документы за период с 5 ноября по 1 декабря тоже. Это, вероятнее всего, неверно.
   prilforreal
 
13 - 27.11.17 - 15:27
(6) Спасибо, обработка будет создавать в цикле документ оплата, через который и будет происходить начисление. (12) Отличное замечание! Спасибо! Поработаю над этим!
   3achem
 
14 - 27.11.17 - 16:44
(0) Устанавливай дату непосредственно, если не понимаешь как высчитывать её программно. Убери из запроса проверку на &Истина.

Это:
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

На это:
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать().Выгрузить();

Это 
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

На это
Для каждого НСтр ИЗ ВыборкаДетальныеЗаписи Цикл

Отладчиком намного легче смотреть таблицу значения, не правда ли? 

И предварительно, чтобы понять, что у тебя возвращает запрос прогони его через консоль.

Бонус:
Это можно сделать в запросе:
СуммаКБ=(ВыборкаДетальныеЗаписи.Сумма_Итог/100)*6;
   3achem
 
15 - 27.11.17 - 16:46
(14) И добавлю, правильно данные хранить в регистрах, чем обращаться к документам.


Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует