Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Доброго дня коллеги.
Подскажите, может кто-то реализовывал что-то подобное.
Задача: Выводить остатки подекадно внутри месяца, то есть на 10 и 20 число, а также нужны остатки на начало и на конец месяца. В qvd хранятся все операции для расчета на дату (приходы и расходы).
Формат отчета во вложении.
Заранее спасибо за помощь
Остатки - это вообще отдельная тема.
Какая структура QVD с движением, и как хранится начальный остаток?
Рассчитанных начальных остатков нет пока.
А структура хранения движения вот ниже.
Дата, Код склада, Артикул, Размер, Количество и признак Прихода-Расхода
ОК, какие варианты уже вами прорабатывались?
Мое мнение - лучше делать обработку в скрипте.
Загрузка таблицы с движением, сортировка по товару, складу, дате и расчет остатка.
Попробуйте, не получится - набросаю пример.
Здесь недавно было обсуждение по остаткам. Не совсем то, но общее есть.
Для начала как раз нужно избавиться от миллионов строк и посчитать начальные остатки на 01,01,2013.
Далее, я думала PEEKом рассчитать на все остатки на дату. Тут тоже возник вопрос, как не потерять даты, когда вообще не было движения. А в итоге в календаре назначить флаги на 1-е число, 10, 20 и на конец месяца для дальнейшего вывода остатков по столбцам уже в самой таблице.
Полностью согласен с Вами.
Чтобы не потерять даты, придется использовать календарь.
Трудоемко, но реализуемо.
Добрый день,
Евгения, думаю что даты без движения можно и не восстанавливать.
Достаточно назначить флаги, но не на отдельные даты а на периоды.
Реестр:
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 Обороты;
Большое спасибо . Как сделаю, отпишусь с примерами))
Доброго вечера Евгений.
У меня тут еще вопрос возник: А как можно заполнить пробелы по декадам?
Получается вот так: если выбрать Декаду 201410A, таблица покажет пусто.
Что-то никак не могу решить эту проблему. Заранее спасибо.