全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:988
推到 Plurk!
推到 Facebook!

請教倉庫管理資料庫設計問題

尚未結案
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-27 11:33:04 IP:222.78.xxx.xxx 未訂閱
在一個工廠的倉庫裏面對每种物資都有一個本子在專門登記該物資某個時間的收入數量,發出數量和結餘數量,現在寫一個倉庫管理的資料庫程式,我想到兩种方法:一是建一個專門的表來存放這些出入數量,但是一個麻煩的問題就是如果某种物質的錄入了好幾筆數據后,突然發現第一筆數據有錯,要返回去修改,由於更改會涉及到庫存量,每條記錄後面都有个結餘的欄位,那後面的那幾筆進出紀錄都受到影響,自動更改後面紀錄的庫存量這個算法我還不太懂,感覺很麻煩.另一種是沒有專門的表來存放這些記錄,而是制定一個時間範圍通過程式實時生成,這樣物質一多的話要對好幾張表遍歷多次,速度很慢.請問有沒有什麽比較好的方法解決這個問題?我是新手,對這种問題還沒有什麽思路,想請問各位大大您們通常的做法是怎樣的?謝了!
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-27 22:48:32 IP:61.221.xxx.xxx 未訂閱
若表格為 STOCK, 品號為 STNO, 進出時間為 DT, 各筆的數量結存為 QtyB 則當某一商品在某一進出時間異動進出數量, 則除了修改該筆記錄外, 其往後各時間的記錄可用以下 SQL 修正:
UPDATE STOCK
 SET QtyB = QtyB   異動量
 WHERE STNO = 品號 AND DT > 該異動記錄的進出時間
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-28 02:03:52 IP:219.68.xxx.xxx 未訂閱
引言: 在一個工廠的倉庫裏面對每种物資都有一個本子在專門登記該物資某個時間的收入數量,發出數量和結餘數量,現在寫一個倉庫管理的資料庫程式,我想到兩种方法:一是建一個專門的表來存放這些出入數量,但是一個麻煩的問題就是如果某种物質的錄入了好幾筆數據后,突然發現第一筆數據有錯,要返回去修改,由於更改會涉及到庫存量,每條記錄後面都有个結餘的欄位,那後面的那幾筆進出紀錄都受到影響,自動更改後面紀錄的庫存量這個算法我還不太懂,感覺很麻煩.另一種是沒有專門的表來存放這些記錄,而是制定一個時間範圍通過程式實時生成,這樣物質一多的話要對好幾張表遍歷多次,速度很慢.請問有沒有什麽比較好的方法解決這個問題?我是新手,對這种問題還沒有什麽思路,想請問各位大大您們通常的做法是怎樣的?謝了!
一般而言, 結餘這種異變欄位我並不會有實際欄位來記錄, 否則很容易發生你指出的問題, 通常我都是利用計算來求出結餘, 我們也不建議你這樣處理, 因為這會讓程式很快就寫不下去, 你應該想一下每一筆放結餘的最主要目的在那裡? 如果不要這個欄位對你有何嚴重到無法運作的狀況, 其實再好好想一想, 你應該可以明白的! 發表人 - P.D. 於 2005/02/28 02:05:49
ship88
一般會員


發表:7
回覆:7
積分:2
註冊:2004-02-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-28 14:26:08 IP:203.70.xxx.xxx 未訂閱
為什麼要設定結餘記錄.. 原因就是怕人為作假.. 故調整時,請新增一筆出庫記錄.. 或入庫記錄.. 調整單是需要註明原因為.方便查核.. 否則電腦化真的沒有義意
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-28 15:23:17 IP:211.22.xxx.xxx 未訂閱
這樣的處理方式在資料量持續增加的狀況下,一但歷史的紀錄有異動所要連動的更新將會非常龐大。 建議可以考慮採用定期結算的方式,月結、週結、日結、特定狀況結,依據需求處理。 然後把結算時的結果數量用一個 Table 記錄下來。 這樣在計算就只要以前次結算的數量來當一個基準再加上之後的所有單據就可以了。 在檢驗運算的時候也只要取兩個結帳點的紀錄再加上兩結帳點間的所有單據即可。歷史資料的異動也只要重新處理異動資料之後的所有相關的結算紀錄,不過如果你的物料很多的話結算的資料量相對的也會很多。 不過這樣的處理架構,將會需要改動程式碼很大的部份。 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
lukyshu
中階會員


發表:16
回覆:120
積分:93
註冊:2002-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-28 15:45:54 IP:220.135.xxx.xxx 未訂閱
ship88的觀念是正確的,每筆的異動紀錄一定要有異動數量跟結餘數量, 這樣在日後追查起來才有依據,如果數量發生問題了,也是要做調整紀錄, 當然要著明原因及讓上級簽核,陸軍的庫存管理系統中,也有類似的做法。 他們甚至還把每天的異動列印成異動日報的勒! 通常調整單都是在庫除清點後才做的。    
引言: 為什麼要設定結餘記錄.. 原因就是怕人為作假.. 故調整時,請新增一筆出庫記錄.. 或入庫記錄.. 調整單是需要註明原因為.方便查核.. 否則電腦化真的沒有義意
台灣 Delphi 俱樂部
PostgreSQL、FastReport專業討論區
http://www.delphi.club.tw


------
台灣 Delphi 俱樂部 

PostgreSQL、FastReport專業討論區

http://www.delphi.club.tw

oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-28 18:23:06 IP:218.5.xxx.xxx 未訂閱
謝謝各位大大的熱情回答,我想結餘紀錄是一定要的,但是我还是拿不定是對每筆進行登記還是指定時間生成的方法,覺得Brian77的方法實現起來較簡易,但是不知道數據量多大的時候更新會變得很慢?那些物資大概是幾千种吧,我使用sql server數據庫,能不能直接用觸發器呢?如果能的話效率會不會高點? bestlong您這種也是一種好辦法,我也很傾向于使用這種方法,但是聼您說我覺得實現起來有點複雜,我是還沒開始寫這個部分啦,您說用一個表紀錄下來,那如果重復統計了該日期内的數據應如何處理?如何以前次結算的數量來當一個基準進行統計我還不太明白,您能說得詳細一些嗎?謝謝各位了!
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-28 22:39:32 IP:61.221.xxx.xxx 未訂閱
比如以月結算表來說, 每個月結算出各商品在該月期初的庫存量 (週結算表就是每週結算出各商品的該週期初庫存量) 那麼, 如果要列出 2005/02/10 至 2005/02/20 的異動表時 先到結算表找到日期小於 2005/02/10 的結算記錄 比如找到的庫存量是 N, 日期是 2005年2月份的期初 那麼再到庫存表中, 計算 2005/02/01~2005/02/09 的總異動量 加上 N 即為 2005/02/10 的期初 那麼就能計算出所要顯示的期間中各筆記錄庫存 沒有結算表時, 是從庫存表的第一筆計算起, 有的話則從最接近的日期開始算起. 而要維護庫存量時, 結算表的資料筆數會遠少於庫存表的筆數.
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-01 15:34:38 IP:219.134.xxx.xxx 未訂閱
一般來說, 我都會另外開一個月結的存貨記錄表 欄位如下 ================= P_NO, 料號 S_MN, 年月份(2005/02) L_QT, 期初存量 L_MT, 期初金額(不是單價哦) P_QT, 本期進貨 P_MT, 本期進貨金額 S_QT, 本期銷貨 S_MT, 本期銷貨金額 C_QT, 本期盤點數量 ================== 以每個月為單位提供可重覆計算功能, 借由此表, 可計算進銷存月報表,成本表,毛利表... 又可以加速存貨數字檢核
系統時間:2024-05-20 3:55:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!