![]() |
|
Распределение суммы в запросе (включая отклонение) | ☑ | ||
---|---|---|---|---|
0
Бешеная Нога
23.07.14
✎
12:17
|
Имеется таблица с базой для распределения.
ВЫБРАТЬ "Иванов" КАК Контрагент, 3 КАК СуммаПродажи ПОМЕСТИТЬ ТаблицаДляРаспределения ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Петров", 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Сидоров", 3 ; Предложите оптимальный запрос для распределения определенной суммы на контрагентов в соответствии с базой распределения (включая копейки отклонения, например при распределении суммы 10 на предложенную базу) |
|||
1
mikecool
23.07.14
✎
12:19
|
зачем именно запрос?
один проход циклом и все |
|||
2
piter3
23.07.14
✎
12:19
|
в запросе?удачи
|
|||
3
Бешеная Нога
23.07.14
✎
12:19
|
(1) вся фишка именно в запросе
|
|||
4
VRednaia
23.07.14
✎
12:24
|
(0) Я делала так.
1я таблица - список того, что нужно распределять 2я таблица - база распределения 3я таблица - 1я распределенная по базе 4я таблица - 3я свернутая по столбцам первой 5я таблица - разница 4й и 1й (отклонения) 6я таблица - отклонения отнесенные на случайно выбранную строку 1й таблицы 7я таблица - объединение 3ей и 6й |
|||
5
mikecool
23.07.14
✎
12:27
|
(3) имхо - рациональности в этом нет
|
|||
6
Бешеная Нога
23.07.14
✎
12:32
|
(4) Запрос который распределяет и получает сумму отклонения:
ВЫБРАТЬ "Иванов" КАК Контрагент, 3 КАК СуммаПродажи ПОМЕСТИТЬ ТаблицаДляРаспределения ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Петров", 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Сидоров", 3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ТаблицаДляРаспределения.СуммаПродажи) КАК СуммаПродажиИтого, &СуммаРаспределения КАК СуммаРаспределения ПОМЕСТИТЬ ТаблицаИтогов ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаДляРаспределения.Контрагент КАК Контрагент, ТаблицаДляРаспределения.СуммаПродажи КАК СуммаПродажи, ТаблицаИтогов.СуммаПродажиИтого КАК СуммаПродажиИтого, ТаблицаИтогов.СуммаРаспределения КАК СуммаРаспределения, Выразить(ТаблицаДляРаспределения.СуммаПродажи / ТаблицаИтогов.СуммаПродажиИтого * ТаблицаИтогов.СуммаРаспределения КАК Число(15,2)) КАК СуммаРаспределенная ПОМЕСТИТЬ ТаблицаРаспределенияСОтклонениями ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИтогов КАК ТаблицаИтогов ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Максимум(ТаблицаРаспределенияСОтклонениями.СуммаРаспределения) - СУММА(ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная) КАК СуммаОтклонения ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями |
|||
7
Бешеная Нога
23.07.14
✎
12:33
|
а вот как потом правильно и красиво включить сумму отклонения на максимульную распределенную сумму?
|
|||
8
Timon1405
23.07.14
✎
12:37
|
(5) Иногда действительно "так нужно". Например, в УПП в документе УчетФактическихДанныхПоБюджетам берется текст запрос а из справочника, пихается в построитель, там все считается. Тут прописывать постобработку для отдельных статей как-то не комильфо.
|
|||
9
mikecool
23.07.14
✎
12:38
|
(7) выбрать максимум суммы и по нему отбирать
|
|||
10
VRednaia
23.07.14
✎
12:39
|
ВЫБРАТЬ
"Иванов" КАК Контрагент, 3 КАК СуммаПродажи ПОМЕСТИТЬ ТаблицаДляРаспределения ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Петров", 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Сидоров", 3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ТаблицаДляРаспределения.СуммаПродажи) КАК СуммаПродажиИтого, &СуммаРаспределения КАК СуммаРаспределения ПОМЕСТИТЬ ТаблицаИтогов ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаДляРаспределения.Контрагент КАК Контрагент, ТаблицаДляРаспределения.СуммаПродажи КАК СуммаПродажи, ТаблицаИтогов.СуммаПродажиИтого КАК СуммаПродажиИтого, ТаблицаИтогов.СуммаРаспределения КАК СуммаРаспределения, ВЫРАЗИТЬ(ТаблицаДляРаспределения.СуммаПродажи / ТаблицаИтогов.СуммаПродажиИтого * ТаблицаИтогов.СуммаРаспределения КАК ЧИСЛО(15, 2)) КАК СуммаРаспределенная ПОМЕСТИТЬ ТаблицаРаспределенияСОтклонениями ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИтогов КАК ТаблицаИтогов ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ТаблицаРаспределенияСОтклонениями.СуммаРаспределения) - СУММА(ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная) КАК СуммаОтклонения ПОМЕСТИТЬ ВТ_Отклонения ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ТаблицаДляРаспределения.Контрагент) КАК Контрагент, МАКСИМУМ(ВТ_Отклонения.СуммаОтклонения) КАК СуммаОтклонения ПОМЕСТИТЬ ВТ_РаспределенныеОтклонения ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения, ВТ_Отклонения КАК ВТ_Отклонения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаРаспределенияСОтклонениями.Контрагент, ТаблицаРаспределенияСОтклонениями.СуммаПродажи, ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная ПОМЕСТИТЬ ВТ_Итоговая ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТ_РаспределенныеОтклонения.Контрагент, NULL, СУММА(ВТ_РаспределенныеОтклонения.СуммаОтклонения) ИЗ ВТ_РаспределенныеОтклонения КАК ВТ_РаспределенныеОтклонения СГРУППИРОВАТЬ ПО ВТ_РаспределенныеОтклонения.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Итоговая.Контрагент, СУММА(ВТ_Итоговая.СуммаПродажи) КАК СуммаПродажи, СУММА(ВТ_Итоговая.СуммаРаспределенная) КАК СуммаРаспределенная ИЗ ВТ_Итоговая КАК ВТ_Итоговая СГРУППИРОВАТЬ ПО ВТ_Итоговая.Контрагент |
|||
11
Бешеная Нога
23.07.14
✎
12:40
|
Есть такой вариант:
ВЫБРАТЬ "Иванов" КАК Контрагент, 3 КАК СуммаПродажи ПОМЕСТИТЬ ТаблицаДляРаспределения ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Петров", 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Сидоров", 3 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(ТаблицаДляРаспределения.СуммаПродажи) КАК СуммаПродажиИтого, &СуммаРаспределения КАК СуммаРаспределения ПОМЕСТИТЬ ТаблицаИтогов ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаДляРаспределения.Контрагент КАК Контрагент, ТаблицаДляРаспределения.СуммаПродажи КАК СуммаПродажи, ТаблицаИтогов.СуммаПродажиИтого КАК СуммаПродажиИтого, ТаблицаИтогов.СуммаРаспределения КАК СуммаРаспределения, ВЫРАЗИТЬ(ТаблицаДляРаспределения.СуммаПродажи / ТаблицаИтогов.СуммаПродажиИтого * ТаблицаИтогов.СуммаРаспределения КАК ЧИСЛО(15, 2)) КАК СуммаРаспределенная ПОМЕСТИТЬ ТаблицаРаспределенияСОтклонениями ИЗ ТаблицаДляРаспределения КАК ТаблицаДляРаспределения ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаИтогов КАК ТаблицаИтогов ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ТаблицаРаспределенияСОтклонениями.СуммаРаспределения) - СУММА(ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная) КАК СуммаОтклонения ПОМЕСТИТЬ ТаблицаОтклонения ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная) КАК СуммаРаспределенная, МАКСИМУМ(ТаблицаОтклонения.СуммаОтклонения) КАК СуммаОтклонения ПОМЕСТИТЬ ТаблицаМаксимальныхСуммИОтклонений ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОтклонения КАК ТаблицаОтклонения ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(ТаблицаРаспределенияСОтклонениями.Контрагент) КАК Контрагент, ТаблицаМаксимальныхСуммИОтклонений.СуммаРаспределенная КАК СуммаРаспределенная, ТаблицаМаксимальныхСуммИОтклонений.СуммаРаспределенная + ТаблицаМаксимальныхСуммИОтклонений.СуммаОтклонения КАК НоваяСуммаРаспределения ПОМЕСТИТЬ ТаблицаДляИзмененияРаспределения ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаМаксимальныхСуммИОтклонений КАК ТаблицаМаксимальныхСуммИОтклонений ПО ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная = ТаблицаМаксимальныхСуммИОтклонений.СуммаРаспределенная СГРУППИРОВАТЬ ПО ТаблицаМаксимальныхСуммИОтклонений.СуммаРаспределенная, ТаблицаМаксимальныхСуммИОтклонений.СуммаРаспределенная + ТаблицаМаксимальныхСуммИОтклонений.СуммаОтклонения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаРаспределенияСОтклонениями.Контрагент КАК Контрагент, ТаблицаРаспределенияСОтклонениями.СуммаПродажи КАК СуммаПродажи, ТаблицаРаспределенияСОтклонениями.СуммаРаспределения КАК СуммаРаспределения, ВЫБОР КОГДА ТаблицаДляИзмененияРаспределения.Контрагент ЕСТЬ NULL ТОГДА ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная ИНАЧЕ ТаблицаДляИзмененияРаспределения.НоваяСуммаРаспределения КОНЕЦ КАК СуммаРаспределенная ИЗ ТаблицаРаспределенияСОтклонениями КАК ТаблицаРаспределенияСОтклонениями ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДляИзмененияРаспределения КАК ТаблицаДляИзмененияРаспределения ПО ТаблицаРаспределенияСОтклонениями.Контрагент = ТаблицаДляИзмененияРаспределения.Контрагент И ТаблицаРаспределенияСОтклонениями.СуммаРаспределенная = ТаблицаДляИзмененияРаспределения.СуммаРаспределенная Но может можно как-то красивее? |
|||
12
VRednaia
23.07.14
✎
12:44
|
(11) мне нравится
|
|||
13
Бешеная Нога
23.07.14
✎
12:48
|
(2) на счет удачи см (11)
|
|||
14
Бешеная Нога
23.07.14
✎
12:49
|
хочется перфекционизма...
|
|||
15
piter3
23.07.14
✎
12:50
|
(13)ужас.а так твое дело
|
|||
16
Бешеная Нога
23.07.14
✎
13:20
|
(1) и кстати "обход в цикле" - это для неудачников имхо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |