Foxtable(狐表)用户栏目专家坐堂 → [求助]代码求助!!


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

主题:[求助]代码求助!!

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
[求助]代码求助!!  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 9:20:00 [显示全部帖子]

谢谢!好及时!

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 9:34:00 [显示全部帖子]

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

 

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


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:00:00 [显示全部帖子]

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

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

 

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

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

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:03:00 [显示全部帖子]


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

                Next

 

想再填写红色部分的代码


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:24:00 [显示全部帖子]

逻辑陈述:

 

当收款明细中添加一条记录后,累加该客户的今年收款总额(SUM1),同时在“合同一览表”中找到该客户的今年合同记录并累加“合同价款”(SUM2),,同时找到该客户去年的历史结余的总金额(SUM3)。

定义SUM4=SUM1-SUM3,意思是:收款中先扣除历史结余部分,再计算实际今年收款总额

那么当:sum4 < SUM2(几年实收 小于 今年合同总额时)

     找到该客户今年的合同记录,按合同日期降序排列(降序的目的,也就是先满足之前的合同收款,剩下的合同视为没有执行完毕)

 

     倒着累加合同总价款

 

     一旦 累加合同总价款sum5  >  sum4(今年实际收款)时

 

      该条记录以及后面的记录的“执行完毕”=“否”

                       之前的记录的“执行完毕”=“是”

    

     而当 sum5  = sum4(今年实际收款)时

     后面的记录的“执行完毕”=“否”

    该条及之前的记录“执行完毕”=“是”

      

    ElseIf Sum4= Sum2 Then

     

 所有记录的“执行完毕”=“是”
        MessageBox.show("该客户货款已全部结清","提示")
   

Else(即:Sum4> Sum2)

        第一条记录的“执行完毕”=“否”
       其他行记录的 “执行完毕”=“是”
        MessageBox.show("该客户货款已全部结清,并有结余!","提示")

 

 

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

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:26:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目五_正本.foxdb


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:29:00 [显示全部帖子]

红袍兄:这个逻辑,陈述的你是否清楚了?

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 10:34:00 [显示全部帖子]

修改后的:

 

 

逻辑陈述:

 

当收款明细中添加一条记录后,累加该客户的今年收款总额(SUM1),同时在“合同一览表”中找到该客户的今年合同记录并累加“合同价款”(SUM2),,同时找到该客户去年的历史结余的总金额(SUM3)。

定义SUM4=SUM1-SUM3,意思是:收款中先扣除历史结余部分,再计算实际今年收款总额

那么当:sum4 < SUM2(几年实收 小于 今年合同总额时)

     找到该客户今年的合同记录,按合同日期降序排列(降序的目的,也就是先满足之前的合同收款,剩下的合同视为没有执行完毕)

 

     倒着累加合同总价款

 

     一旦 累加合同总价款sum5  >  sum4(今年实际收款)时

 

      该条记录以及后面的记录的“执行完毕”=“否”

                       之前的记录的“执行完毕”=“是”

    

     而当 sum5  = sum4(今年实际收款)时

     后面的记录的“执行完毕”=“否”

    该条及之前的记录“执行完毕”=“是”

      

    ElseIf Sum4= Sum2 Then

     

 所有记录的“执行完毕”=“是”
        MessageBox.show("该客户货款已全部结清","提示")
   

Else(即:Sum4> Sum2)

        第一条记录的“执行完毕”=“否”
       其他行记录的 “执行完毕”=“是”
        MessageBox.show("该客户货款已全部结清,并有结余!","提示")


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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 11:01:00 [显示全部帖子]

ElseIf Sum4= Sum2 Then

 

                                                           
        MessageBox.show("该客户货款已全部结清","提示")

 

红袍兄:这个位置好像少了一句。


 回到顶部
总数 14 1 2 下一页