以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  声明日期  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173048)

--  作者:爱相随
--  发布时间:2021/11/12 11:49:00
--  声明日期
老师,我在表A的DataColChanged事件中要做如下声明,请问该如何写代码,谢谢!!

Dim dt3 As Date = DataTables("pjmxb").DataRow("出票日期")
Dim dt4 As Date = DataTables("pjmxb").DataRow("到期日期")


--  作者:有点蓝
--  发布时间:2021/11/12 12:10:00
--  

Dim dt3 As Date = e.DataRow("出piao日期")

--  作者:爱相随
--  发布时间:2021/11/12 13:40:00
--  
老师,问题是这样的:
表A是票据汇总表,有”出票银行“”出票人““查询日期”“出票金额““本日到期”“本周到期”“本月到期”“本季到期”“半年到期”“一年到期”等列
表B是出票明细表,有”出票银行“”出票人“”票据号“”出票金额“”出票日期“”到期日期“”收票人“等列,因本表涉及两个以上的日期列,因此日期列的名称不可能是唯一的。
现在在表A汇总代码时出现以下问题:
1、在表A的出票金额的查询日期对应表B的出票日期;而“本日到期”“本周到期”“本月到期”“本季到期”“半年到期”“一年到期”等列对应表B的“到期日期”列。这个时间代码怎么对设置对应??
下面的代码有错误,请老师指导,谢谢!!
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \\ 3 + 1 \'计算现在是第几个季度
Dim w As Integer = Date.Today.DayOfWeek \'算出今天是星期几
Dim dt1 As Date = Date.Today.AddDays(-w) \'获取本周的第一天
Dim dt2 As Date = Date.Today.AddDays(6 - w) \'获取本周的最后一天

Dim dt5 As New Date(y, 3 * (q - 1) + 1, 1) \'获取本季度的第一天
Dim dt6 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) \'获取本季度的最后一天
Dim dt7 As Date = E.DataRow("RQ")

If e.DataCol.Name = "出票人" Then  
    Dim filter1 As String = "出票银行 = \'" & e.DataRow("出票银行")  & "\' And 出票人 = \'" & e.DataRow("出票人") & "\'"
    e.DataRow("开票金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [出票日期] <=  \'"e.DataRow("rq")"\')/10000’这里的[出票日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的
    e.DataRow("到期需兑付金额") = DataTables("pjmxb").Compute("sum(到期需兑付金额)",filter1 & "And [出票日期] <= & e.DataRow("rq")  & "  )/10000 ’这里的[出票日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的
    e.DataRow("已兑付金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [兑付] = true" ) /10000
    e.DataRow("本日到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] = & e.DataRow("rq")  & " )/10000’这里的[到期日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的
    e.DataRow("本周到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] <= & e.DataRow("rq")  & " )/10000’这里的[到期日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的

End If

--  作者:有点蓝
--  发布时间:2021/11/12 13:48:00
--  
e.DataRow("本日到期金额") = DataTables("pjmxb").Compute("sum(开piao金额)",filter1 & "And [到期日期] = #" & Date.Today  &"# " )/10000’这里的[到期日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的
    e.DataRow("本周到期金额") = DataTables("pjmxb").Compute("sum(开piao金额)",filter1 & "And [到期日期] >= #" & dt1  &"# and [到期日期] <= #" & dt2  &"#" )/10000’这里的[到期日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的

--  作者:爱相随
--  发布时间:2021/11/12 13:57:00
--  
老师,表A的“本日到期”的本日是指表A输入的“查询日期”的日期,并不是系统的当日日当期,比如输入的是2021年10月25日,本日到期金额就是10月25日到期的金额,而不是电脑系统的今天2021年11月12日。
[此贴子已经被作者于2021/11/12 13:58:35编辑过]

--  作者:有点蓝
--  发布时间:2021/11/12 14:06:00
--  
e.DataRow("本日到期金额") = DataTables("pjmxb").Compute("sum(开piao金额)",filter1 & "And [到期日期] = #" & e.DataRow("查询日期")  &"# " )/10000’这里的[到期日期]是表B的列,而\'"e.DataRow("rq")"\'属于表A的

--  作者:爱相随
--  发布时间:2021/11/12 15:24:00
--  
老师,如下代码倒可以取数了,但是在运行出现错误
Dim y As Integer = E.DataRow("RQ").Year
Dim m As Integer = E.DataRow("RQ").Month
Dim q As Integer = (E.DataRow("RQ").Month - 1) \\ 3 + 1 \'计算现在是第几个季度
Dim w As Integer = E.DataRow("RQ").DayOfWeek \'算出今天是星期几
Dim dt1 As Date = E.DataRow("RQ").AddDays(-w) \'获取本周的第一天
Dim dt2 As Date = E.DataRow("RQ").AddDays(6 - w) \'获取本周的最后一天
Dim dt3 As New Date(y, m, 1)
Dim dt4 As New Date(y, m, Date.DaysInMonth(y, m)) \'获取本月的最后一天
Dim dt5 As New Date(y, 3 * (q - 1) + 1, 1) \'获取本季度的第一天
Dim dt6 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) \'获取本季度的最后一天
Dim dt7 As Date = E.DataRow("RQ")
Dim dt8 As Date = E.DataRow("RQ").AddMonths(3) \'加上3个月
Dim dt9 As Date = E.DataRow("RQ").AddMonths(6) \'加上6个月
Dim dt10 As Date = E.DataRow("RQ").AddMonths(12) \'加上12个月
Dim dt11 As Date = E.DataRow("RQ").AddMonths(24) \'加上24个月
If e.DataCol.Name = "出票人" Then  
    Dim filter1 As String = "出票银行 = \'" & e.DataRow("出票银行")  & "\' And 出票人 = \'" & e.DataRow("出票人") & "\'"
    e.DataRow("开票金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [出票日期] <= #" & dt7 & "# ")/10000
    e.DataRow("到期需兑付金额") = DataTables("pjmxb").Compute("sum(到期需兑付金额)",filter1 & "And [出票日期] <= #" & dt7 & "#" )/10000 
    e.DataRow("已兑付金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [兑付] = true" ) /10000
    e.DataRow("本日到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] = #" & dt7 & "# ")/10000
    e.DataRow("本日以前") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt1 & "#   And [到期日期] < #" & dt7  &"#" )/10000
    e.DataRow("本周内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt7 & "#   And [到期日期] <= #" & dt2  &"#" )/10000
    e.DataRow("本日以前1") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt3 & "#   And [到期日期] < #" & dt7  &"#" )/10000
    e.DataRow("本月内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt7 & "#   And [到期日期] <= #" & dt4  &"#" )/10000
    e.DataRow("本日以前2") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt5 & "#   And [到期日期] < #" & dt7  &"#" )/10000
    e.DataRow("本季度内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] >= #" & dt7 & "#   And [到期日期] <= #" & dt6  &"#" )/10000
    e.DataRow("三个月内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] > #" & dt7 & "#   And [到期日期] <= #" & dt8  &"#" )/10000
    e.DataRow("六个月内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] > #" & dt7 & "#   And [到期日期] <= #" & dt9  &"#" )/10000
    e.DataRow("一年内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] > #" & dt7 & "#   And [到期日期] <= #" & dt10  &"#" )/10000
    e.DataRow("二年内到期金额") = DataTables("pjmxb").Compute("sum(开票金额)",filter1 & "And [到期日期] > #" & dt7 & "#   And [到期日期] <= #" & dt11  &"#" )/10000
End If
运行如下代码:
For Each r As Row In Tables("pjmxb").Rows
        DataTables("pjtzhzb").datarows.clear
        Dim f As New Filler
        f.SourceTable = DataTables("pjmxb") \'指定数据来源
        f.SourceCols = "出票行,出票银行,出票人" \'指定数据来源列
        f.DataTable = DataTables("pjtzhzb") \'指定数据接收表
        f.DataCols = "出票行,出票银行,出票人" \'指定数据接收列
        f.ExcludeExistValue = True
        f.Fill() \'填充数据
Next
MainTable = Tables("pjtzhzb")
提示如下运行错误:
.NET Framework 版本:2.0.50727.8806
Foxtable 版本:2017.6.12.1
错误所在事件:表,pjtzhzb,DataColChanged
详细错误信息:
调用的目标发生了异常。
添加或减去的值产生无法表示的 DateTime。
参数名: value

[此贴子已经被作者于2021/11/12 15:38:08编辑过]

--  作者:有点蓝
--  发布时间:2021/11/12 15:42:00
--  
调试看是哪一句代码出错,应该是季度的计算值出错了
[此贴子已经被作者于2021/11/12 15:42:56编辑过]

--  作者:爱相随
--  发布时间:2021/11/12 16:51:00
--  
MessageBox.Show(0)

Dim y As Integer = E.DataRow("RQ").Year
Dim m As Integer = E.DataRow("RQ").Month
MessageBox.Show(1)
Dim q As Integer = (E.DataRow("RQ").Month - 1) \\ 3 + 1 \'计算现在是第几个季度
Dim w As Integer = E.DataRow("RQ").DayOfWeek \'算出今天是星期几
Dim dt1 As Date = E.DataRow("RQ").AddDays(-w) \'获取本周的第一天
Dim dt2 As Date = E.DataRow("RQ").AddDays(6 - w) \'获取本周的最后一天
Dim dt3 As New Date(y, m, 1)
Dim dt4 As New Date(y, m, Date.DaysInMonth(y, m)) \'获取本月的最后一天
MessageBox.Show(2)
Dim dt5 As New Date(y, 3 * (q - 1) + 1, 1) \'获取本季度的第一天
Dim dt6 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) \'获取本季度的最后一天
MessageBox.Show(3)

提示0和1代码有错,也不知道错在哪里了
--  作者:爱相随
--  发布时间:2021/11/12 16:59:00
--  
MessageBox.Show(0)

Dim y As Integer = E.DataRow("RQ").Year
Dim m As Integer = E.DataRow("RQ").Month
MessageBox.Show(1)
Dim q As Integer = (E.DataRow("RQ").Month - 1) \\ 3 + 1 \'计算现在是第几个季度
Dim w As Integer = E.DataRow("RQ").DayOfWeek \'算出今天是星期几
MessageBox.Show(2)
Dim dt1 As Date = E.DataRow("RQ").AddDays(-w) \'获取本周的第一天
Dim dt2 As Date = E.DataRow("RQ").AddDays(6 - w) \'获取本周的最后一天
MessageBox.Show(3)
Dim dt3 As New Date(y, m, 1)
Dim dt4 As New Date(y, m, Date.DaysInMonth(y, m)) \'获取本月的最后一天
Dim dt5 As New Date(y, 3 * (q - 1) + 1, 1) \'获取本季度的第一天
Dim dt6 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q)) \'获取本季度的最后一天

这样提示0、1、2有错。。。