powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / И снова про СКЛАДСКИЕ ОСТАТКИ...
3 сообщений из 53, страница 3 из 3
И снова про СКЛАДСКИЕ ОСТАТКИ...
    #32775816
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проработав некоторое время с ОЛАП-ом могу предложить такой подход.

Время представляем как иерархию год-месяц-день. (можно и по другому, тогда доп. таблицы будут другие) создаём 3 доп. таблицы:

"движение по годам" - товар, год, "сумма приходов и расходов за год"
"движение по месяцам" - товар, год, месяц, "сумма за месяц"
"движение по дням" - товар, год, месяц, день, "сумма за день"

Тогда при проведении документа надо будет тригером изменить всего лишь 3 числа - по одному в каждой из указанных выше таблиц

Для получения остатка на любую дату надо будет сложить всего лишь несколько чисел:
1 - по предшествующим годам таблицы 1 (пусть в среднем 5 таких чисел)
2 - по предшествующим месяцам таблицы 2 (пусть в среднем 6 чисел)
3 - по предшествующим дням таблицы 3 (пусть в среднем 15 чисел)

итого:
редактирование - 3 операции
подсчёт остатков - 26 операций

Есть варианты быстрее?
...
Рейтинг: 0 / 0
И снова про СКЛАДСКИЕ ОСТАТКИ...
    #32775862
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше возможны вариации и различный баланс между временем пересчёта движений и временем получения остатков:
Вариация с уменьшением времени расчёта остатков (увеличивается время проведения док-та)
сделать таблицы "группа годов"-"год"-"полугодие"-"месяц"-"неделя"-"день"

тогда при проведении документа 6 операций
при расчёте остатков в среднем 1+2+1+3+2+3 = 12 операций

(даже в сумме выйграли: было 29, стало 18. хотя может я не так усреднил)

Вторая вариация в сторону уменьшения времени проведения документа (увеличивается время расчёта остатков)
"кварталы всех годов"-"дни кварталов"
проведение 2 операции
расчёт в среднем 10+60 = 70 операций

вырожденными(крайними) случаями применения этого подхода являются уже упомянутые участниками выше:
1. без доп. таблиц. При проведении ничего считать не надо, при расчёте остатка - несколько тысяч (сотен тысяч)
2. доп таблица с остатками на каждую дату. При проведении - очень длинный расчёт (по всем дням, которые позже даты документа). Расчёт остатков - мгновенно - одно число.

Лучший выход, как известно, - золотая середина :-)
...
Рейтинг: 0 / 0
И снова про СКЛАДСКИЕ ОСТАТКИ...
    #32776348
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расчёт остатков - сумма ближайшего промежуточного итога и сумма операций по журналу по (дата) between (ближ.промеж.дата+1) and (нужная дата)
Использую union и агрегатную сумму по его результату :)
Промежуточные остатки можно делать, например 1-2 раза в месяц.


как вариант - вот такой запрос

Код: plaintext
1.
2.
3.
4.
select ItemID, 
        Data_doc, 
        sum(Qty * Знак_приход_расход) 
from  Товарный журнал
group by ItemID, Data_doc

Такой запрос - когда дата приходного расходного дока - в group by ItemID, Data_doc - на автомате сам считает остаток ....на любую дату "движения товара". Только вот даты здесь - как бы не все...а только, те что были реально...

Такую фичу я бы сохранил в оракле в MV. и потот юзал ее - уже изучая остатки по артикулам и по датам.
...
Рейтинг: 0 / 0
3 сообщений из 53, страница 3 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / И снова про СКЛАДСКИЕ ОСТАТКИ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]