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


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

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

帅哥哟,离线,有人找我吗?
liuxianjie1980
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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


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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
liuxianjie1980
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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("该客户货款已全部结清,并有结余!","提示")


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/17 10:49:00 [只看该作者]


If e.DataRow.Isnull("收款总额") = False Then
    Dim Sum1 As Double
    Dim Sum2 As Double
    Dim Sum3 As Double
    Dim y As Integer = Date.Today.Year
    Dim dt1 As New Date(y, 1, 1)
    Dim dt2 As New Date(y, 12, 31)
    Sum1 = DataTables("收款明细表").Compute("Sum(收款总额)", "客户名称='" & e.DataRow("客户名称") & "'and 收款日期 >= #" & dt1 & "# And 收款日期 <= #" & dt2 & "#")
    Sum2 = DataTables("合同一览表").Compute("Sum(合同总价款)", "客户名称='" & e.DataRow("客户名称") & "'and 合同日期 >= #" & dt1 & "# And 合同日期 <= #" & dt2 & "#")
    Sum3=DataTables("历史结余明细").Compute("Sum(金额)", " 客户名称= '" & e.DataRow("客户名称") & "'and 年份='" & Date.now.year -1 & "'")
    MessageBox.show(Sum1)
    MessageBox.show(Sum2)
    MessageBox.show(Sum3)
    Dim Sum4 =Sum1-Sum3
    Dim vrs As List(Of DataRow)
    vrs = DataTables("合同一览表").Select("[客户名称]='" & e.DataRow("客户名称") & "'","合同日期 DESC")
    If Sum4< Sum2 Then
       
        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 0 Step -1
                    If i > n Then
                        vrs(i)("执行完毕") = "是"
                    Else
                        vrs(i)("执行完毕") = "否"
                    End If
                Next
                Exit For
            ElseIf Sum5 = Sum4
                For i As Integer = vrs.Count - 1 To 0 Step -1
                    If i >= n Then
                        vrs(i)("执行完毕") = "是"
                    Else
                        vrs(i)("执行完毕") = "否"
                    End If
                Next
                Exit For
            End If
        Next
    ElseIf Sum4= Sum2 Then
        MessageBox.show("该客户货款已全部结清","提示")
    Else
        For i As Integer = vrs.Count - 1 To 0 Step -1
            If i >= vrs.Count - 1 Then
                vrs(i)("执行完毕") = "是"
            Else
                vrs(i)("执行完毕") = "否"
            End If
        Next
        MessageBox.show("该客户货款已全部结清,并有结余!","提示")
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
liuxianjie1980
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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("该客户货款已全部结清","提示")

 

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


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/17 11:03:00 [只看该作者]

        For i As Integer = vrs.Count - 1 To 0 Step -1
                vrs(i)("执行完毕") = "是"       
        Next

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 11:07:00 [只看该作者]

上述代码:对于同一个客户同一天的合同好像没有效果。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/17 11:08:00 [只看该作者]

不明白你的意思i,逻辑没有错。

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


加好友 发短信
等级:三尾狐 帖子:633 积分:4016 威望:0 精华:0 注册:2015/1/27 9:34:00
  发帖心情 Post By:2015/9/17 11:09:00 [只看该作者]

虽然同一天某个客户的出现多个订单的机会并不多,但是还是有这种情况的,

能不能在排序时,除了按日期降序,多加一个按订单号降序的条件呢?订单号是字符类型的


 回到顶部
总数 22 上一页 1 2 3 下一页