☰
D365 SSRS 报表开发
2026/10/23 1:45:53 网站建设 项目流程

1创建一个TmpDB类型的临时表

把自己需要的字段加上

2创建一个参数类 简称 XXXcontract

class IWS_wj_Constract { int64 id; str item_number; List list; [DataMemberAttribute] public int64 parmId(int64 _id = id) { id = _id; return id; } [DataMemberAttribute] public str parmItem_number(str _item_number = item_number) { item_number = _item_number; return item_number; } //[ datamember, // datamemberattribute('list'), // aifcollectiontype("list",types::string), // aifcollectiontype("return",types::string) // ] [ dataMember, DataMemberAttribute('List'), AifCollectionType("List",Types::Int64), AifCollectionType("return",Types::Int64) ] public List parmList(List _list = list) { List = _list; return List; } }

当我们使用到容器类型作为参数传参的时候记得加上注解,不然在使用的时候回报错

上述代码加上了这张ssrs报表需要使用的参数类

3创建Controller类

class IWS_wj_Controller extends SrsReportRunController { public static void main(Args _args) { IWS_wj_Controller controller = new IWS_wj_Controller(); controller.parmArgs(_args);//传入args controller.parmReportName(ssrsReportStr(IWS_wj20230927,IWS_reportOne));//定位到哪张报表; controller.parmDialogCaption("IWS_wjDemoReport"); //页面显示的名称 controller.parmShowDialog(true); //是否显示dialog controller.startOperation(); //开始允许报表 } protected void prePromptModifyContract()//配置页面初始化 { IWS_wj_Constract contract; Args _args; IWS_wj20230927 tb; List list; FormDataSource fds; MultiSelectionHelper multiSelectionHelper; ; _args = this.parmArgs(); contract = this.parmReportContract().parmRdpContract() as IWS_wj_Constract; //this.getReportContract(); //实现窗体的多选 list = new List (Types::int64); fds = args.record().dataSource();//获取窗体数据源 multiSelectionHelper = multiSelectionHelper::construct();//多选助手 multiSelectionHelper.parmDatasource(fds); tb = multiSelectionHelper.getFirst();//存入数据 while(tb) { list.addEnd(tb.id); tb = multiSelectionHelper.getNext(); } contract.parmList(list); } }

上述代码是一个报表的入口

继承SrsReportRunController类,我们通常会使用到的是prePromptModifyContract()

我们通常把需要初始化别的参数时写在这个方法里面,上述是个一张报表可以打印多张单据的报表。

这里使用到一个工具类MultiSelectionHelper,可以把窗体上所选中的数据初始化到List,

这样就可以实现一张报表打印多张单据。

4创建DP类

dp主要是通过参数对数据做出插入,编写取值逻辑

以下示例是一个简单的DPdemo

[ SrsReportParameterAttribute(classStr(IWS_wj_Constract))//contract类 ] class IWS_WjTestADP extends SRSReportDataProviderPreProcessTempDb { IWS_wjtemp temp;//临时表 [ SrsReportDataSetAttribute(tableStr(IWS_wjtemp)) ] public IWS_wjtemp getTemp() { select temp; return temp; } public void processReport() { IWS_wj_Constract contract = this.parmDataContract() as IWS_wj_Constract; int64 id = contract.parmId(); str number = contract.parmItem_number(); List list = contract.parmList(); iws_wj20230927 a; //使用迭代器来传递数据 Enumerator em = list.getEnumerator(); while(em.moveNext()) { while select a where a.id == em.current() { temp.id = a.id; temp.item_name = a.item_name; temp.item_number = a.item_number; temp.specifications_and_models = a.specifications_and_models; temp.material = a.material; temp.remark = a.remark; temp.cnt = a.cnt; temp.unit = a.unit; temp.warehouse = a.warehouse; temp.use = a.use; temp.datetime = a.createddatetime; temp.yewu = a.yewu; temp.cgsq = a.cgsq; temp.cgsqr = a.cgsqr; temp.cgsqh = a.cgsqh; temp.insert(); } } } }

5创建SSRSReport

首先我们可以先创建一个report组件

1新建dataset 设置dp(我们之前创建的Dp类)

新手可能会发现自己根本找不到自己的DP,我们需要先编译一下让系统认到我们的DP

2创建Desion

这个就是一个简单的报表界面里面会涉及到比较多的内容

这里给一个比较简单的例子

右击创建一个table

右击属性设置数据源,也就是我们之间创建的dataset

设置完之后 通过选择就会出现很多的字段,并却会循环的出来

3部署报表

最后在页面上就会出现大家想要的报表了

6细节以及问题

1找不到报表设计:重点检查controller 里面是否写对了报表名称,是否有进行部署报表。

2生成报表是出错,但是已经部署成功了报表,这个有的时候需要全编译一下工程,具体原因我目前还不是很清楚。

3 当我们有修改参数是,我们的ui界面需要重新画,不然会报错,部署失败 :参数错误

4问题排查 ,大多数情况下在出现进度条之后,重点排查DP类,进度条之前controller

7UIBuild

class IWS_DeliveryItemInsepctionPrintUIBuilder extends SrsReportDataContractUIBuilder
{
IWS_DeliveryItemInsepctionPrintContract contract;

DialogField fieldJourId;
public void postBuild()
{
super();
contract = this.dataContractObject() as IWS_DeliveryItemInsepctionPrintContract;

fieldJourId = this.bindInfo().getDialogField(contract, methodstr(IWS_DeliveryItemInsepctionPrintContract, parmJourId));
fieldJourId.allowEdit(false);
}

}

目录

1创建一个TmpDB类型的临时表

2创建一个参数类 简称 XXXcontract

3创建Controller类

4创建DP类

5创建SSRSReport

1新建dataset 设置dp(我们之前创建的Dp类)

2创建Desion

3部署报表

6细节以及问题


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询