Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何实现按先进先出法计算出库成本

西岭村人  发表于:2009-09-06 23:51:05  
复制

有以下两张表,

一张是入库表

ID  日期      商品代码  入库数量 入库单价

1   2009-8-1   AAA       100       10

30  2009-8-1   AAA        50       12

2   2009-8-30  BBB        30        5

 

一张是出库表 

ID   日期      商品代码  出库数量

1   2009-8-2   AAA        90    

2   2009-8-3   AAA        60    

3   2009-8-30  BBB        10

 

现在我想得到一张按先进先出法的查询,求出出库的金额,不知在查询里能否实现这个想法.请各位帮帮忙.

 

日期      商品代码  出库数量 出库单价 入库表ID

2009-8-2   AAA        90       10       1

2009-8-3   AAA        10       10       1

2009-8-3   AAA        50       12      30

2009-8-30  BBB        10        5       2

 

    

 

Top
波恩 发表于:2009-10-11 22:08:31

研究了N久:

Private Sub 确定_Click()
Dim yl As Long, ckl As Long, bcckl As Long
If Nz(Me.商品id) = 0 Or Trim(Me.商品名称) = "" Or Nz(Me.出库量) = 0 Then
   MsgBox "请输入正确的常数然后再点确定": Exit Sub
End If
yl = Nz(DSum("余量", "余量", "[商品id]=" & Me.商品id))
ckl = Me.出库量
If ckl > yl Then
   MsgBox "您输入的商品的出库量大于目前的库存量(" & yl & "),无法计价", vbOKOnly, "提示": Exit Sub
End If
Dim r As DAO.Recordset
Set r = CurrentDb.OpenRecordset("SELECT * FROM 余量 WHERE 商品id=" & Me.商品id & "and 余量>0;")
r.MoveFirst  '后进先出时,将本行代码改为:r.movelast
bcckl = ckl: If r("余量") < ckl Then bcckl = r("余量")
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO 出库单明细 (出库单号,商品id,数量,含税单价,入库单号 ) values(" & Me.出库单号 & " , " & Me.商品id & "," & bcckl & "," & r("含税单价之First") & "," & r("入库单号") & ");"
DoCmd.SetWarnings True
ckl = ckl + -1 * bcckl 
If ckl <> 0 Then GoTo aa:
Me.出库单明细.Requery: Me.Form.Repaint
Me.商品id = "": Me.商品名称 = "": Me.出库量 = ""
Beep
End Sub



andymark 发表于:2009-10-12 07:33:37

如果单纯是上面的要求

直接用查询也能实现



点燃一支烟 发表于:2009-10-12 08:28:04

这个问题没那么简单的,呵呵,考虑还须周全



andymark 发表于:2009-10-12 14:23:11
总记录:4篇  页次:1/1 9 1 :