在报表上使用维度控制

原文:Aku's Blog

 

在文章 "Anzeige von Lagerdimensionen auf Masken" 中已经介绍了如何在Form中动态控制维度显示.

 

类似的功能有时候也会在打印报表是需要,也即在打印报表是动态控制维度的现实。

 

在AX标准系统中,已经有标准的方法来实现这一需求,我们需要做的就是一些小的修改。

 

为了演示,我们首先创建一个表 AKU_DemoTable:

 

在报表上使用维度控制_第1张图片

 

然后,我们创建一个报表,该报表包含我们新创建的表,其结构如下:

 

在报表上使用维度控制_第2张图片

 

和在Form中一样,必须向report中添加一个InventDim表。并且该数据源的属性 “FetchMode“ 要被设置为 1:1, 属性 Relations要被设置为Yes.

 

在报表上使用维度控制_第3张图片

 

接下来,就像在Form中一样,需要在Design下添加“InventoryDimensions"字段组,在我们的例子中,该组被添加在Body下:

 

在报表上使用维度控制_第4张图片

现在,需要对report中的方法做一些修改就可以实现我们希望的功能了。

为了动态控制维度显示,下面这些方法必须被重写: classDeclaration, run, dialog, getFromDialog.

也可以重写pack和unpack方法,重写他们不是为了实现动态控制维度,而是为了保存使用数据,也就是让Report拥有记忆功能。

 

public class ReportRun extends ObjectRun { InventDimParm inventDimParm; DialogRunbase dialog; DialogGroup dialogInventoryDimensions; #define.CurrentVersion(1) #localmacro.CurrentList inventDimParm #endmacro } void updateDesign() { ; InventDimCtrl::updateReportVisible(element, inventDimParm); } public void run() { ; this.updateDesign(); super(); } public Object dialog(Object _dialog) { ; dialog = _dialog; dialogInventoryDimensions = inventDimParm.addFieldsToDialog(dialog,"@SYS53654",true, false, "@SYS102592"); return dialog; } public boolean getFromDialog() { ; inventDimParm.getFromDialog(dialog, dialogInventoryDimensions); return true; } public container pack() { return [#CurrentVersion, #CurrentList]; } public boolean unpack(container packedClass) { Version version = RunBase::getVersion(packedClass); ; switch(version) { case #CurrentVersion: [version,#CurrentList] = packedClass; break; default: return false; } return true; }

 

现在,打开报表,可以看到我们可以选择需要打印的维度:

 

 

 

在报表上使用维度控制_第5张图片
 

根据我们的选项,打印结果如下:

 

在报表上使用维度控制_第6张图片

 

点击这里下载演示XPO文件。


AKU_Demo_InventDimRep.rar (1,99 KB) AKU_Demo_InventDimRep.rar (1.99 KB)

你可能感兴趣的:(object,report,Blog,Class,dialog,报表)