以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  表事件与日期计算  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=157226)

--  作者:朱女士
--  发布时间:2020/10/9 9:20:00
--  表事件与日期计算

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

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

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

详细错误信息:

调用的目标发生了异常。

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

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

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

Select Case e.DataCol.Name

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

        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("开票数量")

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

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

            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)("开票数量")

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

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

        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("开票数量")

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

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

                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)("开票数量")

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

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

                Next

            End If

        End If

End Select

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

 

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

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

Dim dr As DataRow

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


 

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

End If

End If

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

<!--EndFragment-->

 

<!--EndFragment-->
--  作者:有点蓝
--  发布时间: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


--  作者:朱女士
--  发布时间:2020/10/9 10:38:00
--  

老师您好!

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

我的代码:

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

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

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

Dim dt As Date
Dim dt0 As Date
dt0=e.DataRow("开票日期")
dt=e.DataRow("开票日期").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

谢谢!


--  作者:有点蓝
--  发布时间: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