以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]代码求助!!  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=74703)

--  作者:liuxianjie1980
--  发布时间:2015/9/17 9:09:00
--  [求助]代码求助!!

If e.DataRow("收款总额") IsNot Nothing Then
    Dim Sum1 As Double
    Dim Sum2 As Double
    Dim Sum3 As Double
    Sum1 = DataTables("收款明细表").Compute("Sum(收款总额)", "客户名称=\'" & e.DataRow("客户名称") & "\'")
    Sum2 = DataTables("合同一览表").Compute("Sum(合同总价款)", "客户名称=\'" & e.DataRow("客户名称") & "\'")
    Sum3=DataTables("历史结余明细").Compute("Sum(金额)", " 客户名称= \'" & e.DataRow("客户名称") & "\'and 年份=\'" & Date.now.year -1 & "\'")
    Dim Sum4 =Sum1-Sum3
    If Sum4< Sum2 Then
        Dim vrs As List(Of DataRow)
        vrs = DataTables("合同一览表").Select("[客户名称]=\'" & e.DataRow("客户名称") & "\'","合同日期 DESC")
        For n As Integer = vrs.Count - 1 To 0
            Dim Sum5 As Double
            Sum5=Sum5 + vrs(n)("合同总价款")
            If Sum5 > Sum4 then

               当前记录和剩下记录的“执行完毕”=否

              elseif Sum5 = Sum4 then

               剩下记录的“执行完毕”=否

            Exit For
            End If
        Next
    ElseIf Sum4= Sum2 Then
        MessageBox.show("该客户货款已全部结清","提示")
    Else
        MessageBox.show("该客户货款已全部结清,并有结余!","提示")
    End If
End If

 

红色部分也不知道思路对不对,帮忙改正,谢谢!

[此贴子已经被作者于2015/9/17 9:10:33编辑过]

--  作者:大红袍
--  发布时间:2015/9/17 9:13:00
--  

For n As Integer = vrs.Count - 1 To 0 Step -1
    Dim Sum5 As Double
    Sum5=Sum5 + vrs(n)("合同总价款")
    If Sum5 > Sum4
        For i As Integer = n To 0 Step -1
            vrs(i)("执行完毕") = "否"
           
        Next
        Exit For
    ElseIf Sum5 = Sum4
        For i As Integer = n+1 To 0 Step -1
            vrs(i)("执行完毕") = "否"
           
        Next
        Exit For
    End If
Next

 


--  作者:liuxianjie1980
--  发布时间:2015/9/17 9:20:00
--  
谢谢!好及时!
--  作者:liuxianjie1980
--  发布时间:2015/9/17 9:34:00
--  

 Sum2 = DataTables("合同一览表").Compute("Sum(合同总价款)", "客户名称=\'" & e.DataRow("客户名称") & "\'")
这句话少了一个条件:合同日期的年份=date。now。year

 

不知道该怎么写?,想写成tr(“合同日期”)。year ,dim 变量tr 为datarow 好像不行


--  作者:大红袍
--  发布时间:2015/9/17 9:35:00
--  

日期的条件,参考

 

http://www.foxtable.com/help/topics/2720.htm

 


--  作者:liuxianjie1980
--  发布时间:2015/9/17 10:00:00
--  

红袍兄:还有一个问题,vrs = DataTables("合同一览表").Select("[客户名称]=\'" & e.DataRow("客户名称") & "\'","合同日期 DESC")

那么,同一个客户同一天的合同,系统默认的是如何排序的呢?

 

因为上述代码,好像执行的不是很好,即便是收款额远大于今年合同款和去年结余,那些合同记录好像还是“否”

[此贴子已经被作者于2015/9/17 10:03:43编辑过]

--  作者:大红袍
--  发布时间:2015/9/17 10:03:00
--  

你可以根据合同日期、客户名称排序啊, 不行,就上传具体例子说明逻辑

 

合同日期 DESC,客户名称


--  作者:liuxianjie1980
--  发布时间:2015/9/17 10:03:00
--  


                For i As Integer = n To 0 Step -1
                    vrs(i)("执行完毕") = "否"
                    vrs()“执行完毕”=“是”---------------------指的是  已经累加过的记录

                Next

 

想再填写红色部分的代码


--  作者:大红袍
--  发布时间:2015/9/17 10:05:00
--  

 

[此贴子已经被作者于2015/9/17 10:05:00编辑过]

--  作者:大红袍
--  发布时间:2015/9/17 10:06:00
--  

For n As Integer = vrs.Count - 1 To 0 Step -1
    Dim Sum5 As Double
    Sum5=Sum5 + vrs(n)("合同总价款")
    If Sum5 > Sum4
        For i As Integer = vrs.Count - 1 To n step -1
            vrs(i)("执行完毕") = "否"
           
        Next
        Exit For
    ElseIf Sum5 = Sum4
        For i As Integer = vrs.Count - 1 To n-1 step -1
            vrs(i)("执行完毕") = "否"
           
        Next
        Exit For
    End If
Next