Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Расчет остатков подекадно

Доброго дня коллеги.

Подскажите, может кто-то реализовывал что-то подобное.

Задача: Выводить остатки подекадно внутри месяца, то есть на 10 и 20 число, а также нужны остатки на начало и на конец месяца. В qvd хранятся все операции для расчета на дату (приходы и расходы).

Формат отчета во вложении.

Заранее спасибо за помощь

8 Replies
Eugeny_Ilyin
Creator II
Creator II

Остатки - это вообще отдельная тема.

Какая структура QVD с движением, и как хранится начальный остаток?

Not applicable
Author

Рассчитанных начальных остатков нет пока.

А структура хранения движения вот ниже.

Дата, Код склада, Артикул, Размер, Количество и признак Прихода-Расхода

Eugeny_Ilyin
Creator II
Creator II

ОК, какие варианты уже вами прорабатывались?
Мое мнение - лучше делать обработку в скрипте.
Загрузка таблицы с движением, сортировка по товару, складу, дате и расчет остатка.
Попробуйте, не получится - набросаю пример.
Здесь недавно было обсуждение по остаткам. Не совсем то, но общее есть.

Not applicable
Author

Для начала как раз нужно избавиться от миллионов строк и посчитать начальные остатки на 01,01,2013.

Далее, я думала PEEKом рассчитать на все остатки на дату. Тут тоже возник вопрос, как не потерять даты, когда вообще не было движения. А в итоге в календаре назначить флаги на 1-е число, 10, 20 и на конец месяца для дальнейшего вывода остатков по столбцам уже в самой таблице.

Eugeny_Ilyin
Creator II
Creator II

Полностью согласен с Вами.
Чтобы не потерять даты, придется использовать календарь.
Трудоемко, но реализуемо.

Eugeny_Ilyin
Creator II
Creator II

Добрый день,
Евгения, думаю что даты без движения можно и не восстанавливать.
Достаточно назначить флаги, но не на отдельные даты а на периоды.

Реестр:

LOAD * INLINE [

    Продукт, Дата, Количество, Декада

    Товар А, 01.01.2015, 10, 201501A

    Товар А, 02.01.2015, 20, 201501A

    Товар А, 03.01.2015, -5, 201501A

    Товар А, 04.01.2015, -4, 201501A

    Товар А, 04.01.2015, -5, 201501A

    Товар А, 11.01.2015, 20, 201501B

    Товар А, 13.01.2015, -15, 201501B

    Товар А, 21.01.2015, -21, 201501C

    Товар А, 06.02.2015, 15, 201502A

    Товар А, 12.02.2015, -6, 201502B

    Товар А, 22.02.2015, 7, 201502C

    Товар А, 26.02.2015, -7, 201502C

];

Обороты:

NoConcatenate

LOAD sum(Количество) as Оборот,

    Продукт, Декада

Resident Реестр

Group by Продукт, Декада;

drop Table Реестр;

Остатки:

load Продукт, Декада, Оборот,

    if(Продукт=peek(Продукт),RangeSum(Оборот,peek(Остаток)),RangeSum(Оборот)) As Остаток

Resident Обороты

Order by Продукт, Декада;

drop Table Обороты;

Not applicable
Author

Большое спасибо . Как сделаю, отпишусь с примерами))

Not applicable
Author

Доброго вечера Евгений.

У меня тут еще вопрос возник: А как можно заполнить пробелы по декадам?

Получается вот так: если выбрать Декаду 201410A, таблица покажет пусто.

Что-то никак не могу решить эту проблему. Заранее спасибо.