日誌式庫存管理的設計思路解釋
日誌式的管理是一種流水帳式的登記方式,其核心思路是對所有操作進行記錄,特徵是只登記不修改與刪除。
單據名稱:如:入庫單,出庫單,調整單等
單據編號:某一特定單據的編號
庫存狀態:記錄各種單據對庫存的影響方式為加或減
操作型別:記錄當前操作是審核還是撤審。如同樣是減庫存,也要分是撤審的減庫存還是退貨的減庫存或者調撥倉庫的減庫存
登記時間:是記錄產生加減庫存的日期。它在日庫存統計起重要作用
物料編碼:庫存管理中會對每個材料進行唯一編碼,以便庫存進行管理
物料名稱:如已有物料編碼,其名稱只是對編碼的詳細中文注釋。如工廠對物料編碼不能不能理解,資訊化基礎很差,那麼中文名稱將是工廠操作人員通俗的理解方式,系統在此做預留也就是可以滿足此類使用者的需求,庫存在統計時同樣可以按物料名稱來統計。物料名稱因此可以廣義的理解為使用者可接受的擴充套件屬性。如:幅寬,規模,顏色,尺碼等。只要是使用者可以記憶的資訊,都可以歸入名稱範疇。
發生數量:是乙個正數字。本次數量通過發生數量*庫存狀態來產生。
建立人和建立時間:通常是記錄本單的審核人和審核時間。它與登記時間是有區分的,由於庫存統計時對時間的界定一般有兩種方式,一種是按審核時間來進行統計庫存,另一種是按單據發生時間來統計,兩種方式主要區別是發生時間則使用者可自行調整,審核時間要求人員操作及時準確。所以通常使用者都會採用第一種方式。
日誌式管理與單據管理進行結合真正實現前後臺功能分離,日誌功能與單據管理的結合點為單據管理中的審核功能。即前台介面負責資料顯示與錄入,後台審核負責寫日誌,增減實時、歷史庫存。
在此先解釋一下,實時庫存與歷史庫存。
實時庫存顧名思義,它是整個系統執行到當前時間點的庫存量。如:當前時間為10:05分,那麼如果在此時查詢的物料a實時庫存報表則是10:05分的庫存量。
歷史庫存則是以天為單位進行統計生成每天的庫存量。因此歷史庫存換算成時間是記錄每天晚上23:59分時的庫存量。
實時庫存與歷史庫存之間的差值只有一天。實時庫存是查當天的庫存,歷史庫存是查當天之前的庫存。從使用者角度來講兩個庫存沒有區分,而從後台資料庫角度分析,這兩個庫存一定要區分開,因為庫存資料是乙個海量的後台資料表,任何對此海量資料表的插入,修改,刪除操作將會直接影響系統的整體查詢效能,如果不把其很好的區分開,所有操作合在同乙個表中進行,定會造成由於查詢速度緩慢,而使用者終端多個未結束的任務將此表鎖死,最終形成系統癱瘓。而根據庫存業務操作的分析結果,使用者在操作庫存系統的過程中90%以上的工作是在對實時庫存進行查詢、新增、修改操作。而僅有10%左右的工作是在操縱歷史庫存,對於這10%的歷史庫存操縱,我們也進行過統計,歷史庫存的操作通常不會跨二個月以上(健全財務制度的要求),這樣隨著資料的增加,超過三個月含三個月的資料基本處於封存狀態。因此對於庫存系統在考慮到效能的基礎上設計時一定要將實時與歷史庫存分開,從歷史庫存的查詢及修改效率上可以對歷史庫存進行資料庫表分區域管理。
日誌式的管理在實時庫存與歷史庫存中的意義在於,日誌是記錄系統庫存操作的原始檔案,根據日誌式的管理特點:
對於業務流程的資料展示通過前面介面做針對性強的開發,而後台庫存運算則採用庫存日誌的方式實現。
針對日誌表做資料庫儲存檔案的優化,根據時間段多做結果表,生成日結,月結,加快查詢速度,將經常查詢區域的資料進行分區域管理,提公升整體查詢效能。原則上以十萬條資料作為乙個查詢速度減慢的監界點。十萬條以內的查詢速度還是可以接受的。
最終操作使用者不需要看懂此日誌表,他們看到的都是在日誌表基礎上經過加工的、使用者可能看得懂的介面資訊。如果乙個有經驗的程式設計師,在看過本文的介紹以後就可以馬上理解日誌表的作用。
select tb.pm,tb.frq,tb.gg,
decode(row_number() over(partition by tb.pm order by tb.pm,tb.rq,tb.gg),1,0,
lag(l_bqlj, 1, 0) over (order by tb.pm,tb.rq,tb.gg)) as prev_bqjc,
tb.bqrk,tb.bqck,tb.l_bqlj
from
(select ta.pm,ta.gg,ta.rq,ta.bqrk,ta.bqck,
sum(ta.bqlj) over (partition by ta.pm,ta.gg
order by ta.pm,ta.gg,ta.rq
range unbounded preceding
) l_bqlj
from
(select lsz.
物料名稱pm, lzs.規格gg,to_char(lsz.登記時間,'yyyy-mm') rq,
sum(decode(lsz.
庫存狀態,1, lsz.數量,0)) bqrk,
sum(decode(lsz.
庫存狀態,-1,lsz.數量,0)) bqck,
sum(decode(lsz.
庫存狀態,1, lsz.數量,0)) -
sum(decode(lsz.
庫存狀態,-1,lsz.數量,0)) bqlj
from (select
物料名稱,登記時間,規格,庫存狀態,數量
from
日誌結構b
where to_char(
登記時間,'yyyymm') >= '200810'
union
select a.
物料名稱,to_date('200810','yyyymm') 登記時間,a.規格,0 庫存狀態,0 數量
from
日誌結構a
group by a.
物料名稱,a.登記時間,a.規格
group by to_char(lsz.
登記時間,'yyyy-mm'),lsz.物料名稱
order by to_char(lsz.
登記時間,'yyyy-mm'),lsz.物料名稱) ta) tb
分析:
1.豎值變橫
使用decode把滿足條件的記錄數量保留下來,不滿足條件的過濾為0。 2.
sum進行累計運算。 3.
lag錯位進行結轉運算。 4.
union
做結轉表
1) 內部:更新自身系統的業務或基礎資料表
2) 外部:寫入與外部通訊表的資料
日誌式庫存管理的設計思路解釋
日誌式庫存管理的設計思路解釋 日誌式的管理是一種流水帳式的登記方式,其核心思路是對所有操作進行記錄,特徵是只登記不修改與刪除。單據名稱 如 入庫單,出庫單,調整單等 單據編號 某一特定單據的編號 庫存狀態 記錄各種單據對庫存的影響方式為加或減 操作型別 記錄當前操作是審核還是撤審。如同樣是減庫存,也...
基於C 的庫存管理系統設計與實現
運用物件導向程式設計知識,利用c 語言設計和實現乙個 庫存管理系統設計 主要完成對商品的銷售 統計和簡單管理。在實現過程中,需利用物件導向程式設計理論的基礎知識,充分體現出c 語言關於類 繼承和封裝等核心概念,每乙個類應包含資料成員和成員函式。超市中商品分為四類,分別是食品 化妝品 日用品和飲料。每...
基於角色的許可權管理系統設計思路
許可權管理功能是專案中重要的部分,通過許可權系統可以控制系統中各使用者所擁有的許可權,比如能否開啟乙個頁面,能否進行某項操作,合理的許可權控制可以規避誤操作的風險,提高系統的可用性。許可權管理的思路一般為基於角色和基於資源兩種,基於角色即對為使用者賦予某些角色的許可權,基於資源則為對使用者賦予某些資...