Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Распределить пропорционально базе показатель в запросе без потери копеек (http://forums.kuban.ru/f1040/raspredelit-_proporcional-no_baze_pokazatel-_v_zaprose_bez_poteri_kopeek-7133389.html)

Morons 31.08.2015 20:38

Распределить пропорционально базе показатель в запросе без потери копеек
 
Когда высчитываешь какие-либо показатели в запросах,то теряются копейки. Например за счет деления Показатель1/База*Показатель2.
Есть какой-нибудь готовый алгоритм по их вытаскиванию и дораспределению запросом же?

Reaper 31.08.2015 22:05

0-Дебилы > Пакетный запрос дополни:
1. Сумма(БазаРаспределения) - Сумма(РезультатРаспределения)
2. Выбери запись из результата распределения с наибольшим значением показателя
3. К результату 2-го шага добавь копейки первого
4. Выбери из результата распределения все записи кроме той, что взял на втором шаге и объедини с результатом 3-го шага.

Morons 31.08.2015 22:16

1 Спасибо!
1-й этап сделал, а нет ли примера для 2-го шага?
Просто чтобы выбрать записи с максимальным значением показателя, я сначала делаю запрос на максимальные значения по необходимым группировкам, а потом к нему джойню сами записи. Несколько смущает ставить условия соединения по цифрам, или это нормально? Чето запутался

Morons 01.09.2015 02:13

(1) Reaper и те кто знает , не подскажите как сделать 2-й этап в плане запросов. А то у меня выходят соединения по цифрам, такого просто не делал доселе,но не вижу варианта, ведь вроде это сомнительная операция.
Помогите плиз, ведь мы Дебилы же:)

Климов Сергей 01.09.2015 09:46

Первый запрос помещаешь во временную таблицу. Второй запрос делаешь к этой таблице.

DaCAT 01.09.2015 10:15

3-Дебилы >Сортировка по убыванию, выбрать 1 строку. Элементарно же.

Morons 01.09.2015 12:50

(4) это понятно, вопрос как выбрать максимумы
(5) так мне надо не одну строку , а top 1 в рамках каждой группировки

VZ 01.09.2015 15:03

Имеется Сумма для распределения (S), И сумма показателей (долей) для распределения(P=p1+p2+p3+...).
После каждой итерации (s1=S/P*p1) уменьшаем сумму для распределения (S=S-s1) и Сумму показателей (P=P-p1).
Последнему в списке щедро отдаем весь кошелек.

Morons 01.09.2015 16:13

(7) запросом хочу

VZ 01.09.2015 16:54

8-Дебилы > Используй ТЗ как временную таблицу.

Morons 01.09.2015 17:18

(9) я в скд делаю, поэтому хотелось бы обойтись одними запросами.
Иначе придется выгружать результат в ТЗ, а потом опять подсовывать в скд

Morons 01.09.2015 17:53

ну короче сделал все, работает.
только вот соединения в запросе по числам - подозреваю, что это не очень нормально

Morons 01.09.2015 21:57

Добавил еще один показатель и обнаружилась лажа. В рамках группировки может быть несколько одинаковых значений и все они одинаково максимальные.Тогда он списывает дельту со всех таких строк. Т.е. критерия максимальности недостаточно, требуется выбрать еще и Первые 1 среди максимальных в каждой группе.Не пойму, как это реализовать?
Дайте плиз пример запросов лучше, может в типовой где-то есть такое?

Reaper 01.09.2015 22:47

12-Дебилы > Либо делай нумерацию для предварительного результата распределения, либо бей СКД на 2 набора данных так, чтобы ведущий собрал список группировок и суммы к распределению, а ведомый делал распределение в рамках одной группировки.

Morons 02.09.2015 22:15

короче кинул на Максимум(Показатель), где показатель - объект справочник ссылка.Тем самым получился какбе Top 1 в рамках группировки


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