Foxtable(狐表)用户栏目专家坐堂 → 表事件与日期计算


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

主题:表事件与日期计算

美女呀,离线,留言给我吧!
朱女士
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
表事件与日期计算  发帖心情 Post By:2020/10/9 9:20:00 [只看该作者]

老师您好!我有两个问题请教您:

1、点击开piao表“项目号”列,重置列时出现:错误信息:Foxtable 版本:2020.5.29.8

错误所在事件:表,开piao表, DataColChanged

详细错误信息:

调用的目标发生了异常。

从字符串“订单数量”到类型“Integer”的转换无效。

输入字符串的格式不正确。

我的开piao表的订单数量设置为双精度小数,DataColChanged代码:

Select Case e.DataCol.Name

    Case "项目号","订单数量","订单重量","订单含税额","开piao数量","开piao重量","开piao金额"

        Dim dr As DataRow

        Dim mr As DataRow = e.DataRow

        Dim drs As List(of DataRow)

        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [项目号] = '" & mr("项目号") & "'", "[_SortKey] Desc")

        If dr Is Nothing Then

            mr("结余数量") = mr("订单数量") - mr("开piao数量")

            mr("结余重量") = mr("订单重量") - mr("开piao重量")

            mr("结余金额") = mr("订单含税额") - mr("开piao金额")

            dr = mr

        End If

        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [项目号] = '" & dr("项目号") & "'", "[_SortKey]")

        For i As Integer = 1 To drs.Count - 1

            drs(i)("结余数量") = drs(i-1)("结余数量") + drs("订单数量")-drs(i)("开piao数量")

            drs(i)("结余重量") = drs(i-1)("结余重量") + drs("订单重量")-drs(i)("开piao重量")

            drs(i)("结余金额") = drs(i-1)("结余金额") + drs("订单含税额")-drs(i)("开piao金额")                        

        Next

        If e.DataCol.Name = "项目号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then

            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And 项目号] = '" & e.OldValue & "'", "[_SortKey] Desc")

            If dr Is Nothing Then

                dr = e.DataTable.Find("[项目号] = '" & e.OldValue & "'", "[_SortKey]")

                If dr IsNot Nothing Then

                    dr("结余数量") = dr("订单数量") - dr("开piao数量")

                    dr("结余重量") = dr("订单重量") - dr("开piao重量")

                    dr("结余金额") = dr("订单含税额") - dr("开piao金额")                   

                End If

            End If

            If dr IsNot Nothing Then

                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [项目号] = '" & dr("项目号") & "'", "[_SortKey]")

                For i As Integer = 1 To drs.Count - 1

                    drs(i)("结余数量") = drs(i-1)("结余数量") + drs("订单数量")-drs(i)("开piao数量")

                    drs(i)("结余重量") = drs(i-1)("结余重量") + drs("订单重量")-drs(i)("开piao重量")

                    drs(i)("结余金额") = drs(i-1)("结余金额") + drs("订单含税额")-drs(i)("开piao金额")                    

                Next

            End If

        End If

End Select

是哪里的问题呢?请指教!

 

2、我有一个表,想对瑞博公司,在开piao日期开出60天后,为应结款日期,我的下面代码不执行。

If e.DataCol.name="开piao日期" Then 

Dim dr As DataRow

If dr("客户")="瑞博"


 

e.DataRow("应结款日期")=e.DataRow("开piao日期").adddays(60)

End If

End If

abc公司是开piao后120天后的每月4号结款,如果开piao日期加上120天后超过4号了,就顺延到下月4号结款。这个怎么实现?

<!--EndFragment-->

 

<!--EndFragment-->

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110512 积分:562444 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/9 9:42:00 [只看该作者]

1、试试
If e.DataCol.Name = "项目号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
改为
If e.DataCol.Name = "项目号"  Then
If e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
'其它代码
end if
end if

或者自行跟踪一下看是那一句代码有问题,调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm

2、

If e.DataCol.name="开piao日期" orelse  e.DataCol.name="客户"Then 

If e.DataRow("客户")="瑞博"


 

e.DataRow("应结款日期")=e.DataRow("开piao日期").adddays(60)

End If

End If


 回到顶部
美女呀,离线,留言给我吧!
朱女士
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:513 积分:4073 威望:0 精华:0 注册:2020/2/8 11:14:00
  发帖心情 Post By:2020/10/9 10:38:00 [只看该作者]

老师您好!

上面第二个问题的第二层代码客户=“abc” 时,abc公司是开piao后120天后的每月4号结款,如果开piao日期加上120天后超过4号了,就顺延到下月4号结款。我写的出错了:.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,应收应付表,DataColChanged
详细错误信息:
调用的目标发生了异常。
年、月和日参数描述无法表示的 DateTime。
请指教!

我的代码:

If e.DataCol.name="开piao日期" OrElse  e.DataCol.name="客户"Then

If e.DataRow("客户")="博瑞"

e.DataRow("应结款日期")=e.DataRow("开piao日期").adddays(60)
End If
If e.DataRow("客户")="abc"

Dim dt As Date
Dim dt0 As Date
dt0=e.DataRow("开piao日期")
dt=e.DataRow("开piao日期").adddays(120)
Dim d As Integer=day(dt)
Dim m As Integer=month(dt)
Dim y As Integer=year(dt)
Dim m1 As Integer

If d>4
m1=m+1
Dim dt1 As New Date(y, m1, 4)
e.DataRow("应结款日期")=dt1
End If
If d<=4

Dim dt2 As New Date(y, m, 4)

e.DataRow("应结款日期")=dt2
End If

End If
End If

谢谢!


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110512 积分:562444 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/10/9 11:07:00 [只看该作者]

If e.DataCol.name="开piao日期" OrElse  e.DataCol.name="客户"Then
    
    If e.DataRow("客户")="博瑞"
        e.DataRow("应结款日期")=e.DataRow("开piao日期").adddays(60)
    ElseIf e.DataRow("客户")="abc"
        
        Dim dt As Date
        Dim dt0 As Date
        dt0=e.DataRow("开piao日期")
        dt=e.DataRow("开piao日期").adddays(120)
        If dt.Day > 4 Then
            dt = dt.AddMonths(1)
            dt = new Date(dt.Year,dt.Month,4)
        End If
        e.DataRow("应结款日期")=dt
        
    End If
End If

 回到顶部