www.gusucode.com > 精典源码Delphi124:天心源码 > 精典源码Delphi124:天心源码/天心源码/Pascal/ACCBFG.txt
损 益 表 程序名称 : 损益表(多对象别比较) 程序代号 : ACCBFG 始创建人 : 祝国华 始创时间 : 1999-07-21 基本描述 : 损益表是反映企业在一定期间的经营成果及分配情况的报表。报表的内容 包括了五大科目类。科目的关系:营业收入、营业成本、营业费用、非营业收 益、非营业损失。将所有收入总和减去报有费用及成本的总和,就是企业在此 段时间内获利(或亏损)的金额,称之为纯益(或纯损)。做一份损益表的结果是 为了让人能够清楚了解到企业获利(或亏损)的过程,所以必须有正确的分类显 示才可提供更详细的结果。企业应按月编报。 损益表(多对象别比较)是在反映在一定期间内经营成果及其分配情况的 报表的基础上,加上在同一部门下的不同种的对象别进行平行比较,反应不同 对象别在某一期间的税前利润的报表。与多部门比较类似。 内容描述 : Now_Cur : 币别种类 Exc_Rto : 外币汇率 默认值:=1 My_Cur_Id : 币别 Update_Now : 控制计算对象别的状态:第一次计算:False;其后:True GrphNo, GrphDep, AMTN_Grph : 图形库字段变量 SrcList : 对象别原始记录串 DstList : 被选取的对象别的记录串 ED_Dep_F3 : F3 条件内的部门统计选项返回的结果。 默认值:0000 Combo_Dep_F3 : F3 条件内的部门列示选项返回的结果。 默认值:0 含所属 Rep_Edit_Text : F3 条件内的报表公式选项返回的结果。 默认值:40 My_User_Datas : SaveUserData 、LoadUserData 条件改变结果返回串 Cur_Lang : 中英文:0 means China 1: means English} Cur_ID_Clicked: 判断是否为英汉转换 MakeTableHead; 打印表头 CheckValue:Boolean; 检查是否符合制表条件 WriteToGraph; 写入图形库 AppendToReport(No:integer); 增加Report库 UpdateToReport(No:integer); 修改Report库 SumToReport; 计算Report库 CreateReportTbl; 创建Report,EngTable,ChinaTable临时库 ReloadReportLbl; 币别、语言改变时重新刷新、整理Report库的显示的表头 WMCondense message WM_CONDENSE; 发送消息,让损益表按不同的层次显示 Curid_HasChanged; 币别改变后,重新换算外币金额 ReDisPlayLabel; 重组含外币时的表头 Combo_DepChange(Sender: TObject); //改变部门列示方式 EditObjToList; 抓取不同种类的对象别,并放入SrcList,DstList中 FindResultName 由对象别代号取对象别名称 ListToObjEdit 由DstList重组存储的对象别代号 CreateGraph; 创建图形库 RstName: Repgen ---报表公式产生器主程序取出的损益表明细库 DtlName: Repgen ---损益表明细库的辅助资料库,此为中间过程,无实际意义 定义临时的 EngTable库: TableName:FG_ENG****.Db Databasename: C:\Windows\Temp\ GetTempTblName('FG_ENG', TempDatabaseName, TempTblName); TempTblName :=Copy(TempTblName, 1, Pos('.', TempTblName)-1); EngTable.DataBaseName:=TempDatabaseName; EngTable.TableName :=TempTblName; 创建Report库注意事项: 由于Report库为一个数据字段为动态变换的字段、并且含有双重表头。 在创建的过程中应特别注意: 清除上层表头: FunctionButtons1.Level_Name[I]:=''; FunctionButtons1.Level_Fields[I].Clear; 释放已经定义的字段: Report.Close; for J:=0 to FieldCount-1 do Report.Fields[0].Free; Report.FieldDefs.Clear; 创建Report的字段: For I := 0 To Report.FieldDefs.Count - 1 Do Report.FieldDefs.Items[I].CreateField(Report); 创建图形库: 由不同的对象别类型来定义不同的图形结构: Case OBJ_Type.ItemIndex of 0: GrphDep:=LoadFormStr(10200); 自设代号 1,4: GrphDep:=LoadFormStr(10201); 客户/厂商 2: GrphDep:=LoadFormStr(10202); 业务员 3: GrphDep:=LoadFormStr(10203); 帐户代号 5: GrphDep:=LoadFormStr(10204); 货品代号 6: GrphDep:=LoadFormStr(10205); 工程案号 end; Add(GrphDep, ftString, 30, False); GrphNo:='Null'; Add(GrphNo, ftString, 10, False); KeyField := GrphDep+';'+ GrphNo; AMTN_Grph:=LoadFormStr(10103);金额 Add(AMTN_Grph, ftFloat, 0, False); 产生损益表: 由报表公式产生器主程序以每一个对象别来计算损益 RepBuild.RepGen( Rep_Edit_Text, R_TWtoChina(B_DD.Text), R_TWtoChina(E_DD.Text), ED_Dep_F3,Combo_Dep_F3, '1', 'F', ' ', Copy(DstList.Strings[I-1], 1, Pos('---', DstList.Strings[I-1])-1), RstName, DtlName, @FProgress, ''); 在关闭程序时,释放创建的临时库: if RstTable.TableName<>'' then RstTable.Close; if RstName<>'' then begin Try RstTable.TableName:=RstName; RstTable.Close; RstTable.DeleteTable; Except End; 注意事项 : 类型是选择不同的对象别的种类;对象别是选择不同对象类型的不同的对象 别。在选择对象别横向比较时,为了不影响速度,选择的对象别个数不要太多。 基本流程 : ===>CreateReportTbl ===>MoveEngTable ===> ===>英汉转换 FormCreate==> LoadUserData===> FormShow ==>Function1Maketable===>RepGen计算损益表 ===>SumReport ==>MoveToReport===>WM_CONDENSE求层次===>WriteGraph===>外币换算===>FormClose===>FormDestroy ===>CreateGreph ===>MoveChinaTable ===> 小 技 巧 : 修改时间 : 修改描述 : 修 改 人 :