Foxtable(狐表)用户栏目专家坐堂 → 动态表达式该怎么写?


  共有2164人关注过本帖树形打印复制链接

主题:动态表达式该怎么写?

帅哥哟,离线,有人找我吗?
minxizai
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
动态表达式该怎么写?  发帖心情 Post By: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)
 '找出倒数第二次该产品的入库记录,入库包括入库、退货入库、盘盈


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/12 15:44:00 [只看该作者]

cb = .Find("[商品名称] = '" & e.DataRow("商品名称") & "' and ([关联业务] = '销售' Or [关联业务] = '销售退货' Or [关联业务] = '盘盈')","_Identify Desc",1)

 回到顶部
帅哥哟,离线,有人找我吗?
minxizai
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/5/12 18:16:00 [只看该作者]

谢谢
[此贴子已经被作者于2017/5/12 19:10:49编辑过]

 回到顶部