我們的軟件采用先出先出算法,但在實際應用中,碰到下面一個問題。入庫時,客戶的入庫金額是按實際支付金額入庫的(這種情況很常見,付供應商一筆整數)比如:
某日購進一批礦泉水,數量9600瓶,采購單價0.65元,共支付金額 6200元(實際支付金額),在我們的系統中,此筆業務會重算單價,6200/9600=0.6458(4位小數),系統按9600、0.6458記錄入批次庫存。這樣就造成了實際支付金額與成本金額的差異:實際成本6200,批次成本金額9600*0.6458=6199.68,雖然只差幾角錢,但如果一張單采購數量比較大的情況下,差別還是蠻大的,我們碰到過客戶最大一張單差別近千元的情況,月累計誤差可上萬元�,F客戶要求一分錢都不能差,我們該如何解決這個問題。
因為單價的原因,這筆業務在出庫時,最終的出庫成本也只有6199.68元,這樣就與入庫不平衡,客戶不允許這種情況的發生。
我的想法,批次庫存中除保留單價、數量外,還保存金額。系統建立一個批次庫存表,記錄每筆業務的入庫數量、入庫金額、入庫成本價、已出數量、已出金額,在商品出庫時,如果出庫數量小于批次庫存結余數量,則按入庫成本價出庫,如果此次出庫會將結余數量出完,則要考慮加上調整金額,保證這個批次的出庫總金額與入庫金額一致。例:
對應剛才業務,批次庫存為:結余數量9600 成本價0.6458 入庫金額6200 批次號1111
第一次出庫:數量4800 出庫成本價0.6458 出庫金額 3099.84,此筆業務完成后,1111批次庫存為:結余數量4800 成本價0.6458 入庫金額6200 結余金額 6200-3099.84=3100.16
第二次出庫:數量4800 出庫成本價0.6459 出庫金額3100.16(注意此處,因為此筆業務發生后,1111批次的庫存將出完,所以不能使用0.6458出庫,否則會造成差異0.6458*4800+0.6458*4800=6199.68,而實際入庫金額為6200,所以此筆出庫金額應為6200-0.6458*4800=3100.16)
我認為采用這樣的解決方法,能保證數據的平衡,不知道在具體業務中是否可行,向各位請教,謝謝。
解決這個問題應該沒有那么復雜吧?!
導致你這個成本問題的原因有兩個:1、0.65*9600=6240,但是實際結算金額卻是6200,其中的40元被你的批量采購給折掉了;2、就算是折后結算金額為6200,成本為0.64583333333,而你系統的精度為萬分位級(小數點后4為)成了0.6458,使得差額較大。
所以,就有了2個解決辦法:1、采購數據分解:按照0.65*9600=6240的6240元作為入庫金額,而折下的40元作為業外收入劃入收入,這樣成本比較工整;2、加大成本的核算精度,當然這樣會使帶給服務器更多的負擔。
個人見解,請前輩們指正!