Foxtable(狐表)用户栏目专家坐堂 → 付款方式逐行写入的问题


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

主题:付款方式逐行写入的问题

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 9:16:00 [显示全部帖子]

多对多的设计,要用第三个表处理。

 

也就是再多加一个子表,把付款方式的多字段列改成明细表。

 

这样,直接统计明细表,即可得到答案。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 10:30:00 [显示全部帖子]

以下是引用blackzhu在2018/12/13 9:18:00的发言:

 
上面的表是我收款的表,一笔笔的收取.
下面的表是订单明细表,我需要将上面的表所产生的的收款方式和金额,逐行写入到下面的订单明细表中.

[此贴子已经被作者于2018/12/13 9:21:40编辑过]

 

循环每一行订单,把收款的金额减去应付的金额,如果是正数,继续下一行;如果是负数,再取收款表的下一行,继续循环。

 

代码自己写。类似 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=122869&skin=0

 

 

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 10:39:00 [显示全部帖子]

以下是引用blackzhu在2018/12/13 10:37:00的发言:
老大 我要的不是金额是付款方式

 

无语。

 

循环每一行订单,把收款的金额减去应付的金额,如果是正数,记录付款方式、金额,继续下一行;如果是负数,记录付款方式、金额,再取收款表的下一行,继续循环。

[此贴子已经被作者于2018/12/13 10:39:36编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 10:42:00 [显示全部帖子]

以下是引用blackzhu在2018/12/13 10:37:00的发言:
我看看,好像跟我的要求不太同
[此贴子已经被作者于2018/12/13 10:37:55编辑过]

 

一模一样,请认认真真看。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 15:18:00 [显示全部帖子]

要整体计算啊,完整看完之前的实例啊。在理解代码理解思路的前提下写代码啊。

 

Dim dd As String = "A"
Dim drs1 As List(Of DataRow) = DataTables("收款").Select("订单号='" & dd & "'", "_Identify")
Dim drs2 = DataTables("订单").Select("订单号='" & dd & "'", "_Identify")
Dim i As Integer = 0
Dim fk As Double = drs1(i)("付款金额")
Dim yf As Double = 0
Dim fkfss As String = ""
Dim fkjes As String = ""
Dim flag As Boolean = False
For j As Integer = 0 To drs2.count-1
    Dim dr As DataRow = drs2(j)
    If flag = False Then
        yf = dr("应付金额")
    End If
    If fk >= yf Then
        fk = fk - yf
        fkfss &= drs1(i)("付款方式") & ","
        fkjes &= yf & ","
        dr("付款方式") = fkfss.trim(",")
        dr("付款金额") = fkjes.trim(",")
        flag = False
        fkfss = ""
        fkjes = ""
    Else
        fkfss &= drs1(i)("付款方式") & ","
        fkjes &= fk & ","
        yf = yf - fk
        i += 1
        fk = drs1(i)("付款金额")
        j -= 1
        flag = True
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/13 17:51:00 [显示全部帖子]

Dim dd As String = "A"
Dim drs1 As List(Of DataRow) = DataTables("收款").Select("订单号='" & dd & "'", "_Identify")
Dim drs2 = DataTables("订单").Select("订单号='" & dd & "'", "_Identify")
Dim i As Integer = 0
Dim fk As Double = drs1(i)("付款金额")
Dim yf As Double = 0
Dim fkfss As String = ""
Dim fkjes As String = ""
Dim flag As Boolean = False
For j As Integer = 0 To drs2.count-1
    Dim dr As DataRow = drs2(j)
    If flag = False Then
        yf = dr("应付金额")
    End If
    If fk >= yf  Then
        fk = fk - yf
        fkfss &= drs1(i)("付款方式") & ","
        fkjes &= yf & ","
        dr("付款方式") = fkfss.trim(",")
        dr("付款金额") = fkjes.trim(",")
        flag = False
        fkfss = ""
        fkjes = ""
    ElseIf i = drs1.count-1 Then
        fkfss &= drs1(i)("付款方式") & ","
        fkjes &= fk & ","
        dr("付款方式") = fkfss.trim(",")
        dr("付款金额") = fkjes.trim(",")
        flag = False
        fkfss = ""
        fkjes = ""        
    Else
        fkfss &= drs1(i)("付款方式") & ","
        fkjes &= fk & ","
        yf = yf - fk
        i += 1
        fk = drs1(i)("付款金额")
        j -= 1
        flag = True
    End If
Next

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/14 9:12:00 [显示全部帖子]

以下是引用blackzhu在2018/12/14 8:28:00的发言:
测试了一下,各种可能性基本可以了,有点小瑕疵可以忽略.


我理解能力有问题,有一个不太明白,为啥j需要自身减一,还有为啥 i= drs.count-1 就可以了

 

1、j -= 1 因为每次for循环 j 都会加1,为了下次循环,j的值不变。

 

2、当付款记录是最后一行的时候,也就没有可以抵扣的金额了,如果不够,也没办法了。


 回到顶部