高分寻求解答.(200分)

  • 主题发起人 主题发起人 happyok
  • 开始时间 开始时间
H

happyok

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个这样的报表:
项目 本月数 本年累计数
医疗收入
药品收入
......
本月数的数据来自凭证库11,结构如下:
借方科目名称 贷方科目名称 金额

医疗收入 固定资产 800
药品收入 固定资产 900
...... ...... ......
医疗收入的本月数=医疗收入本月总金额(借方科目名称)-医疗收入本月总金额(贷方科目名称).
我想用quickreport实现.哪伟大虾帮忙解决,高分奉上.
最好详细讲解一下,给一个程序.
 
用两个Query
Query1.SqL:
Select 借方科目名称, sum(金额) from table1 group by 借方科目名称
Query2.Sql:
Select 贷方科目名称, sum(金额) from table1 group by 贷方科目名称
然后在 科目表上,新建两个 Lookup 字段,分别依据科目名称查出 Query1 和
Query2中的发生额,再做一个 Calculate字段,得出两者之差,即所需要的“收入”
字段。
以科目表做为 QReport 的 Dataset 就可以了
 
to crab:
又要建新表,是否复杂了点.能不能在本月数中,用tqrexpr来实现.求教.
 
看了你上叙的问题,觉得你没做好系统分析,会计的Know How不是像你的Table那样。
一般的会计软件有月基本资料文件(是存没有过帐前的帐)和总帐资料文件,因此要做系统分析前你要先了解你是否是批次作业还是一笔一笔过帐,才对你的Table下功夫。
 
可以再加一个DataSet(Table),用来查找数据,然后做运算。
我以前是这么作的。
 
一、仅就你的问题提供一个思路,细节自己搞定。
1〉var AnItem:string 指定某个项目,如‘医疗收入’
2〉动态设置Query1的SQL:select * from 凭证库11 where 借方科目名称=AnItem or 贷方科目名称=AnItem
3〉设置计算字段Query1tot,Query1CalcFields事件处理:
begin
if Query1借方科目名称.AsString = AnItem then
Query1tot.Value := Query1mn.Value
else
Query1tot.Value := -1*Query1mn.Value;
end;
4〉报表中QRExpr的表达式:SUM(Query1.tot)就是你要求的某项目的本月数,如‘医疗收入’的本月数
二、题外:
1〉你的凭证库结构应该优化,那种结构会造成很多后续处理的麻烦:
科目编码 科目名称 借方金额 贷方金额
XXX 医疗收入 800 0
XXX 医疗收入 0 900
......
2〉实际工作中,同一凭证库的科目性质有两种:
余额 = 借方 - 贷方
余额 = 贷方 - 借方
余额,既你提到的‘差额’。所以,编程中还需要很多复杂的处理。
见笑!
 
补正:Query1mn 既 Query1金额。
另:我已经测试通过。
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部