富盛SBO程序">开发框架中缺省集成了FastReport作为报表打印的控件,并且可以轻易实现SBO报表查询和打印集成。
富盛SBO程序开发框架支持使用Matrix或者Grid组件作为报表查询结果显示控件,当然,也可以不在SBO中显示查询结果,而直接将报表数据结果显示在FastReport中。
富盛SBO程序开发框架使用Grid组件进行FastReport报表打印、显示集成的基类为fsSboReportGridQueryForm,这个基类包括以下几个属性:
报表文件:ReportFileName,字符型
报表查询语句,包括四部分,基类会在GetReportQuerySQL函数中组装,
SELECT语句:ReportQueryStr,字符型
WHERE子句:根据查询条件由GetReportWhereSQL()生成,应该被重载
GROUP子句:ReportGroupStr,字符型
ORDER子句:ReportOrderStr,字符型
子报表类型,比如:分配排序等:strSubReportList,字符型
格式:
格式1:子报表1代码,子报表1描述|子报表2代码,子报表2描述|...|子报表n代码,子报表n描述
格式2:子报表1描述|子报表2描述|...|子报表n描述,这时代码为1,2,3...n
子报表名称为: ReportFileName + 子报表代码 + ".fr3"
请继承PostExtPrintTypeSet,并处理这些子报表对应的查询语句
实例:
strSubReportList = "测试报表类型01|测试报表类型02|测试报表类型03";
strSubReportList = "Test1,测试报表类型01|Test2,测试报表类型02|Test3,测试报表类型03";
是否在当前界面上通过显示Grid显示报表信息:UseReportGrid,布尔型
UseReportGrid = true;使用Grid控件,这个时候请不要指定ButtonTop值
UseReportGrid = false;不使用Grid控件
上面的属性指定之后,调用由fsSboReportGridQueryForm集成的类实例,就完成了基础的布局。最简单的,这个时侯需要获得报表分析的条件。报表分析条件对于报表来讲应该是必须的,也是动态的,为此富盛SBO程序开发框架开放了报表分析条件方法GetReportWhereSQL,在报表分析类中,这个方法应该被重载。
如果指定了子报表类型strSubReportList,报表类将自动根据子报表类型找到相应的子报表,当然子报表的数据显示格式可能不同,所以对应的报表名称也就各自不同(子报表名称=主报表名称+子表代码),当然对于子报表的数据分析条件也应该有所动态化的定义,那么请重载方法PostExtPrintTypeSet即可完成,以处理这些子报表对应的查询语句。
实例:以下这个简单的类,就实现了使用FastReport进行数据分析报表及其子报表的管理,看看富盛SBO程序开发框架的确非常简便了很多复杂问题的解决。
class fsCxFRptTestForm : fsSboReportGridQueryForm { public fsCxFRptTestForm(fsSboCommon fs) : base(fs) { ReportFileName = fsSbo.thiSAPpPath + @"ReportsfsCxFRpt.fr3"; ReportQueryStr = "___select " + fsSbo.GetAllUserField4Table("@FSCXFITEM
BATINFO", true, "a") + " FROM [@FSCXFITEMBATINFO] a "; ; ReportGroupStr = ""; ReportOrderStr = "U_WhsCode, U_InDate, U_ItemCode"; strSubReportList = "Test1,测试报表类型01|Test2,测试报表类型02|Test3,测试报表类型03"; UseReportGrid = false; } //将报表的检索统计条件加入到界面中,必须被重载 protected override bool AddQueryConditions2Form() { Boolean bRet = base.AddQueryConditions2Form(); try { oForm.DataSources.UserDataSources.Add("dsWhs", BoDataType.dt_SHORT_TEXT, 20); fsSbo.AddStaticText2Form(ref oForm, "stWhs", "仓库", 10, 10, 60, 14); ComboBox cbx = fsSbo.AddCombox2Form(ref oForm, "cbWhs", "", "dsWhs", 10, 70, 80, 14); fsSbo.AddValidValues2Combox(ref cbx, "___select WhsCode, WhsName FROM OWHS Order by WhsCode"); cbx.ValidValues.Add("", "所有"); if (UseReportGrid) fsSbo.AddButton2Form(ref oForm, "btnQuery", "检索", 7, 220, 65, 20); AllowReportPrint = true; } catch (Exception ex) { fsSbo.ShowMsg("错误:" + ex.Message); bRet = false; } return bRet; } //获得报表查询语句中的WHERE查询子句的函数,这个函数应该被重载 protected override string GetReportWhereSQL() { string strRet = ""; try { string strValue = fsSbo.GetValue4Item(oForm, "cbWhs"); if (strValue.Length > 0) { strRet = "U_WhsCode=N'" + strValue + "'"; ReportNotesStr = " 仓库 " + fsSbo.GetDescription4Combox(oForm, "cbWhs") + "[" + strValue + "]"; } if (strRet.Length > 0) if (!strRet.Trim().ToUpper().StartsWith(" WHERE ")) strRet = " WHERE " + strRet; } catch (Exception ex) { strRet = ""; fsSbo.ShowMsg("错误:" + ex.Message); } return strRet; } }}
结果展示,上述代码的运行结果如下图所示。
左下角就是子报表的显示列表,不过在这个例子中我们并没有对子报表的相关条件进行处理和约束,真正要做报表的时候需要处理,否则子报表就显得没有任何意义。
点击打印按钮就可以实现报表数据的现实和打印,点击设计按钮就可以实现对打印报表的格式设计。因为我没有对报表结果进行打印设计,所以在此就不展示打印结果了。
就这么简单的几十行代码--一些还是系统自动生成的,就完成了使用富盛SBO程序开发框架中使用FastReport进行报表设计。
需要指出的是,富盛SBO程序开发框架下的报表集成不光支持SELECT查询分析语句,还支持存储过程调用。
本文出自 “富盛软件” 博客,请务必保留此出处http://foresun.blog.51cto.com/221037/103133