以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态表达式该怎么写?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100502)

--  作者:minxizai
--  发布时间:2017/5/12 15:41:00
--  动态表达式该怎么写?
    Case "数量"
        Dim dd As DataRow
        Dim cb As DataRow
        With DataTables("库存")

            cb = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and [关联业务] = \'销售\' _
 Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\'","_Identify Desc",1)
 \'找出倒数第二次该产品的入库记录,入库包括入库、退货入库、盘盈


--  作者:有点色
--  发布时间:2017/5/12 15:44:00
--  
cb = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc",1)
--  作者:minxizai
--  发布时间:2017/5/12 16:58:00
--  
请问这段代码有什么问题?  
错误提示:
详细错误信息:
Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.

              If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                    dt("出库_数量") = e.DataRow("数量")
                    cb = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc",1)
                    \'找出倒数第二次该产品的入库记录
                    cd = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc")
                    \'找出倒数第一次该产品的入库记录
                    If cb Is Nothing Then
                        \'说明该产品只有一次入库记录
                        e.DataRow("成本") = e.DataRow("数量")*cd("入库_数量")/cd("入库_金额")
                    Else
                        If cb("库存_数量")-e.DataRow("数量") >= 0 Then
                            e.DataRow("成本") = e.DataRow("数量")*cb("入库_数量")/cb("入库_金额")
                        Else
                            e.DataRow("成本") = cb("库存_金额")+(e.DataRow("数量")-cb("库存_数量"))*cd("入库_数量")/cd("入库_金额")
                        End If
                    End If

[此贴子已经被作者于2017/5/12 16:58:59编辑过]

--  作者:有点色
--  发布时间:2017/5/12 17:10:00
--  
              If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                    dt("出库_数量") = e.DataRow("数量")
                    cb = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc",1)
                    \'找出倒数第二次该产品的入库记录
                    cd = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc")
                    \'找出倒数第一次该产品的入库记录
                    If cb Is Nothing Then
                        If cd IsNot Nothing Then
                        \'说明该产品只有一次入库记录
                            e.DataRow("成本") = e.DataRow("数量")*cd("入库_数量")/cd("入库_金额")
                        Else
                            msgbox("没有查找到数据")
                        End If
                    Else
                        If cb("库存_数量")-e.DataRow("数量") >= 0 Then
                            e.DataRow("成本") = e.DataRow("数量")*cb("入库_数量")/cb("入库_金额")
                        Else
                            e.DataRow("成本") = cb("库存_金额")+(e.DataRow("数量")-cb("库存_数量"))*cd("入库_数量")/cd("入库_金额")
                        End If
                    End If

--  作者:minxizai
--  发布时间:2017/5/12 17:30:00
--  
还是出现同样错误
完整代码:
Dim dt As DataRow
dt = DataTables("库存").Find("[销售关联列] = \'" & e.DataRow("_Identify") & "\'")
Select Case e.DataCol.Name
    Case "商品名称"
        If dt Is Nothing Then \'如果没有对应行
            Dim dr As DataRow = DataTables("库存").AddNew()
            dr("销售关联列") = e.DataRow("_Identify")
            dr("业务日期") = e.DataRow("业务日期")
            dr("关联业务") = "销售"
            dr("商品名称") = e.DataRow("商品名称")
            dr("往来单位名称") = e.DataRow("客户名称")
            dr("关联业务单号") = e.DataRow("单据编号")
            dr("出库_数量") = e.DataRow("数量")
            dr("出库_金额") = e.DataRow("金额")
        Else dt("商品名称") = e.DataRow("商品名称")
        End If
    Case "金额"
        e.DataRow("单价") = e.DataRow("金额") / e.DataRow("数量")
        dt("出库_金额") = e.DataRow("金额")
    Case "数量"
        Dim dd As DataRow
        Dim cb As DataRow
        Dim cd As DataRow
        With DataTables("库存")
            dd = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\'","_Identify Desc",1)
            \'找出倒数第二次该产品的库存记录
            If e.DataRow("数量") = 0 Then
            Else If dd Is Nothing Then
                MessageBox.Show("当前产品没有库存","提示",MessageBoxButtons.OK)
                e.DataRow("数量") = 0
                dt("出库_数量") = e.DataRow("数量")
            Else
                
                If dd("库存_数量") - e.DataRow("数量") >= 0 Then
                    dt("出库_数量") = e.DataRow("数量")
                    cb = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc",1)
                    \'找出倒数第二次该产品的入库记录
                    cd = .Find("[商品名称] = \'" & e.DataRow("商品名称") & "\' and ([关联业务] = \'销售\' Or [关联业务] = \'销售退货\' Or [关联业务] = \'盘盈\')","_Identify Desc")
                    \'找出倒数第一次该产品的入库记录
                    If cb Is Nothing Then
                        If cd IsNot Nothing Then
                            \'说明该产品只有一次入库记录
                            e.DataRow("成本") = e.DataRow("数量")*cd("入库_数量")/cd("入库_金额")
                        Else
                            msgbox("没有查找到数据")
                        End If
                    Else
                        If cb("库存_数量")-e.DataRow("数量") >= 0 Then
                            e.DataRow("成本") = e.DataRow("数量")*cb("入库_数量")/cb("入库_金额")
                        Else
                            e.DataRow("成本") = cb("库存_金额")+(e.DataRow("数量")-cb("库存_数量"))*cd("入库_数量")/cd("入库_金额")
                        End If
                    End If
                Else
                    MessageBox.Show("输入数量超过库存数量:" & dd("库存_数量") & ",请重新输入","提示",MessageBoxButtons.OK)
                    e.DataRow("数量") = 0
                    dt("出库_数量") = e.DataRow("数量")
                End If
            End If
        End With
        e.DataRow("金额") = e.DataRow("单价") * e.DataRow("数量")
    Case "单价"
        e.DataRow("金额") = e.DataRow("单价") * e.DataRow("数量")
        dt("出库_数量") = e.DataRow("数量")
    Case "客户名称"
        dt("往来单位名称") = e.DataRow("客户名称")
End Select

--  作者:有点色
--  发布时间:2017/5/12 17:33:00
--  

你同样要判断dt的值,如果没查找到,怎么处理?

 

Dim dt As DataRow
dt = DataTables("库存").Find("[销售关联列] = \'" & e.DataRow("_Identify") & "\'")

 

If dt isNot Nothing Then

 

End If


--  作者:minxizai
--  发布时间:2017/5/12 18:16:00
--  
谢谢
[此贴子已经被作者于2017/5/12 19:10:49编辑过]