|   |   | 
| 
 | Распределение суммы в запросе (включая отклонение) | ☑ | ||
|---|---|---|---|---|
| 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) и кстати "обход в цикле" - это для неудачников имхо     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |