平煤报表开发过程.docx

上传人:b****9 文档编号:25062762 上传时间:2023-06-04 格式:DOCX 页数:43 大小:1,016.07KB
下载 相关 举报
平煤报表开发过程.docx_第1页
第1页 / 共43页
平煤报表开发过程.docx_第2页
第2页 / 共43页
平煤报表开发过程.docx_第3页
第3页 / 共43页
平煤报表开发过程.docx_第4页
第4页 / 共43页
平煤报表开发过程.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

平煤报表开发过程.docx

《平煤报表开发过程.docx》由会员分享,可在线阅读,更多相关《平煤报表开发过程.docx(43页珍藏版)》请在冰豆网上搜索。

平煤报表开发过程.docx

平煤报表开发过程

平煤报表开发文档

1单层表头固定列模板开发

1.1报表模板

客户化\二次开发工具\模板管理\报表模板初始化

节点编码和功能注册节点编码一致最好

输入节点编码,如果是数据库里不存在此节点编码则新建立了模板,

字段名称来自于表样给的名称;字段代码自己编;如果某一列需要合计等计算,数据类型需要选择整数或小数;如果字段只是程序中使用并不需要显示比如主建,设置位置位于报表头还是报表体;选择类型需要选择“终身隐藏”;如果字段显示时候需要经过公式处理,则选择原始公式列并写上公式,如公式unitcode->getColValue(bd_corp,unitcode,pk_corp,pk_corp)等价于selectunitcodefrombd_corpwherepk_corp=?

?

传入的是字段代码pk_corp的值,并附值给字段代码unitcode列。

报表模板配置如下图一:

图一

显示效果如下图二:

图二

1.2查询模板

客户化\二次开发工具\模板管理\查询模板初始化

查询模板编码和报表模板编码要一致。

点“增加”按钮,在弹出的界面点击取消按钮,出现下图的界面,然后输入模板编码,模板名称,所属节点编码等。

点“保存”按钮,将查询报表先保存下来,然后点修改按钮,点击增行,输入查询条件项。

字段名称来自于表样给定的名称,字段编码自己编,数据类型如果是选择参照,参照名称按<参照类>格式编写,如果是下拉,参照名称按IX,value1=key1,value2=key2格式编写(可能还有其他格式,尚没搞清楚)。

查询模板配置如下图三:

图三

显示效果如下图四:

2功能注册

2.1添加功能注册

用集团用户进入系统,客户化\二次开发工具\系统管理工具\功能注册。

“对应文件名或控制名”的类名是点击功能节点之后进入到报表的入口类(项目中已经改名为nc.ui.pmrt.rpt.base.PmrtUIManager,不是截图中的类)。

这个类见附录。

增加“可执行功能节点”之后,再增加“参数”。

选中刚刚增加的可执行功能节点之后(比如示例中的本单位预算执行情况),然后点击“增加”按钮,出现下图画面,功能性质下拉框选中“参数”,参数编码输入“classname”,参数值输入报表的UI类,这个类随后附上。

点击保存按钮,功能注册完毕。

也可以继续点击“增加”,继续增加报表中需要的按钮,用于按钮权限控制,不详述。

 

2.2权限分配

客户化\权限管理\权限分配

功能注册之后,需要分配权限才能看到新注册的功能。

集团用户进入,点击分配,然后勾选。

2.3关联功能节点和模板

客户化\二次开发工具\系统管理工具\功能节点默认模板设置

给新增加的功能节点分配查询模板和报表模板。

3程序开发

1

2

3.1报表基类

类名

功能描述

client基类

nc.ui.pmrt.rpt.base.PmrtUIManager

报表入口类,所有报表都通过这个入口,通过配置不同参数对应不同报表UI类

nc.ui.pmrt.rpt.base.ReportUI

报表UI继承的基类

nc.ui.pmrt.rpt.base.PanelModel

报表Model控制类基类

nc.ui.pmrt.rpt.base.IDialog

报表查询对话框接口

nc.ui.pmrt.rpt.base.QueryDialog

报表查询对话框基类

nc.ui.pmrt.rpt.base.QueryDialogPlus

报表查询对话框工具类

Public基类

nc.vo.pmrt.rpt.base.BaseVO

报表VO基类,实现了CircularlyAccessibleValueObject

nc.itf.pmrt.rpt.base.IPanelModel.IPanelModel

报表Model控制类基类接口

3.2报表自定义类

自定义报表类目录命名规则:

pm+模板编码。

如pm36187001。

1.FpClientUI.java

UI界面类,下列需要自己修改的方法:

nodeCode//变量,报表模板编码

nodeName//变量,联查下一个报表的UI类

getBtnAry()//返回报表对应的按钮数组

getQueryVO()//返回自定义的报表查询VO

getPanelModel()//返回报表控制类

需要实现的按钮响应方法

2.FpPanelModel.java

控制类,excQuery()//查询对话框执行的查询动作

3.nc.ui.pmrt.rpt.base.CenterQueryDialog

报表查询对话框类

修改方法getQueryDlg()

4.ReportQueryVO.java

自己的查询VO类,继承循环VO

5.FpPlanVO.java

自己写的报表体显示记录VO,继承循环VO,注意VO字段必须和报表模板字段代码名称一致。

6.IPMRTPlan.java

查询报表记录的类的接口

7.PMRTPlanImpl.java

查询报表记录的类,调用PlanDMO。

8.PlanDMO.java

查询记录的DAO类

9.FpDetailClientUI.java

联查明细界面的UI类

10.FpDetailPanelModel.java

联查明细界面的控制类

3.3配置文件

增加了配置文件Pmrt.upm,在这个配置文件增加PMRTPlanImpl的接口。

4多层表头固定列报表模板开发

4.1模板建立

客户化\模板管理\模板设置\帐表模板设置

先按单层表头模板开发,开发完然后进入到客户化\模板管理\模板设置\帐表模板设置路径下,选中增加的单层表头的模板,如下图,然后点击增加模板按钮,“表体结构”按钮变成可用的了,点击“表体结构”按钮,出现设置表体结构窗口,进行列表头的合并。

然后保存,新增加了一个报表模板编码,编码不能和原默认模板编码一样。

4.2模板分配

客户化\模板管理\模板分配

新建多层表头之后,必须进行模板分配,否则看到的仍然是默认报表模板(单层表头的那个模板),选择报表,选择用户,点击分配按钮,选择要分配的模板,保存。

最后效果如下图:

4.3多层表头固定列报表程序开发

和单层列表头程序开发一样,没有特别的。

5多层表头动态列表头报表开发(交叉报表)

5.1模板建立

多层动态列表头报表模板和普通报表模板有所不同。

如下图的表样,在画模板时公司列也单独作为报表模板的一列(合计被当作公司了)。

报表模板配置。

5.2交叉报表程序

单层固定列表头报表DMO类的开发,界面上需要显示哪些字段,在DMO的SQL就select出哪些字段即可。

而交叉报表的SQL写法有很大不同。

如上图具体SQL是这样的。

Select计划项目,全年累计,公司,当日执行数,本月执行数

fromtable

where1=1

结果如下

计划项目,全年累计,公司,当日执行数,本月执行数

各单位款项231.11合计11.1122.33

转帐收入544.44合计6443.334443.33

各单位款项111.11100151.1132.33

转帐收入222.4410013323.33332.33

转帐收入252.441002523.33537.33

在程序进行交叉之后,就转为:

|合计|1001|1002|

计划项目|全年累计|当日|本月|当日|本月|当日|本月|

各单位款项|231.11|11.11|22.33|51.11|32.33|||

转帐收入|544.44|6443.33|4443.33|3323.33|332.33|523.33|537.33|

6脚本导出

通过root用户进入到系统管理帐套。

“查询模板”按钮导出脚本

pub_query_templet

pub_query_condition

“报表模板”按钮导出脚本

pub_report_templet

pub_report_model

多层合并列表头报表模板导出脚本

pub_report_group

pub_report_model

双击“功能节点注册”

sm_funcregister

双击“按钮注册”导出classname和各个按钮脚本。

sm_butnregister

报表模板和查询模板分配脚本,界面上没找到导出按钮

pub_systemplate

7报表打印功能添加

7.1UAP平台打印工具的类的修改

画打印模板要先生成数据源变量,修改了类nc.impl.uap.print.PrintToolsDAO,

原来代码如下:

由于原来代码返回的items为空,在生成打印模板的数据源变量时候报错,故修改后代码如下:

7.2生成打印模板

二次开发工具-〉UAP集成开发工具-〉点击第一个进入

然后点击工具导航-〉模板管理工具-〉打印模板生成工具。

输入节点号“36H10101”,点击报表单选钮,选中此报表模板。

点击“生成”菜单。

打印模板数据源变量生成成功。

7.3打印模板分配

二次开发工具-〉系统管理工具-〉功能节点默认模板-〉分配打印模板

7.4根据生成的数据源画打印模板

只有执行了7.1步骤,才能生成下图右边的数据源变量,画模板的时候可以直接拖拽数据源变量。

进入二次开发工具-〉模板管理-〉打印模板初始化,选择计划报表,选择系统生成模板,然后点击修改,重新画打印模板。

7.5打印的代码

打印的这些方法也是放到ReportUI基类里的,不用每个报表写。

模板打印:

在基类ReportUI里增加方法,点击模板打印按钮时调用这个方法。

//使用打印模板

publicvoidonPrintTemplate(){

IDataSourcedataSource=newCardPanelPRTS(getPanelModel()

.getNodeCode(),

getPanelModel().getPanel());

PrintEntryprint=newPrintEntry(this,dataSource);

print.setTemplateID(getCorpPrimaryKey(),getPanelModel()

.getNodeCode(),getClientEnvironment().getUser()

.getPrimaryKey(),null);

if(print.selectTemplate()==1){

print.preview();

}

}

直接打印:

所见即所得。

只有第一页打印出列表头。

publicvoidonPrint(){

if(getReportPanel().getBillModel().getRowCount()<=0){

showErrorMessage("没有数据,请查询数据");

return;

}

//得到表体表

nc.ui.pub.beans.UITabletable=null;

table=getReportPanel().getBillTable();

PrintDirectEntryprint=nc.ui.bd.printadapter.PrintManager

.getDirectPrinter(table);

print.setData(getTableData(table));

//设置表头内容(在表格外部)

print.setTopStr(getHeadStr());

//页码显示格式

print.setPageNumStyle("第","页共","页");

//设置打印标题

print.setTitle(getTitle());

print.preview();

}

直接打印:

所见即所得。

每一页都打印列表头,代码比较多,不列出了。

onDirectPrint()。

报表头的自动拼接方法:

直接打印时,打印报表头的字符串。

这个方法也是放到ReportUI基类里的,不用每个报表写。

//拼接打印的表头

publicStringgetHeadStr(){

ReportItem[]items=getReportPanel().getHead_Items();

StringBufferheadStr=newStringBuffer();

ArrayListlist=newArrayList();

if(items!

=null){

for(inti=1;i

list.add(items[i]);

}

Collections.sort(list,this.sortComparator());

for(inti=0;i

ReportItemitem=(ReportItem)list.get(i);

headStr.append(item.getName()+":

"+item.getValueObject()+"");

}

}

returnheadStr.toString();

}

//按ReportItem的显示顺序排序

publicComparatorsortComparator(){

Comparatorcomparator=newComparator(){

publicintcompare(ReportItemitem1,ReportItemitem2){

if(item1.getShowOrder()!

=item2.getShowOrder()){

returnitem1.getShowOrder()-item2.getShowOrder();

}elseif(!

item1.getName().equals(item2.getName())){

returnitem1.getName().compareTo(item2.getName());

}

return0;

}

};

returncomparator;

}

8报表的交叉方法

8.1UAP平台交叉类的修改

nc.vo.pub.cquery.CrossTable0。

屏蔽以下代码,使返回到界面的记录行不自动排序,比如计划项目的如果按这个代码排序之后就乱了。

//jl+交叉值不排序

//zjb改//modibyyi2011.7.26

//if(i!

=typePos){

//java.util.Collections.sort(v,comparator);

//}

8.2交叉方法的使用

String[]rowKeys=newString[]{"itemname,total_year",};//固定列

String[]colKeys=newString[]{"pk_corp","&type"};//按公司交叉

String[]values=newString[]{"deptdaysum","deptmonthsum"};//当日,本月

accAmtPanel.drawCrossTable(rowKeys,colKeys,values);//交叉方法

9报表的合计

//求合计

SubtotalContextstctx=newSubtotalContext();

stctx.setIsSubtotal(false);

stctx.setTotalNameColKeys("unitName");

stctx.setSumtotalName(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("36106050","UPP36106050-000044")/*@res"--合计--"*/);

stctx.setSubtotalCols(newString[]{"zszcjh","zcjh","zctz","zczx","zsce","zcce"});//这些字段代码均是小数型,不是字符型

accAmtPanel.setSubtotalContext(stctx);

accAmtPanel.subtotal();

accAmtPanel.updateValue();

accAmtPanel.updateUI();

10增加表格体双击监听

//增加表格体监听,单击表格弹出明细界面双击表格单元格进行动作

publicvoidaddCellListener(){

(getPanelModel().getPanel()).getBillTable().addMouseListener(newjava.awt.event.MouseAdapter(){

publicvoidmouseClicked(MouseEvente){

if(e.getClickCount()==2){

onDetail();

}

}

});

}

11自定义参照开发

自定义参照继承AbstractRefModel。

实现方法getFieldCode(),getFieldName(),getHiddenFieldCode(),getPkFieldCode(),getRefTitle(),getTableName(),getWherePart()。

12报表实例一(单层表头固定列模板开发)

12.1需求

本单位预算执行情况分析表

12.2报表模板

12.3查询模板

12.4功能注册

12.5UI类

1.FpCurrBudgetClientUI.java需要修改的地方,继承ReportUI。

//模板编码

nodeCode="36H10101";

//联查明细UI类

nodeName="nc.ui.pmrt.rpt.pm01.FpDetailClientUI";

//返回报表对应的按钮数组。

查询,刷新,打印,联查明细

publicnc.ui.pub.ButtonObject[]getBtnAry(){

returnnewButtonObject[]{m_boQuery,m_boRefresh,m_boPrint,m_boDetail};

}

//返回查询VO

publicBaseVOgetQueryVO(){

if(query==null){

query=newReportQueryVO();

}

returnquery;

}

//返回查询MODEL

publicIPanelModelgetPanelModel(){

if(m_dataModel==null){

m_dataModel=newFpCurrBudgetPanelModel();

}

returnm_dataModel;

}

//联查明细

publicvoidonDetail(){

intindex=(getPanelModel().getPanel()).getBillTable()

.getSelectedRow();

intcount=(getPanelModel().getPanel()).getBodyPanel().getTableModel()

.getRowCount();

if(index<0||index>count-1){

showErrorMessage("请选择一条记录!

");

return;

}

FpPlanVOselectedVO=(FpPlanVO)(getPanelModel()

.getPanel()).getBodyPanel().getTableModel().getBodyValueRowVO(

index,"nc.vo.pmrt.rpt.pm01.FpPlanVO");

if(selectedVO==null

||selectedVO.getAttributeValue("pk_corp")==null

||selectedVO.getAttributeValue("pk_corp").equals("")){

showErrorMessage("请选择一条记录!

");

return;

}

if(m_cardView==null){

m_cardView=(nc.ui.glpub.IUiPanel)m_parent

.showNext(getNodeName());

}else{

m_parent.showNext(m_cardView);

}

ReportQueryVOquery=(ReportQueryVO)getQueryVO();

query.setPk_corp(selectedVO.getAttributeValue("pk_corp").toString());

query.setCreatetype(selectedVO.getCreatetype());

//query.getPk_period();

//query.getPk_sheet();

m_cardView.invoke(query,"联查明细");

}

2.FpCurrBudgetPanelModel.java类,继承PanelModel。

//查询模板编码

nodecode="36H10101";

//返回查询对话框类

publicIDialoggetIQueryDlg(){

if(idlg==null){

idlg=newFpCurrBudgetQryDlg();

idlg.setPanelModel(this);

}

returnidlg;

}

//查询后台结果返回

publicjava.util.VectorexcQuery(BaseVOqueryvo){

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1