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

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

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

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

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



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

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

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

Что это?
11 Reset
 
10.01.13
14:40
(10) Хаха
12 pessok
 
10.01.13
14:41
(10) sic! :)
13 sergei123654
 
10.01.13
14:42
а так??

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

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

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

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

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

...

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



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