Имя: Пароль:
1C
1С v8
Как сделать в запросе ABC классификацию товаров внутри групп
0 rikodroo
 
26.01.16
09:31
Привет! Подскажите пожалуйста, может кто делал подобное: номенклатура лежит в папках (родитель номенклатуры) и нужно внутри каждой папки произвести классификацию АВС. Причем лучше это всё в одном запросе реализовать.
1 FIXXXL
 
26.01.16
09:33
(0) в СКД есть для ресурсов подсчет АВС
2 rikodroo
 
26.01.16
09:40
(1) Это функция какая-то СКД-шная?
3 FIXXXL
 
26.01.16
09:41
(2) да
4 FIXXXL
 
26.01.16
09:41
в справке посмотри
5 rikodroo
 
26.01.16
09:45
(4) пишут, что вроде начиная с 8.3 оно работает (((
6 FIXXXL
 
26.01.16
09:49
(5) да, 8.3 надо

КлассификацияABC(Значение, КоличествоГрупп, ПроцентыДляГрупп, ИмяГруппировки)
7 rikodroo
 
27.01.16
08:36
Вот такое вот накатал, может кому-то пригодится (обратите только внимание, что методик много разных бывает для классификации по АВС):

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВРТ_ПродажиНом.НоменклатураРодитель,
    СУММА(ВРТ_ПродажиНом.КоличествоОборот) КАК КоличествоОборот,
    СУММА(ВРТ_ПродажиНом.СуммаОборот) КАК СуммаОборот
ПОМЕСТИТЬ ВРТ_ПродажиНГ
ИЗ
    ВРТ_ПродажиНом КАК ВРТ_ПродажиНом

СГРУППИРОВАТЬ ПО
    ВРТ_ПродажиНом.НоменклатураРодитель
;

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

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВРТ_ПродажиНом
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВРТ_ПродажиНГ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВРТ_ОснованаяТаблица.Номенклатура,
    ВРТ_ОснованаяТаблица.НоменклатураРодитель,
    ВРТ_ОснованаяТаблица.КоличествоОборотПоПозиции,
    ВРТ_ОснованаяТаблица.СуммаОборотПоПозиции,
    ВРТ_ОснованаяТаблица.КоличествоОборотПоНГ,
    ВРТ_ОснованаяТаблица.СуммаОборотПоНГ,
    ВРТ_ОснованаяТаблица.ПроцентПоСумме,
    ВРТ_ОснованаяТаблица.ПроцентПоКоличеству
ПОМЕСТИТЬ ВРТ_ДополнительнаяТаблица
ИЗ
    ВРТ_ОснованаяТаблица КАК ВРТ_ОснованаяТаблица
;

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

СГРУППИРОВАТЬ ПО
    ВРТ_ОснованаяТаблица.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
    ВРТ_ОснованаяТаблица.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВРТ_ОснованаяТаблица.НоменклатураРодитель КАК НоменклатураРодитель,
    ВРТ_ОснованаяТаблица.Номенклатура,
    ВРТ_ОснованаяТаблица.КоличествоОборотПоПозиции,
    ВРТ_ОснованаяТаблица.СуммаОборотПоПозиции КАК СуммаОборотПоПозиции,
    ВРТ_ОснованаяТаблица.КоличествоОборотПоНГ,
    ВРТ_ОснованаяТаблица.СуммаОборотПоНГ,
    ВРТ_ОснованаяТаблица.ПроцентПоСумме КАК ПроцентПоСумме,
    ВРТ_ОснованаяТаблица.ПроцентПоКоличеству КАК ПроцентПоКоличеству,
    ВРТ_РасчетПроцентаПоСумме.ПроцентПоСуммеНарастающим,
    ВРТ_РасчетПроцентаПоКоличеству.ПроцентПоКоличествуНарастающим,
    ВЫБОР
        КОГДА ВРТ_РасчетПроцентаПоСумме.ПроцентПоСуммеНарастающим <= &ПроцентС
                ИЛИ ВРТ_ОснованаяТаблица.ПроцентПоСумме = 0
            ТОГДА "С"
        ИНАЧЕ ВЫБОР
                КОГДА ВРТ_РасчетПроцентаПоСумме.ПроцентПоСуммеНарастающим <= &ПроцентВ + &ПроцентС
                    ТОГДА "В"
                ИНАЧЕ "А"
            КОНЕЦ
    КОНЕЦ КАК КатегорияАВС_ПоСумме,
    ВЫБОР
        КОГДА ВРТ_РасчетПроцентаПоКоличеству.ПроцентПоКоличествуНарастающим <= &ПроцентС
                ИЛИ ВРТ_ОснованаяТаблица.ПроцентПоКоличеству = 0
            ТОГДА "С"
        ИНАЧЕ ВЫБОР
                КОГДА ВРТ_РасчетПроцентаПоКоличеству.ПроцентПоКоличествуНарастающим <= &ПроцентВ + &ПроцентС
                    ТОГДА "В"
                ИНАЧЕ "А"
            КОНЕЦ
    КОНЕЦ КАК КатегорияАВС_ПоКоличеству
ИЗ
    ВРТ_ОснованаяТаблица КАК ВРТ_ОснованаяТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ ВРТ_РасчетПроцентаПоСумме КАК ВРТ_РасчетПроцентаПоСумме
        ПО ВРТ_ОснованаяТаблица.Номенклатура = ВРТ_РасчетПроцентаПоСумме.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВРТ_РасчетПроцентаПоКоличеству КАК ВРТ_РасчетПроцентаПоКоличеству
        ПО ВРТ_ОснованаяТаблица.Номенклатура = ВРТ_РасчетПроцентаПоКоличеству.Номенклатура
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой