以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  库存分盘计算  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78144)

--  作者:实话实说
--  发布时间:2015/12/3 8:35:00
--  库存分盘计算

表A,如何自动计算库存_分盘?

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


--  作者:Hyphen
--  发布时间:2015/12/3 8:51:00
--  
DataColChanged事件


Select Case e.DataCol.Name
    Case "入仓_分盘","出仓_分盘"
        If e.DataRow.IsNull("入仓_分盘") = False AndAlso e.DataRow.IsNull("出仓_分盘") = False Then
            e.DataRow("库存_分盘") = Eval(e.DataRow("入仓_分盘")) - Eval(e.DataRow("出仓_分盘"))
        End If

End Select

--  作者:实话实说
--  发布时间:2015/12/3 9:40:00
--  

呵,我的需求是这样的 入仓:52.1+56.8+72.3+50.0+42.8,出仓:52.1+50.0 库存_分盘应该是56.8+72.3+42.8,2楼算的是库存_数量


--  作者:大红袍
--  发布时间:2015/12/3 9:56:00
--  

Select Case e.DataCol.Name
    Case "入仓_分盘","出仓_分盘"
        Dim ls As new List(Of String)
        ls.AddRange(e.DataRow("入仓_分盘").split("+"))
        For Each s As String In e.DataRow("出仓_分盘").split("+")
            For i As Integer = 0 To ls.Count - 1
                If ls(i) = s Then
                    ls.Removeat(i)
                    Exit For
                End If
            Next
        Next
        e.DataRow("库存_分盘") = String.Join("+", ls.ToArray)
       
End Select


--  作者:实话实说
--  发布时间:2015/12/3 10:23:00
--  
4楼代码对于A产品没有问题,对于B产品不行,B产品怎么计算呢
--  作者:大红袍
--  发布时间:2015/12/3 10:37:00
--  
Select Case e.DataCol.Name
    Case "入仓_分盘","出仓_分盘"
        Dim ls As new List(Of String)
        ls.AddRange(e.DataRow("入仓_分盘").split("+"))
        For Each s As String In e.DataRow("出仓_分盘").split("+")
            Dim ary() As String = s.split("*")
            For i As Integer = 0 To ls.Count - 1
                If ary.length = 2 Then
                    Dim ary2() As String = ls(i).split("*")
                    If ary2.length = 2 Then
                        If ary(1) = ary2(1) Then
                            ls(i) = (ary2(0) - ary(0)) & "*" & ary2(1)
                        End If
                    End If
                Else
                    If ls(i) = s Then
                        ls.Removeat(i)
                        Exit For
                    Else
                        Dim ary2() As String = ls(i).split("*")
                        If ary2.length = 2 Then
                            If ary(0) = ary2(1) Then
                                ls(i) = (ary2(0) - 1) & "*" & ary2(1)
                            End If
                        End If
                    End If
                End If
            Next
        Next
        e.DataRow("库存_分盘") = String.Join("+", ls.ToArray)
       
End Select

--  作者:实话实说
--  发布时间:2015/12/3 11:08:00
--  

大红袍