以文本方式查看主题 - 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编辑过]
|