以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 库存先进先出 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105954) |
||||
-- 作者:duokan -- 发布时间:2017/8/29 20:57:00 -- 库存先进先出 老师帮我看看怎么做先进先出 卡在这边了
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/30 8:56:00 -- 参考
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=97084&skin=0
|
||||
-- 作者:duokan -- 发布时间:2017/8/30 13:14:00 -- 老师 这个跟我的想法有点出入 我需要的是类似这样的 If e.DataRow("数量") IsNot Nothing Then Dim cr1 As DataRow = e.DataRow Dim cr2 As DataRow = DataTables("进").Find("商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") If cr2 IsNot Nothing Then Dim br1 As Integer = DataTables("进").SQLCompute("Count(*)", "商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") MessageBox.Show("找到记录共有:" & br1) Dim br2 As Double = DataTables("进").SQLCompute("Sum(库存)", "商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") MessageBox.Show("剩余库存:" & br2) If br2 < e.DataRow("数量") Then MessageBox.show("该商品库存不足!") Else If cr2.DataRows(0).("库存") => e.DataRow("数量") Then ’按时间排序,要是搜索到的进货第一行的库存够此次的销售数量,那就减去销售数量 cr2.DataRows(0).("出库") = e.DataRow("数量") + cr2.DataRows(0).("出库") ElseIf cr2.DataRows(0).("库存") + cr2.DataRows(1).("库存") => e.DataRow("数量") Then\'第一行+第二行才够此次销售 cr2.DataRows(0).("出库") = cr2.DataRows(0).("数量") cr2.DataRows(1).("出库") = e.DataRow("数量") - cr2.DataRows(0).("数量") + cr2.DataRows(1).("出库")
’... ... 要N个进货单的数量才能抵扣此次销售数量 End If End If End If End If |
||||
-- 作者:有点甜 -- 发布时间:2017/8/30 14:51:00 -- Select Case e.DataCol.name Case "商品编号", "数量" If e.DataRow("数量") IsNot Nothing Then Dim r As DataRow = e.DataRow Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") If sum < r("数量") Then msgbox("库存不够") Else Dim count As Integer = 0 Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'", "日期, _Identify") Dim s As String = "" For i As Integer = 0 To drs.count - 1 Dim dr As DataRow = drs(i) count += dr("库存") Dim sy As Integer = count - r("数量") s &= dr("进货单号") & "," If sy >= 0 Then dr("出库") = dr("数量") - sy dr("库存") = sy r("进货单号") = s.trim(",") Exit For Else dr("出库") = dr("数量") dr("库存") = 0 End If Next End If End If End Select |
||||
-- 作者:duokan -- 发布时间:2017/8/30 15:36:00 -- 谢谢老师,完美解决 看了代码不下10余遍还是理解不了一些代码 Dim s As String = "" For i As Integer = 0 To drs.count - 1 Dim dr As DataRow = drs(i) count += dr("库存") Dim sy As Integer = count - r("数量") s &= dr("进货单号") & "," If sy >= 0 Then dr("出库") = dr("数量") - sy dr("库存") = sy r("进货单号") = s.trim(",") Exit For 要是e.DataRow("成本")怎么进行计算
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/30 15:43:00 --
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/30 15:44:00 -- 成本也是同样计算,用一个变量记录每一行的成本,累加就是答案。 |
||||
-- 作者:duokan -- 发布时间:2017/8/30 15:58:00 -- 好的 谢谢老师 |
||||
-- 作者:duokan -- 发布时间:2017/8/31 16:03:00 -- 老师 我研究了一天 但还是没弄明白 调试都不对 您有空帮我看一下 Select Case e.DataCol.name Case "商品编号", "数量" If e.DataRow("数量") IsNot Nothing Then Dim r As DataRow = e.DataRow Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") If sum < r("数量") Then msgbox("库存不够") Else Dim count As Integer = 0 Dim cb As Double \'记录每条进货成本 Dim cks As Integer \'定义cks用记录每条进货单出库数量 Dim cbs As Double \'记录cb也就是成本的累加数 Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'", "日期, _Identify") Dim s As String = "" \'定义一个S变量,用于记录以后取得的原始入库单号 For i As Integer = 0 To drs.count - 1 \'循环查找 Dim dr As DataRow = drs(i) \'定义一个表,为查找到的所有行 count += dr("库存") \'用count记录累加的库存 Dim sy As Integer = count - r("数量") \'定义一个sy,等于累加库存扣除该次出库数量 s &= dr("进货单号") & "," If sy >= 0 Then \'如果累加的库存可抵扣此次出库 dr("出库") = dr("数量") - sy \'最后一条进货单的数量 - sy 就是出库的数量 cks = sy \'此次出库数 cb = cks * dr("单价") \'最后一条进货单产生的成本 dr("库存") = sy r("进货单号") = s.trim(",") Else \'以时间排序,库存不足时的处理 cks = dr("库存") + sy \'记录每一条的出库数 cb = cks * dr("单价") \'核算成本 dr("出库") = dr("数量") \'证明可以直接出完 dr("库存") = 0 End If cbs+ = cb \'累计cb的数 r("成本") = cbs Next End If End If End Select |
||||
-- 作者:有点甜 -- 发布时间:2017/8/31 16:11:00 -- Select Case e.DataCol.name Case "商品编号", "数量" If e.DataRow("数量") IsNot Nothing Then Dim r As DataRow = e.DataRow Dim sum As Double = DataTables("进").compute("sum(库存)", "商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'") If sum < r("数量") Then msgbox("库存不够") Else Dim count As Integer = 0 Dim cb As Double = 0 Dim drs As List(Of DataRow) = DataTables("进").Select("商品编号 = \'" & e.DataRow("商品编号") & "\' And 库存状态 = \'可出库\'", "日期, _Identify") Dim s As String = "" For i As Integer = 0 To drs.count - 1 Dim dr As DataRow = drs(i) count += dr("库存") Dim sy As Integer = count - r("数量") s &= dr("进货单号") & "," If sy >= 0 Then dr("出库") = dr("数量") - sy cb += dr("单价") * dr("出库") dr("库存") = sy r("进货单号") = s.trim(",") r("成本") = cb Exit For Else dr("出库") = dr("数量") dr("库存") = 0 cb += dr("单价") * dr("出库") End If Next End If End If End Select |