Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Запрос !!! Вопрос!!! Помогите советом (http://forums.kuban.ru/f1040/zapros_vopros_pomogite_sovetom-3671221.html)

PochtiUser 07.02.2013 22:53

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

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

ВыборкаОбщийИтог.Следующий();

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

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

Если ОбщСуммаПокупок <= ПервыйПредел
и ОбщСуммаПокупок >= 0 Тогда
КоэффБонуса = СтавкаБонуса1 ;
КонецЕсли ;
Если ОбщСуммаПокупок <= ВторойПредел
и ОбщСуммаПокупок >= ПервыйПредел Тогда
КоэффБонуса = СтавкаБонуса2 ;
КонецЕсли ;
Если ОбщСуммаПокупок <= ТретийПредел
и ОбщСуммаПокупок >= ВторойПредел Тогда
КоэффБонуса = СтавкаБонуса3 ;
КонецЕсли ;
Если ОбщСуммаПокупок > ТретийПредел Тогда
КоэффБонуса = СтавкаБонуса3 ;
КонецЕсли ;

СуммаБонуса = ЭлементыФормы.Всего.Значение * КоэффБонуса ;
ЭлементыФормы.СуммаБонуса.Значение = СуммаБонуса ;

Ситуация следующая Сумма считается за предыдущий месяц
но когда новый номер карты т.е. оборотов и регистраторов нету вообще!! То естественно не проходит первое сравнение общей суммы с первым пределом !! Как обыграть эту ситуацию что-бы получилось КоэффБонуса = СтавкаБонуса1

Reaper 07.02.2013 23:18

1. Огрести звездюлей на форуме.
2. Вернуть конфигурацию на полную поддержку без возможности изменений.
2. Купить книжку или записаться на курсы.
3. Не подходить к боевым базам пока не закончишь курсы или хотя бы книжку.

PochtiUser 07.02.2013 23:23

(1) А по существу??

VZ 08.02.2013 00:53

А по существу, Reaper шибко не прав: при подобном низком уровне кодирования курсы не помогут.
У самого-то от своих "Если" не поплохело?

VZ 08.02.2013 01:02

+3 И нафига в выборке формировать поля, которые не используются? Да еще группировть их :D
Не чуствуешь ты этого механизма...

VZ 08.02.2013 01:26

... И вообще весь запрос можно изобразить одной строкой.

EarlyBird 08.02.2013 04:57

запрос хорош!
сам-то с какова горада?

Пудель 08.02.2013 05:26

мамочки мои )

Jimbo 08.02.2013 13:14

перед циклом обнуляй сумму, а после цикла первое сравнение на ноль ставь - твой коэф. Лишние группировки убрать, условие ГДЕ тоже, надо вритуальную таблицу оборотов с параметрами из где использовать.

Jimbo 08.02.2013 13:16

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

Jimbo 08.02.2013 13:23

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

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

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

Если ОбщСуммаПокупок <= ПервыйПредел Тогда
КоэффБонуса = СтавкаБонуса1 ;
ИначеЕсли ОбщСуммаПокупок <= ВторойПредел Тогда
КоэффБонуса = СтавкаБонуса2 ;
ИначеЕсли ОбщСуммаПокупок <= ТретийПредел Тогда
КоэффБонуса = СтавкаБонуса3 ;
// какой тут смысл ???
ИначеЕсли ОбщСуммаПокупок > ТретийПредел Тогда
КоэффБонуса = СтавкаБонуса3 ;
КонецЕсли ;

Jimbo 08.02.2013 13:24

нет бы взять и помочь начинающему, не все же сразу стали профи

VZ 08.02.2013 14:51

11-Jimbo > И тебе про реквизиты регистров в запросах помнить :))

Jimbo 08.02.2013 15:06

не ясна ни конфа, ни структура регистра. (12) предложи свой вариант

Viking 08.02.2013 16:11

Конструкция "ВЫБОР КОГДА ТОГДА КОНЕЦ" не канает?


Текущее время: 09:37. Часовой пояс GMT +3.