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


1С:Предприятие :: 1С:Предприятие 8 общая

v8: Умножение значений в процедуре . Help

v8: Умножение значений в процедуре . Help
Я
   PochtiUser
 
10.01.13 - 14:32
Сущ.процедура
Процедура РасчетБонусНажатие(Элемент)
    
    ПервыйПредел = 3000 ;
    ВторойПредел = 5000 ;
    ТретийПредел = 7000 ;
    СтавкаБонуса1 = 0.03 ;
    СтавкаБонуса2 = 0.05;
    СтавкаБонуса3 = 0.07;
    ДатаДок = Дата ;
    НачалоПериода =  ДобавитьМесяц((НачалоМесяца(ДатаДок)),-1);
    КонецПериода = КонецМесяца(НачалоПериода) ;
    Макет = Документы.ЧекККМ.ПолучитьМакет("Макет");
     Запрос = Новый Запрос;
     Запрос.Текст = 
        "ВЫБРАТЬ
        |    Бонусы.Период,
        |    Бонусы.НомерКарты,
        |    СУММА(Бонусы.СуммаПокупки) КАК СуммаПокупки
        |ИЗ
        |    РегистрНакопления.Бонусы КАК Бонусы
        |ГДЕ
        |    Бонусы.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |    И Бонусы.НомерКарты = &НомерКарты
        |
        |СГРУППИРОВАТЬ ПО
        |    Бонусы.Период,
        |    Бонусы.НомерКарты
        |ИТОГИ
        |    СУММА(СуммаПокупки)
        |ПО
        |    ОБЩИЕ";

      
            
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода );
    Запрос.УстановитьПараметр("НомерКарты", НомерКарты);
    Результат = Запрос.Выполнить();

    ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ВыборкаОбщийИтог.Следующий();    
    
    ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ОбщСуммаПокупок = ВыборкаОбщийИтог.СуммаПокупки ;    
    КонецЦикла;
    
         Если ОбщСуммаПокупок <= ВторойПредел
            и ОбщСуммаПокупок > ПервыйПредел Тогда 
         СуммаБонусаРасчет = ОбщСуммаПокупок * СтавкаБонуса1 ;
                 КонецЕсли ;



Нужно Вычислить СуммаБонусаРасчет   Что не так ? Прошу строго не судить я еще учусь!!
 
 
   mikecool
 
1 - 10.01.13 - 14:34
я не знаю
   PochtiUser
 
2 - 10.01.13 - 14:35
в отладчике         
СуммаБонусаРасчет    Неопределено
СтавкаБонуса1      0,03    Число
ПервыйПредел      3 000    Число
ОбщСуммаПокупок      2 800    Число
   Шапокляк
 
3 - 10.01.13 - 14:37
СуммаБонусаРасчет=0//пока не знаем сколько купили
 
   
         Если ОбщСуммаПокупок <= ВторойПредел
            и ОбщСуммаПокупок > ПервыйПредел Тогда 
         СуммаБонусаРасчет = ОбщСуммаПокупок * СтавкаБонуса1 ;
                 КонецЕсли ;
   pessok
 
4 - 10.01.13 - 14:38
дык в условие у тебя не входит, потому и неопределено
   pessok
 
5 - 10.01.13 - 14:38
(3) если сделать как в 3, то будет 0 (число), а не неопределено :)
   Шапокляк
 
6 - 10.01.13 - 14:38
+(3) видно ж в отладчике, что ОбщСуммаПокупок меньше первого предела
   Tirael
 
7 - 10.01.13 - 14:38
ПервыйПредел = 3000
ОбщСуммаПокупок      2 800
Не попадает в условие
   pessok
 
8 - 10.01.13 - 14:39
сумма 2800, а первый предел 3000, условие неполное, соответсвтенно
   pessok
 
9 - 10.01.13 - 14:39
(7) во-во
   forforumandspam
 
10 - 10.01.13 - 14:39
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ВыборкаОбщийИтог.Следующий();    
    
    ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ОбщСуммаПокупок = ВыборкаОбщийИтог.СуммаПокупки ;    
    КонецЦикла;

Что это?
 
 Рекламное место пустует
   Reset
 
11 - 10.01.13 - 14:40
(10) Хаха
   pessok
 
12 - 10.01.13 - 14:41
(10) sic! :)
   sergei123654
 
13 - 10.01.13 - 14:42
а так??

     "ВЫБРАТЬ
        |    Бонусы.НомерКарты,
        |    СУММА(Бонусы.СуммаПокупки) КАК СуммаПокупки
        |ИЗ
        |    РегистрНакопления.Бонусы КАК Бонусы
        |ГДЕ
        |    Бонусы.Период МЕЖДУ &НачалоПериода И &КонецПериода
        |    И Бонусы.НомерКарты = &НомерКарты
        |
        |СГРУППИРОВАТЬ ПО
        |    Бонусы.НомерКарты";

      
            
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода );
    Запрос.УстановитьПараметр("НомерКарты", НомерКарты);
    Результат = Запрос.Выполнить();

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     ОбщСуммаПокупок = ВыборкаОбщийИтог.СуммаПокупки ;    
    КонецЦикла;
    
         Если ОбщСуммаПокупок <= ВторойПредел
            и ОбщСуммаПокупок > ПервыйПредел Тогда 
         СуммаБонусаРасчет = ОбщСуммаПокупок * СтавкаБонуса1 ;
                 КонецЕсли ;
   pessok
 
14 - 10.01.13 - 14:44
(13) да дело в том, что он переназначает ОбщСуммаПокупок каждый раз, а не суммирует. а условие то, мб, и правильное, только надо сделать как в (3) сначала
   sergei123654
 
15 - 10.01.13 - 14:44
ОбщСуммаПокупок = ВыборкаДетальныеЗаписи.СуммаПокупки ;
   Aprobator
 
16 - 10.01.13 - 14:44
жуть какая.
   Aprobator
 
17 - 10.01.13 - 14:48
самый большой косяк в Если. Нет там Иначе.
   Aprobator
 
18 - 10.01.13 - 14:51
поскольку ПервыйПредел = 3000, а ОбщаяСуммаПокупок 2800. В условие входа нет. Код в общем кривой, но при:
...
        Если ОбщСуммаПокупок <= ВторойПредел
            и ОбщСуммаПокупок > ПервыйПредел Тогда 
         СуммаБонусаРасчет = ОбщСуммаПокупок * СтавкаБонуса1 ;
Иначе СуммаБонусаРасчет = 0;
                 КонецЕсли ;

...

кое как работать будет.
   Reset
 
19 - 10.01.13 - 14:52
(14) Он перебирает одну выборку, а присваивает значения из другой
   Aprobator
 
20 - 10.01.13 - 14:52
а в (3) уже было дано самое приемлимое решение.
   Aprobator
 
21 - 10.01.13 - 14:53
(19) судя по запросу, ему и нужно со всей выборки только одно значение.
   Aprobator
 
22 - 10.01.13 - 14:54
кривости кода в общем это не отменяет.
   PochtiUser
 
23 - 10.01.13 - 20:35
СуммаБонусаРасчет=0;
    Если ОбщСуммаПокупок <= ПервыйПредел
        и ОбщСуммаПокупок >= 0 Тогда 
        СуммаБонусаРасчет = ОбщСуммаПокупок * 0.03 ;



Так все получилось!! Всем спасибо в часности    Шапокляк !!!


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