|   |   | 
| 
 | Кто-нибудь знает, как в запросе рассчитать процент по группировкам? #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) попробуй, напиши с нарастающим, там кода раз в десять больше будет, да еще и работать будет только на строго определенных данных ))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |