Запрос !!! Вопрос!!! Помогите советом Вот запрос ПервыйПредел = 3000 ; ВторойПредел = 5000 ; ТретийПредел = 10000 ; СтавкаБонуса1 = 0.03 ; СтавкаБонуса2 = 0.05; СтавкаБонуса3 = 0.07; ДатаДок = Дата ; НачалоПериода = ДобавитьМесяц((НачалоМесяца(ДатаДок)),-1); КонецПериода = КонецМесяца(НачалоПериода) ; Макет = Документы.ЧекККМ.ПолучитьМакет("Макет"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Бонусы.Период, | Бонусы.НомерКарты, | Бонусы.СуммаПокупки КАК СуммаПокупки | |ИЗ | РегистрНакопления.Бонусы КАК Бонусы |ГДЕ | Бонусы.Период МЕЖДУ &НачалоПериода И &КонецПериода | И Бонусы.НомерКарты = &НомерКарты | |СГРУППИРОВАТЬ ПО | Бонусы.Период, | Бонусы.НомерКарты, | Бонусы.СуммаПокупки |ИТОГИ | СУММА(СуммаПокупки) |ПО | ОБЩИЕ"; Запрос.УстановитьПараметр("КонецПериода", КонецПериода); Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода ); Запрос.УстановитьПараметр("НомерКарты", НомерКарты); Результат = Запрос.Выполнить(); ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаОбщийИтог.Следующий(); ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбщСуммаПокупок = ВыборкаОбщийИтог.СуммаПокупки ; КонецЦикла; Если ОбщСуммаПокупок <= ПервыйПредел и ОбщСуммаПокупок >= 0 Тогда КоэффБонуса = СтавкаБонуса1 ; КонецЕсли ; Если ОбщСуммаПокупок <= ВторойПредел и ОбщСуммаПокупок >= ПервыйПредел Тогда КоэффБонуса = СтавкаБонуса2 ; КонецЕсли ; Если ОбщСуммаПокупок <= ТретийПредел и ОбщСуммаПокупок >= ВторойПредел Тогда КоэффБонуса = СтавкаБонуса3 ; КонецЕсли ; Если ОбщСуммаПокупок > ТретийПредел Тогда КоэффБонуса = СтавкаБонуса3 ; КонецЕсли ; СуммаБонуса = ЭлементыФормы.Всего.Значение * КоэффБонуса ; ЭлементыФормы.СуммаБонуса.Значение = СуммаБонуса ; Ситуация следующая Сумма считается за предыдущий месяц но когда новый номер карты т.е. оборотов и регистраторов нету вообще!! То естественно не проходит первое сравнение общей суммы с первым пределом !! Как обыграть эту ситуацию что-бы получилось КоэффБонуса = СтавкаБонуса1 |
1. Огрести звездюлей на форуме. 2. Вернуть конфигурацию на полную поддержку без возможности изменений. 2. Купить книжку или записаться на курсы. 3. Не подходить к боевым базам пока не закончишь курсы или хотя бы книжку. |
(1) А по существу?? |
А по существу, Reaper шибко не прав: при подобном низком уровне кодирования курсы не помогут. У самого-то от своих "Если" не поплохело? |
+3 И нафига в выборке формировать поля, которые не используются? Да еще группировть их :D Не чуствуешь ты этого механизма... |
... И вообще весь запрос можно изобразить одной строкой. |
запрос хорош! сам-то с какова горада? |
мамочки мои ) |
перед циклом обнуляй сумму, а после цикла первое сравнение на ноль ставь - твой коэф. Лишние группировки убрать, условие ГДЕ тоже, надо вритуальную таблицу оборотов с параметрами из где использовать. |
Запрос.Текст = "ВЫБРАТЬ | Бонусы.Период, | СУММА(Бонусы.СуммаПокупки) КАК СуммаПокупки | |ИЗ | РегистрНакопления.БонусыОбороты(&НачалоПериода,&КонецПериода, НомерКарты = &НомерКарты) КАК Бонусы | | |СГРУППИРОВАТЬ ПО | Бонусы.Период |ИТОГИ | СУММА(СуммаПокупки) |ПО | ОБЩИЕ"; |
ОбщСуммаПокупок = 0; ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Если ВыборкаОбщийИтог.Следующий() тогда ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбщСуммаПокупок = ВыборкаОбщийИтог.СуммаПокупки; КонецЦикла; конецЕсли; Если ОбщСуммаПокупок <= ПервыйПредел Тогда КоэффБонуса = СтавкаБонуса1 ; ИначеЕсли ОбщСуммаПокупок <= ВторойПредел Тогда КоэффБонуса = СтавкаБонуса2 ; ИначеЕсли ОбщСуммаПокупок <= ТретийПредел Тогда КоэффБонуса = СтавкаБонуса3 ; // какой тут смысл ??? ИначеЕсли ОбщСуммаПокупок > ТретийПредел Тогда КоэффБонуса = СтавкаБонуса3 ; КонецЕсли ; |
нет бы взять и помочь начинающему, не все же сразу стали профи |
11-Jimbo > И тебе про реквизиты регистров в запросах помнить :)) |
не ясна ни конфа, ни структура регистра. (12) предложи свой вариант |
Конструкция "ВЫБОР КОГДА ТОГДА КОНЕЦ" не канает? |
Текущее время: 09:37. Часовой пояс GMT +3. |