Foxtable(狐表)用户栏目专家坐堂 → 判断列计算


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

主题:判断列计算

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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
判断列计算  发帖心情 Post By:2024/4/18 11:34:00 [只看该作者]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:表,销售资料,DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
Object reference not set to an instance of an object.

Select Case e.DataCol.Name
        Case "结算类别"
      Dim dr3 As DataRow = e.DataRow
   If dr3("结算类别") = ("代销") Then
        dr3("结算金额") = dr3("吊牌单价") * dr3("套餐折扣")
    End If  
   If dr3("结算类别") = ("经销") Then
        dr3("结算金额") = dr3("销售单价") * dr3("套餐折扣")
   End If
End Select

 

结算金额算出来也是对的,,会报错,


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


加好友 发短信
等级:超级版主 帖子:106207 积分:540158 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/4/18 11:58:00 [只看该作者]

不是这段代码的问题、DataColChanged事件所有代码发上来

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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
  发帖心情 Post By:2024/4/18 12:19:00 [只看该作者]

If e.DataCol.Name = "结算金额" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("成本预算") = Nothing '那么清空此行单价列的内容
    Else
        Dim dr As DataRow '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr("成本预算") = dr("结算金额") - dr("成本单价")
        End If
    End If

If e.DataCol.Name = "销售型号" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("吊牌单价") = Nothing '那么清空此行单价列的内容
        e.DataRow("成本单价") = Nothing
    Else
        Dim dr As DataRow
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = DataTables("基本资料").Find("[型号] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            e.DataRow("吊牌单价") = dr("单价")
            e.DataRow("成本单价") = dr("成本")
        End If
    End If
End If

Dim dr1 As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "销售单价"
        dr1("折扣扣率") = dr1("销售单价") / dr1("吊牌单价")
End Select

Select Case e.DataCol.Name
    Case "销售公司", "销售型号"
        Dim dr2 As DataRow = e.DataRow
        Dim pr As DataRow
        If dr2.IsNull("销售公司") OrElse dr2.IsNull("销售型号") Then
           dr2("套餐折扣") = Nothing
        Else
            Dim filter As String
            filter = "结算公司 = '" & dr2("销售公司") & "' And  型号 = '" & dr2("销售型号") & "'"
            pr = DataTables("套餐").Find(filter)
            If pr IsNot Nothing Then
                dr2("套餐折扣") = pr("套餐折扣")
            End If
        End If
End Select


Dim dr4 As DataRow = e.DataRow
If dr4("结算类别") = ("代销") Then
    dr4("结算金额") = dr4("吊牌单价") * dr4("套餐折扣")
ElseIf dr4("结算类别") = ("经销") Then
    dr4("结算金额") = dr4("销售单价") * dr4("套餐折扣")
End If


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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
  发帖心情 Post By:2024/4/18 12:21:00 [只看该作者]

前面的代码都试过没有问题呀,,就是最后加的这段有问题,,是不是还少判断参数啊,没有搞过判断列多值计算

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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
  发帖心情 Post By:2024/4/18 12:28:00 [只看该作者]

Dim dr4 As DataRow = e.DataRow
If dr4("结算类别") = ("代销") Then
    dr4("结算金额") = dr4("吊牌单价") * dr4("套餐折扣")
ElseIf dr4("结算类别") = ("经销") Then
    dr4("结算金额") = dr4("销售单价") * dr4("套餐折扣")
End If

 

 

改这样也是会计算,也报错,就是结算类别输入代销或者经销的时候就报错


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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
  发帖心情 Post By:2024/4/18 12:45:00 [只看该作者]

不好意思老师,,找到了,,提示错误的好像是算成本,少了一个变量

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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2024/4/18 12:51:00 [只看该作者]

If dr3("结算类别") = "代销" Then   你多了括号
不过你代码逻辑有点乱,整理一下,代码如下可供参考:
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "销售型号"
        If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
            dr("吊牌单价") = Nothing '那么清空此行单价列的内容
            dr("成本单价") = Nothing
        Else
            Dim dr1 As DataRow = DataTables("基本资料").Find("[型号] = '" & e.NewValue & "'")
            If dr1 IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
                dr("吊牌单价") = dr1("单价")
                dr("成本单价") = dr1("成本")
            End If
        End If
    Case "销售单价", "吊牌单价"
        dr("折扣扣率") = dr("销售单价") / dr("吊牌单价")
    Case "销售公司", "销售型号"
        If dr.IsNull("销售公司") OrElse dr.IsNull("销售型号") Then
            dr("套餐折扣") = Nothing
        Else
            Dim dr2 As DataRow = DataTables("套餐").Find("结算公司 = '" & dr("销售公司") & "' And  型号 = '" & dr("销售型号") & "'")
            If dr2 IsNot Nothing Then
                dr("套餐折扣") = dr2("套餐折扣")
            End If
        End If
    Case "结算类别", "吊牌单价", "销售单价", "套餐折扣"
        If dr("结算类别") = Nothing Then
            dr("结算金额") = Nothing
            dr("成本预算") = Nothing '那么清空此行单价列的内容
        Else
            If dr("结算类别") = "代销" Then
                dr("结算金额") = dr("吊牌单价") * dr("套餐折扣")
            ElseIf dr("结算类别") = ("经销") Then
                dr("结算金额") = dr("销售单价") * dr("套餐折扣")
            End If
            dr("成本预算") = dr("结算金额") - dr("成本单价")
        End If
End Select



[此贴子已经被作者于2024/4/18 13:02:48编辑过]

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


加好友 发短信
等级:超级版主 帖子:106207 积分:540158 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/4/18 14:17:00 [只看该作者]

可以这样优化一下

Dim dr As DataRow = e.DataRow
If e.DataCol.Name = "销售型号" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        dr("吊牌单价") = Nothing '那么清空此行单价列的内容
        dr("成本单价") = Nothing
    Else
        Dim dr2 As DataRow
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr2 = DataTables("基本资料").Find("[型号] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            dr("吊牌单价") = dr2("单价")
            dr("成本单价") = dr2("成本")
        End If
    End If
End If

Select Case e.DataCol.Name
    Case "销售单价", "吊牌单价"
        If dr.IsNull("销售单价") OrElse dr.IsNull("吊牌单价") OrElse dr("吊牌单价") = 0 Then
            dr("折扣扣率") = Nothing
        Else
            dr("折扣扣率") = dr("销售单价") / dr("吊牌单价")
        End If 
        
End Select

Select Case e.DataCol.Name
    Case "销售公司", "销售型号"
        If dr.IsNull("销售公司") OrElse dr.IsNull("销售型号") Then
            dr("套餐折扣") = Nothing
        Else
            Dim pr As DataRow
            Dim filter As String
            filter = "结算公司 = '" & dr2("销售公司") & "' And  型号 = '" & dr2("销售型号") & "'"
            pr = DataTables("套餐").Find(filter)
            If pr IsNot Nothing Then
                dr("套餐折扣") = pr("套餐折扣")
            End If
        End If
    Case "吊牌单价", "套餐折扣", "结算类别", "销售单价"
        If dr("结算类别") = "代销" Then
            dr("结算金额") = dr("吊牌单价") * dr("套餐折扣")
        ElseIf dr("结算类别") = "经销" Then
            dr("结算金额") = dr("销售单价") * dr("套餐折扣")
        End If
    Case "结算金额", "成本单价"
        If dr.IsNull("结算金额") OrElse dr.IsNull("成本单价") Then '如果新值是空白,也就是品名列的内容为空
            dr("成本预算") = Nothing '那么清空此行单价列的内容
        Else
            '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
            dr("成本预算") = dr("结算金额") - dr("成本单价")
        End If
End Select


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


加好友 发短信
等级:幼狐 帖子:133 积分:977 威望:0 精华:0 注册:2016/4/27 9:39:00
  发帖心情 Post By:2024/4/18 19:15:00 [只看该作者]

感谢7楼和蓝老师


 回到顶部