Foxtable(狐表)用户栏目专家坐堂 → 弹错,月份 只能在:1-12月之间,错误函数month


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

主题:弹错,月份 只能在:1-12月之间,错误函数month

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


加好友 发短信
等级:四尾狐 帖子:843 积分:5982 威望:0 精华:0 注册:2013/6/29 9:36:00
弹错,月份 只能在:1-12月之间,错误函数month  发帖心情 Post By:2017/10/12 14:50:00 [只看该作者]

错误的位置为:
     Days = Date.DaysInMonth(e.DataRow("年") ,e.DataRow("月"))
        e.DataRow("日") = Days

如果,把第一个(这个FOR NEXT是新增的行)
for i as  ......
next 
代码,删除,也不会弹错 ;
msgbox(e.DataRow("月"))   ,错的原因是:月  = 0 ;
想请教一下,问题是怎么出现的?  想不明白

S elect Case e.DataCol.Name
    Case "科目名称","借方金额","贷方金额"
        Dim dr As DataRow
        'Dim dr1 As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        Dim drs1 As List(of String)
        Dim jk As Integer
        Dim ck As Integer
        'dr1 = e.DataTable.Find("[月] > " & mr("月") & " And [科目名称] = '" & mr("科目名称") & "'", "[月] Desc")
        'If dr1 Is Nothing Then
        dr = e.DataTable.Find("[月] < " & mr("月") & " And [科目名称] = '" & mr("科目名称") & "'", "[月] Desc")
'msgbox(11)
        If dr Is Nothing Then '如果是第一行,计算结存
'msgbox(12)
            drs1 = e.DataTable.GetValues("月","[年] = " & mr("年") & " and 月 > " & mr("月") & " ")
'msgbox(drs1.Count )
            For i1 As Integer = 1 To drs1.Count

              If mr("月")+i1 <=12 Then

                Dim dr1 As DataRow= Tables(e.form.Name & "_Table1").DataTable.Find("[年] = " & mr("年") & " and [月] = " & mr("月")+i1 & " And [科目名称] = '" & mr("科目名称") & "'")
'msgbox(1)
                If dr1 Is Nothing Then
                    Dim r1 As Row =  Tables(e.form.Name & "_Table1").AddNew()
'msgbox(2)
                    r1("科目代码") = mr("科目代码")
                    r1("科目名称") = mr("科目名称")
                    r1("年") = mr("年")
                    r1("月") =  mr("月")+i1

                'Else
''msgbox(mr("月")+i1)
                    'Return
                End If
                End If
            Next
            jk =  Tables(e.form.Name & "_Table1").DataTable.Compute("Sum(借方金额)","[月] < " & mr("月") & " And 科目名称 = '" & mr("科目名称") & "'")
            ck =  Tables(e.form.Name & "_Table1").DataTable.Compute("Sum(贷方金额)","[月] < " & mr("月") & " And 科目名称 = '" & mr("科目名称") & "'")
            mr("余额") = e.DataRow("借方金额") - e.DataRow("贷方金额") + jk - ck
            dr = mr
        End If
        drs = e.DataTable.Select("[月] >= " & dr("月") & " And [科目名称] = '" & dr("科目名称") & "'", "[月]")
        
        
        For i As Integer = 1 To drs.Count - 1
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
        Next
        If e.DataCol.Name = "科目名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then '如果修改的是科目名称列
            dr = e.DataTable.Find("[月] < " & mr("月") & " And [科目名称] = '" & e.OldValue & "'", "[月] Desc") '找出旧科目名称的上一行
            If dr Is Nothing Then '如果不存在上一行,那么本行就是旧科目名称的第一行,由于已经被修改为新科目名称,需要找出旧科目名称现在的第一行
                dr = e.DataTable.Find("[科目名称] = '" & e.OldValue & "'", "[月]") '找出旧科目名称现在的第一行
                If dr IsNot Nothing Then '如果找到,计算余额
                    jk =  Tables(e.form.Name & "_Table1").DataTable.Compute("Sum(借方金额)","[月] < " & mr("月") & " And 科目名称 = '" & e.OldValue & "'")
                    ck =  Tables(e.form.Name & "_Table1").DataTable.Compute("Sum(贷方金额)","[月] < " & mr("月") & " And 科目名称 = '" & e.OldValue & "'")
                    dr("余额") = dr("借方金额") - dr("贷方金额") + jk - ck
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[月] >= " & dr("月") & " And [科目名称] = '" & dr("科目名称") & "'", "[月]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("余额") = drs(i-1)("余额") + drs(i)("借方金额") - drs(i)("贷方金额")
                Next
            End If
        End If
    Case "余额"
        If e.DataRow("余额") >= 0 Then
            e.DataRow("借或贷") = "借"
        Else
            e.DataRow("借或贷") = "贷"
        End If
        '
    'Case "借方金额"
        e.DataRow("凭证ID") = "汇 -" & " " & e.DataRow("月") & " "
        If  e.DataRow("摘要") <> "本年合计" Then
            ' e.DataRow("摘要") = "据" & " " & e.DataRow("月") & " " & "月记账凭证汇总"
            e.DataRow("摘要") = " 本 期 合 计"
        End If
 'msgbox(7)
        Dim Days As Integer
msgbox(e.DataRow("月"))
        Days = Date.DaysInMonth(e.DataRow("年") ,e.DataRow("月"))
        e.DataRow("日") = Days
        e.DataRow("会计期间") = e.DataRow("年") &  Format(e.DataRow("月"),"00")
End Select
[此贴子已经被作者于2017/10/12 14:51:59编辑过]

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


加好友 发短信
等级:四尾狐 帖子:843 积分:5982 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2017/10/12 14:55:00 [只看该作者]

这个就是上面,FOR NEXT生成的新增行;

月,这一行,都是正常的:1-12之间。奇怪。
图片点击可在新窗口打开查看此主题相关图片如下:uc截图20171012145129.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/12 15:53:00 [只看该作者]

改成

 

                    r1("年") = mr("年")
                    r1("月") =  mr("月")+i1

                    r1("科目代码") = mr("科目代码")

                    r1("科目名称") = mr("科目名称")
 
或者
 
SystemReady = False
                    r1("年") = mr("年")
                    r1("月") =  mr("月")+i1

                    r1("科目代码") = mr("科目代码")

                    r1("科目名称") = mr("科目名称")
SystemReady = True

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


加好友 发短信
等级:四尾狐 帖子:843 积分:5982 威望:0 精华:0 注册:2013/6/29 9:36:00
  发帖心情 Post By:2017/10/12 16:21:00 [只看该作者]

牛叉。图片点击可在新窗口打开查看

解决了。

 回到顶部