Имя: Пароль:
1C
 
Запрос. Обнуление ассортиментной матрицы Отчет
0 Juliaa12344
 
06.04.26
16:33
Нужно вывести отчет, где по каждой номенклатуре выводился признак 0 или 1 есть в матрице и есть остаток (Может быть в остатке но не быть в матрице если что)
Потом все единички суммируются и по формуле вычисляется % обнуления матрицы.
В целом вот все реализовано, заказчик принял
НО попросил так же добавить итоги по категориям номенклатуры. А я ума не приложу как это сделать.
У меня сейчас %обнуления показывается только в общем итоге, по детализации там пусто.
В коде видно, что я сначала суммирую все детальные единички, а потом уже вставляю сумму в формулу.
Но как это сделать на уровне иерархии? Может есть решение?



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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    АссортиментнаяМатрицаМагазинаСрезПоследних.Магазин КАК Магазин,
    АссортиментнаяМатрицаМагазинаСрезПоследних.АссортиментнаяМатрица КАК АссортиментнаяМатрица,
    СоставМатрицыСрезПоследних.Матрица КАК Матрица,
    СоставМатрицыСрезПоследних.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_Матрица
ИЗ
    РегистрСведений.АссортиментнаяМатрицаМагазина.СрезПоследних(&ДатаОтчета, ) КАК АссортиментнаяМатрицаМагазинаСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставМатрицы.СрезПоследних КАК СоставМатрицыСрезПоследних
        ПО АссортиментнаяМатрицаМагазинаСрезПоследних.АссортиментнаяМатрица = СоставМатрицыСрезПоследних.Матрица
ГДЕ
    СоставМатрицыСрезПоследних.Включена
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Матрица.Магазин КАК Магазин,
    ВТ_Матрица.АссортиментнаяМатрица КАК АссортиментнаяМатрица,
    ВТ_Матрица.Матрица КАК Матрица,
    ВТ_Матрица.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ВсеНоменклатура
ИЗ
    ВТ_Матрица КАК ВТ_Матрица

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    АссортиментнаяМатрицаМагазинаСрезПоследних.Магазин,
    АссортиментнаяМатрицаМагазинаСрезПоследних.АссортиментнаяМатрица,
    АссортиментнаяМатрицаМагазинаСрезПоследних.АссортиментнаяМатрица,
    ВТ_Остатки.Номенклатура
ИЗ
    ВТ_Остатки КАК ВТ_Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АссортиментнаяМатрицаМагазина.СрезПоследних(&ДатаОтчета, ) КАК АссортиментнаяМатрицаМагазинаСрезПоследних
        ПО ВТ_Остатки.Магазин = АссортиментнаяМатрицаМагазинаСрезПоследних.Магазин
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Детализация.Магазин КАК Магазин,
    ВТ_Детализация.АссортиментнаяМатрица КАК АссортиментнаяМатрица,
    ВТ_Детализация.Матрица КАК Матрица,
    СУММА(ВЫБОР
            КОГДА ВТ_Детализация.ЕстьВМатрице = 1
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК МатрицаSKU,
    СУММА(ВТ_Детализация.ЕстьОстаток) КАК Остаток
ПОМЕСТИТЬ ВТ_Итоги
ИЗ
    ВТ_Детализация КАК ВТ_Детализация

СГРУППИРОВАТЬ ПО
    ВТ_Детализация.Магазин,
    ВТ_Детализация.АссортиментнаяМатрица,
    ВТ_Детализация.Матрица
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Детализация.Магазин КАК Магазин,
    ВТ_Детализация.АссортиментнаяМатрица КАК АссортиментнаяМатрица,
    ВТ_Детализация.Матрица КАК Матрица,
    ВТ_Детализация.Номенклатура КАК Номенклатура,
    СУММА(ВТ_Детализация.ЕстьВМатрице) КАК ЕстьВМатрице,
    СУММА(ВТ_Детализация.ЕстьОстаток) КАК ЕстьОстаток,
    (ВТ_Итоги.МатрицаSKU - СУММА(ВТ_Итоги.Остаток)) * 100 / ВТ_Итоги.МатрицаSKU КАК Обнуление,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Итоги.МатрицаSKU) КАК МатрицаSKU,
    СУММА(ВТ_Итоги.Остаток) КАК Остаток
ИЗ
    ВТ_Детализация КАК ВТ_Детализация
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Итоги КАК ВТ_Итоги
        ПО ВТ_Детализация.Магазин = ВТ_Итоги.Магазин
            И ВТ_Детализация.АссортиментнаяМатрица = ВТ_Итоги.АссортиментнаяМатрица
            И ВТ_Детализация.Матрица = ВТ_Итоги.Матрица
ГДЕ
    (ВТ_Детализация.ЕстьВМатрице = 1
            ИЛИ ВТ_Детализация.ЕстьОстаток = 1)

СГРУППИРОВАТЬ ПО
    ВТ_Детализация.Магазин,
    ВТ_Детализация.АссортиментнаяМатрица,
    ВТ_Детализация.Матрица,
    ВТ_Детализация.Номенклатура,
    ВТ_Итоги.МатрицаSKU,
    ВТ_Детализация.ЕстьВМатрице,
    (ВТ_Детализация.ЕстьВМатрице - ВТ_Детализация.ЕстьОстаток) * 100 / ВТ_Детализация.ЕстьВМатрице
1 Волшебник
 
06.04.26
19:13
Что за матрица?
2 vicof
 
06.04.26
20:04
И где Нео?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан