Еще один глупый вопрос по запросам (расчет процентов) #402503


#0 by alxbzm
Думаю, вопрос не оригинален, но тем не менее: имеем запрос пусть, для примера, по регистру ПартииТоваров (УТ 10.3), ну допустим, такой:    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, так вот я хочу посчитать некий процент по группировкам, пусть процент будет равен (КоличествоРасход / КоличествоКонечныйОстаток). Вся засада в том, что на уровне детальных записей это будет правильный процент, а вот на уровне группировок располагаем только суммирующими итогами - в результате процент по верхним группировкам имеем неправильный. Возможно ли в запросе подсчет процентов как отношение итогов на каждом уровне группировки а не как сумма всех подчиненных? Если можно, то на примере данного запроса объясните пожалуйста.
#1 by IronDemon
#2 by alxbzm
- отлично - сработало - спасибо! Вот только запрос надо на самом деле переписать вот так:    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, А теперь вопрос для знатоков - как все это запихать в построитель так, чтобы он отбирал по значению процента не на уровне номенклатуры а на уровне склада???? По-моему никак, но может все-таки есть варианты?
#3 by IronDemon
- Разные поля для группировок  - СКД
#4 by alxbzm
про разные поля для группировок можно поподробнее пожалуйста.... пока не соображу как.
#5 by IronDemon
Расчет итогов только для уже полученных группировок Для того, чтобы значение некоторых суммируемых полей рассчитывалось только для группировок, по которым уже получены итоги, в выражении для расчета итога можно воспользоваться тем фактом, что значение полей - группировок для еще не полученных группировок равняется NULL. Пример: ВЫБРАТЬ    ОсновнойОстатки.Счет КАК Счет, ИЗ    ВЫБОР        КОГДА Валюта ЕСТЬ НЕ NULL В данном примере значение итога для поля "ВалютнаяСуммаОстаток" будет рассчитано только для итоговых записей, в которых уже получена группировка Валюта. Т.е. в итоговых записях для группировки Счет итоги по полю "ВалютнаяСуммаОстаток" будут рассчитывать только тогда, когда итоги по данной группировке будут получаться только внутри группировки Валюта. Альтернативным способом расчета итога является проверка количества различных значений в группировке и рассчет итога только для итоговых записей, в которых суммируется только одно значение группировки. Пример: ВЫБРАТЬ    ОсновнойОстатки.Счет КАК Счет, ИЗ В данном примере рассчет итого по полю "ВалютнаяСуммаОстаток" будет производиться только для тех итоговых записей, которые содержат лишь одно значение поля "Валюта".
#6 by alxbzm
о как! - спасибо огромное за подробный ответ!!!! - идею уловил - буду разбираться.
#7 by alxbzm
я извиняюсь за наглость - как посчитать итоги только на определенных уровнях я разобрался - еще раз спасибо - очень полезная информация!!! Но как теперь отфильтровать весь результат запроса по этим итогам без использования вложенных запросов? Ведь насколько я понял, отбор в запросе осуществляется на уровне детальных записей без проверки каких-либо условий по вышестоящим группировкам. Т.е. если описать словами пример из я хочу, чтобы в запросе у меня получились только склады, по которым, например, Процент > 0.5. Это возможно в самом запросе без вложенных запросов и фильтрации на уровне выборки?
#8 by IronDemon
ПроцентСклады, ПроцентТовар
#9 by alxbzm
торможу ))))) - не работает отбор - отбирает только по проценту на уровне детальной записи склад + номенклатура. помогите убогому ))))) вот переделанный запрос (убрал проверку деления на ноль для большей наглядности) - тут подсчет процента только на уровне склада добавлен. как условие правильно написать? ВЫБРАТЬ    ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,    ВЫБОР        КОГДА Номенклатура ЕСТЬ NULL    Номенклатура
#10 by alxbzm
Если вставить в этот запрос ГДЕ    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход / ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0.5 То отбираются записи где на уровне детальной записи > 0.5 а не на уровне склада
#11 by 73
Имеющие
#12 by alxbzm
ВЫБОР        КОГДА Номенклатура ЕСТЬ NULL вообще пустоту выдает...
#13 by alxbzm
блин, вот так добавил ИМЕЮЩИЕ ВЫБОР        КОГДА Номенклатура ЕСТЬ NULL
#14 by alxbzm
ну в общем вообще ни одной записи в запросе в результате
#15 by alxbzm
- ага - отвечаю сам себе - это условие означает наличие в исходнике Номенклатура = NULL, а не в группировках.... Вопрос все-таки остается открытым - как наложить условие на значение итога?
#16 by 73
Может так: ИМЕЮЩИЕ СУММА(КоличествоРасход) / СУММА(КоличествоКонечныйОстаток) > 0.5
#17 by alxbzm
пробовал - в этом случае в результат попадают записи, где на уровне Склад-Номенклатура > 0.5, т.е. по уровню детальных записей отбирает.
#18 by 73
Типа так: ВЫБРАТЬ    ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,                И Склад В (ВЫБРАТЬ Склад Из (    Выбрать                        Партии.Склад КАК Склад,        КОГДА Номенклатура ЕСТЬ NULL Можно еще временную таблицу и пакеты попробовать, чтобы быстрее работало.
#19 by alxbzm
да, так сработало... я просто думал, что можно изящнее - но в конце концов нужный результат мы добились. спасибо!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С