Имя: Пароль:
1C
1С v8
Нарастающий итог по числу (без периодов)
0 newbling
 
10.08.16
12:14
Доброго времени суток. Решил запилить 'свой' ABC анализ, т.е. выделить номенклатуру, приносящую наибольшую часть прибыли. Нашёл кучу инфы по нарастающему итогу, где связь устанавливается по Период >= Период, но в данном случае, мне бы хотелось просто просуммировать по возрастанию значения доли прибыли. Вот что сейчас есть:

ВЫБРАТЬ
    СУММА(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот) КАК ОбщееКоличество,
    СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) КАК ОбщаяВыручка,
    СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот - ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) КАК ОбщаяПрибыль,
    1 КАК Поле1
ПОМЕСТИТЬ ОбщаяСумма
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    СУММА(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот) КАК КоличествоОборот,
    СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) КАК СуммаВыручкиОборот,
    СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот - ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) КАК Прибыль,
    ВыручкаИСебестоимостьПродажОбороты.ПериодМесяц,
    1 КАК Поле1
ПОМЕСТИТЬ Суммы
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты,
    ОбщаяСумма КАК ОбщаяСумма

СГРУППИРОВАТЬ ПО
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ВыручкаИСебестоимостьПродажОбороты.ПериодМесяц
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Суммы.АналитикаУчетаНоменклатурыНоменклатура КАК Номенклатура,
    Суммы.КоличествоОборот,
    Суммы.СуммаВыручкиОборот,
    Суммы.Прибыль,
    Суммы.ПериодМесяц,
    ВЫБОР
        КОГДА ЕСТЬNULL(ОбщаяСумма.ОбщееКоличество, 0) = 0
            ТОГДА 0
        ИНАЧЕ Суммы.КоличествоОборот / ОбщаяСумма.ОбщееКоличество
    КОНЕЦ КАК ДоляКоличества,
    ВЫБОР
        КОГДА ЕСТЬNULL(ОбщаяСумма.ОбщаяВыручка, 0) = 0
            ТОГДА 0
        ИНАЧЕ Суммы.СуммаВыручкиОборот / ОбщаяСумма.ОбщаяВыручка
    КОНЕЦ КАК ДоляВыручки,
    ВЫБОР
        КОГДА ЕСТЬNULL(ОбщаяСумма.ОбщаяПрибыль, 0) = 0
            ТОГДА 0
        ИНАЧЕ Суммы.Прибыль / ОбщаяСумма.ОбщаяПрибыль
    КОНЕЦ КАК ДоляПрибыли
ИЗ
    Суммы КАК Суммы
        ЛЕВОЕ СОЕДИНЕНИЕ ОбщаяСумма КАК ОбщаяСумма
        ПО Суммы.Поле1 = ОбщаяСумма.Поле1

Так вот, в итоге, у нас есть табличка с Номенклатурой, количеством, долей количества, выручкой, долей выручки и прибылью, долей прибыли.

Я попробовал выделить в вт Номенклатуру, долю прибыли, соединить вт саму с собой так:
ВЫБРАТЬ
    СуммыИДоли.Номенклатура,
    СуммыИДоли.ДоляПрибыли,
    СУММА(ТеЖеСуммыИДоли.ДоляПрибыли) КАК ДоляПрибылиНарастающийИтог
ИЗ
    СуммыИДоли КАК СуммыИДоли
        ЛЕВОЕ СОЕДИНЕНИЕ СуммыИДоли КАК ТеЖеСуммыИДоли
        ПО СуммыИДоли.ДоляПрибыли >= ТеЖеСуммыИДоли.ДоляПрибыли
            И СуммыИДоли.Номенклатура = ТеЖеСуммыИДоли.Номенклатура

СГРУППИРОВАТЬ ПО
    СуммыИДоли.Номенклатура,
    СуммыИДоли.ДоляПрибыли

Но в итоге, нарастающий итог получается равен доле прибыли. Я так понимаю, что это из-за того, что я соединяю по суммируемому полю.

Как быть?
1 newbling
 
10.08.16
12:25
пардон, я зря там установил
И СуммыИДоли.Номенклатура = ТеЖеСуммыИДоли.Номенклатура

Без него что-то такое считается. Надо ещё раскурить устраивает ли меня >= или надо <= или просто > или < в
ПО СуммыИДоли.ДоляПрибыли >= ТеЖеСуммыИДоли.ДоляПрибыли
2 newbling
 
10.08.16
12:29
Да, прикольный метод соединения самого с собой, конечный правильный результат для такой задачи:

ВЫБРАТЬ
    СуммыИДоли.Номенклатура,
    СуммыИДоли.ДоляПрибыли,
    СУММА(ТеЖеСуммыИДоли.ДоляПрибыли) КАК ДоляПрибыли1
ИЗ
    СуммыИДоли КАК СуммыИДоли
        ЛЕВОЕ СОЕДИНЕНИЕ СуммыИДоли КАК ТеЖеСуммыИДоли
        ПО СуммыИДоли.ДоляПрибыли <= ТеЖеСуммыИДоли.ДоляПрибыли

СГРУППИРОВАТЬ ПО
    СуммыИДоли.Номенклатура,
    СуммыИДоли.ДоляПрибыли
3 newbling
 
10.08.16
12:30
Молодец (0)

"Сам себя не похвалишь - никто не похвалит" ©
4 aleks_default
 
10.08.16
12:48
я бы точно за такое не похвалил
5 newbling
 
10.08.16
12:56
(4) жалко, что в инете не передаётся интонация - это сарказм.

Ну а вообще, по поводу оптимизации, говорите
6 newbling
 
16.08.16
09:52
Ещё можно в СКД использовать ВычислитьВыражение() =D
7 Dragner
 
16.08.16
10:07
Опиши логику, чего хочешь добиться. Потому как ABC анализом пока не "пахнет".