以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何处理我的批号表  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=98475)

--  作者:edisontsui
--  发布时间:2017/3/30 14:13:00
--  如何处理我的批号表

我的项目有两个数据表,一个叫出入库,一个叫批号表

 

出入库里的数据列名称有:物料编号、批号、入库数量(正数)、出库数量(负数)

批号表里的数据列名称有:物料编号、批号、库存数量

 

我的要求是:每当 (1) “出入库里面的入库数量、出库数量发生改变,或者(2)有新增、删除数据行时,如果批号表里面有与出入库相同物料编号批号的记录,则将批号表里面的数量与情况(1)的改变量相加,或者与情况(2)里面的入库数量、出库数量相加,否则就新增加一条记录。出入库里面没有批号的数据行入库数量、出库数量发生改变或者新增、删除数据行是没有批号的,则不在批号表里反映出来。也就是说,批号表里面的所有数据行都是有批号的,而且只能有一条相同物料编号和相同批号的记录。

 

我现在的代码是这样的:

出入库Datacolchanged:

 

 

If e.DataCol Is DataTables("出入库").DataCols("入库数量") Or e.DataCol Is DataTables("出入库").DataCols("出库数量")

    If e.DataRow("批号") Is Nothing

    Else

        Dim re As Boolean = False

        For Each dr As DataRow In DataTables("批号表").DataRows

            If dr("批号") <> e.DataRow("批号") Or dr("物料编号") <> e.DataRow("物料编号") Then

                Continue For

            ElseIf dr("批号") = e.DataRow("批号") And dr("物料编号") = e.DataRow("物料编号") Then

                dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量") + dr("库存数量") - e.OldValue

                re = True

                Exit For

            End If

        Next

        If re =False

            Dim dr As DataRow

            dr = DataTables("批号表").AddNew()

            dr("批号") = e.DataRow("批号")

            dr("物料编号") = e.DataRow("物料编号")

            dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量")

        End If

    End If

End If

 

但是现在的代码不能完全实现我的要求。不知这个代码有什么问题?


--  作者:有点色
--  发布时间:2017/3/30 16:49:00
--  
If e.DataCol.name = "入库数量" OrElse e.DataCol.name = "出库数量" Then
    If e.DataRow("批号") Is Nothing OrElse e.DataRow("物料编号") Is Nothing Then
       
    Else
        Dim dr As DataRow = DataTables("批号表").find("批号 = \'" & e.DataRow("批号") & "\' And 物料编号 = \'" & e.DataRow("物料编号") & "\'")
        If dr Is Nothing Then
            dr = DataTables("批号表").AddNew()
           
            dr("批号") = e.DataRow("批号")
           
            dr("物料编号") = e.DataRow("物料编号")
           
            dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量")
        End If
       
        Dim filter As String = "批号 = \'" & e.DataRow("批号") & "\' And 物料编号 = \'" & e.DataRow("物料编号") & "\'"
        dr("库存数量") = e.DataTable.compute("sum(入库数量)", filter) +  e.DataTable.compute("sum(出库数量)", filter)
    End If
End If

--  作者:edisontsui
--  发布时间:2017/3/30 17:44:00
--  
谢谢。