以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]账龄表的查询代码,已经上传例子,请老师帮忙下,10楼有新问题,请老师看下  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113398)

--  作者:huangfanzi
--  发布时间:2018/1/15 13:58:00
--  [求助]账龄表的查询代码,已经上传例子,请老师帮忙下,10楼有新问题,请老师看下
做了个例子,项目中有:
发货表:记录某公司的发货日期与金额
收款表:记录某公司的收款日期与金额
账龄表:是我人工做的账龄
请老师写个代码能用查询表生成例子中的账龄表,想了二天了,实在做不出来。万分感谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:账龄计算测试.zip



[此贴子已经被作者于2018/1/15 19:47:00编辑过]

--  作者:有点甜
--  发布时间:2018/1/15 14:12:00
--  

方法一:参考

 

http://www.foxtable.com/webhelp/scr/0681.htm

 


--  作者:huangfanzi
--  发布时间:2018/1/15 14:21:00
--  
这个例子我看过,现在的困难在于做出发货金额的时段分布图后,如何再用收到的款去减各个时段的发货金额,并优先减最早时段发货的,对SQL语句就懂些皮毛,这里有点搞不定了。
--  作者:有点甜
--  发布时间:2018/1/15 14:42:00
--  

方法二:如果sql语句,就这样写

 

select 公司, sum(应收款) as 应收款, (select sum(应收款) from (select 公司, datediff(\'d\', 收款日期, date()) as 天数, -收款金额 as 应收款 from {收款} union all select 公司, datediff(\'d\', 发货日期, date()) as 天数, 发货金额 from {发货}) as b where a.公司=b.公司 and b.天数 >= 1 and b.天数 <= 30) as [账龄1-30天],(select sum(应收款) from (select 公司, datediff(\'d\', 收款日期, date()) as 天数, -收款金额 as 应收款 from {收款} union all select 公司, datediff(\'d\', 发货日期, date()) as 天数, 发货金额 from {发货}) as b where a.公司=b.公司 and b.天数 >= 31 and b.天数 <= 60) as [账龄31-60天] from (select 公司, datediff(\'d\', 收款日期, date()) as 天数, -收款金额 as 应收款 from {收款} union all select 公司, datediff(\'d\', 发货日期, date()) as 天数, 发货金额 from {发货}) as a group by 公司


--  作者:有点甜
--  发布时间:2018/1/15 14:45:00
--  
以下是引用huangfanzi在2018/1/15 14:21:00的发言:
这个例子我看过,现在的困难在于做出发货金额的时段分布图后,如何再用收到的款去减各个时段的发货金额,并优先减最早时段发货的,对SQL语句就懂些皮毛,这里有点搞不定了。

 

比如你要计算 1-30日的,那就合成条件如

 

"发货日期 >= #" & date.Today.AddDays(-30) & "# and 发货日期 <= #" & date.Today.AddDays(-1) & "#"

[此贴子已经被作者于2018/1/15 14:44:51编辑过]

--  作者:huangfanzi
--  发布时间:2018/1/15 14:52:00
--  
老师,代码有问题啊,datediff(\'d\',   这一段中的  导致后面的代码变成灰色了
--  作者:有点甜
--  发布时间:2018/1/15 14:59:00
--  
以下是引用huangfanzi在2018/1/15 14:52:00的发言:
老师,代码有问题啊,datediff(\'d\',   这一段中的  导致后面的代码变成灰色了

 

认认真真看懂上面说什么了啊 http://www.foxtable.com/webhelp/scr/1484.htm

 


--  作者:huangfanzi
--  发布时间:2018/1/15 18:32:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:账龄比对.jpg
图片点击可在新窗口打开查看
老师,附件是我根据您的例子依样写的代码,但查询的结果是不对的,所出的问题在下面的图上,请帮我看看,谢谢!另外奇怪的是,我怎么直接发出不代码,而老师能发出来。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:sql代码.txt





[此贴子已经被作者于2018/1/15 18:32:57编辑过]

--  作者:有点甜
--  发布时间:2018/1/15 19:00:00
--  

1、根据发货表,统计应收金额,如

 

http://www.foxtable.com/webhelp/scr/0681.htm

 

2、请自行完成第一步。

 

3、循环统计表的每一行,统计收款表的总和,从最后一列依次减去对应的数额即可。

[此贴子已经被作者于2018/1/15 19:01:20编辑过]

--  作者:huangfanzi
--  发布时间:2018/1/15 19:38:00
--  
我有思路了,看来不能用一条SQL语句做,我就分步做,下面的代码请老师帮我看下:
Tables(e.Form.Name & "_Table1").Fill("s elect 公司,SUM(发货金额) as 发货金额,(s elect  sum(收款金额) from {收款} b where a.公司 = b.公司 ) as 收款金额 f rom {发货} as a group by 公司",True)

If DataTables(e.Form.Name & "_Table1").datacols.Contains("应收款") Then
Else
    DataTables(e.Form.Name & "_Table1").DataCols.Add("应收款", Gettype(Double))
End If

For Each r As Row In Tables(e.Form.Name & "_table1").Rows
r("应收款") = r("发货金额") - r("收款金额")
Next
上面的代码是可以达到我想的要求,但感觉太繁琐,如何在SQL语句中把应收款直接做上去,就像老师你上面的代码得到的结果,上面的代码我没看明白是如何得到应收款的
关键是我想在SQL语句中加个条件,让应收款为负数的(就是不欠钱)不要出现在table表中
[此贴子已经被作者于2018/1/15 19:39:13编辑过]