|
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. В условие входа нет. Код в общем кривой, но при:
кое как работать будет. |
|||
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 ; Так все получилось!! Всем спасибо в часности Шапокляк !!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |