|
Кто-нибудь знает, как в запросе рассчитать процент по группировкам? #2 | ☑ | ||
---|---|---|---|---|
0
Unkas
04.03.14
✎
12:19
|
Вот первая часть данного вопроса, вразумительного ответа на который так никто и не дал: v8: Кто-нибудь знает, как в запросе расчитать процент по группировкам?
Есть примитивный запрос, скажем, к виртуальной таблице Хозрасчетный.Обороты. Получаем Сумму оборота в разрезе периода (месяц) и, скажем, пары субконто: контрагент и договор. Выводим итоги по группировкам. Вопрос - как посчитать процент внутри нужной группировки в самом запросе, не прибегая к средствам СКД или программной обработке вывода? |
|||
1
МихаилМ
04.03.14
✎
12:22
|
запрос для получения данных, а не для представления.
|
|||
2
Unkas
04.03.14
✎
12:23
|
Забыл добавить повторное предупреждение для первонахов:
1. СКД не предлагать 2. Посмотреть <ОтчетName> не предлагать 3. Предлагать решение, про которое вы точно знаете, что работает. |
|||
3
piter3
04.03.14
✎
12:24
|
разрешите исполнять
|
|||
4
Unkas
04.03.14
✎
12:25
|
(1) Спасибо, капитан Очевидность.
Вы нарушили третью директиву и будете аннигилированы) (3) Вот зачем люди спамят в такие темы... потом же черта с два найдешь нужную информацию. |
|||
5
piter3
04.03.14
✎
12:26
|
(4)я все нахожу ЧЯДТ
|
|||
6
Unkas
04.03.14
✎
13:22
|
(5) Возьми с полки пирожок.
А я апну тему и подожду пока найдется тот, кто сможет ответить. Этот вопрос был задан на собеседовании во франче и поставил меня в тупик. Но я верю, что ответ на него должен существовать. Если только они не избавляются таким образом от нежелательных кандидатов, конечно))) |
|||
7
IKSparrow
04.03.14
✎
13:26
|
(6) Это же франч. Им бы лишь кандидатов понагибать.
|
|||
8
vicof
04.03.14
✎
13:27
|
(6) Это франч тупость проверял. ПРоверил...
|
|||
9
DS
04.03.14
✎
13:28
|
Посчитать то можно, но как минимум постобработку по округлению и погрешностям надо делать.
|
|||
10
Ненавижу 1С
гуру
04.03.14
✎
13:29
|
держи вариант
ВЫБРАТЬ ПродажиОбороты.СтоимостьОборот ПОМЕСТИТЬ ОбщийИтог ИЗ РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Период КАК Период, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.Организация КАК Организация, ПродажиОбороты.СтоимостьОборот КАК Стоимость, ПродажиОбороты.СтоимостьОборот / ОбщийИтог.СтоимостьОборот * 100 КАК Процент, ОбщийИтог.СтоимостьОборот КАК СтоимостьОбщая ИЗ РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Месяц, ) КАК ПродажиОбороты, ОбщийИтог КАК ОбщийИтог ИТОГИ СУММА(Стоимость), СУММА(Стоимость) / МАКСИМУМ(СтоимостьОбщая) * 100 КАК Процент ПО ОБЩИЕ, Период, Организация, Контрагент |
|||
11
Ненавижу 1С
гуру
04.03.14
✎
13:31
|
(10) не то
|
|||
12
Леша1с
04.03.14
✎
13:32
|
(0) без постобработки в 1с - никак.
Окон-то нет в запросе. (10) и как же получить по иерархии проценты? |
|||
13
Starhan
04.03.14
✎
13:37
|
В подзапросе или запросом раньше две таблицы соединяешь
с группировкой и с общим итогом (группировка только суммы) (тут 1 строчка) и делишь сумму группировки на общую сумму |
|||
14
Unkas
04.03.14
✎
13:42
|
(10) Гениально! Работает. Именно то, что надо.
Сначала берем общие итоге по нужному уровню группировки (по месяцами, например), затем уже получаем основную таблицу и присоединяем к каждой строчке соответствующее значение итоговой суммы по текущему периоду (или нужной группировке). И для каждой строки можем получать процент - делением текущей суммы на итоговую по группировке. Спасибо тебе, добрый человек. Вот за что люблю интернет - можно быстро найти интересующую идею/информацию. Видимо, во франче действительно не нужны такие тугодумы как я - а нужны ребята, которые в интернет пишут, а не читают его в случаях, когда возникает потребность в извращениях. ВЫБРАТЬ ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот, ХозрасчетныйОбороты.Период ПОМЕСТИТЬ ВТ_ОбщийИтог ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, Месяц, Счет В ИЕРАРХИИ (&Счет), , , , ) КАК ХозрасчетныйОбороты СГРУППИРОВАТЬ ПО ХозрасчетныйОбороты.СуммаОборот, ХозрасчетныйОбороты.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ХозрасчетныйОбороты.Период КАК Период, ХозрасчетныйОбороты.Субконто1 КАК Субконто1, ХозрасчетныйОбороты.Субконто2, ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот, ВТ_ОбщийИтог.СуммаОборот КАК ОборотЗаВесьМесяц, ХозрасчетныйОбороты.СуммаОборот / ВТ_ОбщийИтог.СуммаОборот * 100 КАК Процент ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, Месяц, Счет В ИЕРАРХИИ (&Счет), , , , ) КАК ХозрасчетныйОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОбщийИтог КАК ВТ_ОбщийИтог ПО ХозрасчетныйОбороты.Период = ВТ_ОбщийИтог.Период СГРУППИРОВАТЬ ПО ХозрасчетныйОбороты.Период, ХозрасчетныйОбороты.Субконто1, ХозрасчетныйОбороты.СуммаОборот, ХозрасчетныйОбороты.Субконто2, ВТ_ОбщийИтог.СуммаОборот ИТОГИ СУММА(СуммаОборот), МАКСИМУМ(ОборотЗаВесьМесяц), СУММА(Процент) ПО Период, Субконто1 Там еще округлять надо, красивость наводить, но общая идея ясна. |
|||
15
ptiz
04.03.14
✎
13:52
|
(14) Ну если только % от общего итога - это слишком просто.
Ты еще посчитай по договорам внутри контрагентов, а потом отсортируй по убыванию и добавь нарастающий итог :) |
|||
16
Unkas
04.03.14
✎
14:01
|
(15) Ну, по договорам оно и так считается - т.к. договоры, это Субконто2, то бишь считается процент на всех уровнях, которые ниже выбранного за 100% (месяц в нашем случае).
Сортировка по убыванию легко ставится в Порядке по полю Процент. А вот с нарастающим... геморройно, конечно, но путь решения все равно виден: присоеденить таблицу с оборотами по месяцам к каждой строчке. И через ВЫБОР КОГДА ТОГДА плюсовать в оборот нужные итоги по месяцам, в зависимости от текущего месяца в строчке. Писать код не буду =) |
|||
17
Леша1с
05.03.14
✎
14:55
|
(16) попробуй, напиши с нарастающим, там кода раз в десять больше будет, да еще и работать будет только на строго определенных данных ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |