以文本方式查看主题

-  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
--  库存先进先出
老师帮我看看怎么做先进先出

卡在这边了
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table


--  作者:有点甜
--  发布时间: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
--  


                For i As Integer = 0 To drs.count - 1    \'循环查找到的数据
                    Dim dr As DataRow = drs(i)            
                    count += dr("库存")                        \'用count记录累加的库存
                    Dim sy As Integer = count - r("数量")     \'如果累加库存减去数量
                    s &= dr("进货单号") & ","                  \'用s记录进货单号
                    If sy >= 0 Then                              \'如果累加库存大于数量,说明足够出库
                        dr("出库") = dr("数量") - sy           \'数量减去剩余就是出库
                        dr("库存") = sy                         
                        r("进货单号") = s.trim(",")             \'赋值
                        Exit For
                    Else                                                \'库存不够的时候
                        dr("出库") = dr("数量")                  
                        dr("库存") = 0
                    End If
                Next


--  作者:有点甜
--  发布时间: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