dynamics ax 4.0-如何定制报表

像表单一样,可以定制报表以便增加或减少报表上的信息。还可以修改报表的设计和布局。同样地,报表的设计和布局依赖于数据表和报表本身的设置。最佳实践仍然是尽可能在数据表方法或元数据中设置商业逻辑。报表的X++代码必须处理具体报表的功能,所有其它X++代码一般必须在数据表级实现,以便在用到该数据表时重用这些代码。这样做的优点如下:

  1.   报表的定制是独立的;数据表的定制会影响用到该数据表的所有报表。使得在用到该数据表的任何地方,用户都有一致的体验。
  2. 报表的定制复制整个报表到当前层;而数据表的定制却不同,因为字段、字段组和方法的定制只复制自身到当前层。这使得升级和发布新版本更加容易。
  3. 报表的方法总是在生成报表时执行;而数据表的方法可以在服务器端执行。通过设置启动报表的菜单项的RunOn属性可以控制何时生成报表,是客户端、服务器端,还是调用时。

创建促销品

本文中的例子展示如何定制销售订单发票报表SalesInvoice。定制这个发票以包括基于发票上列出的物料的促销。促销显示在发票上相应物料的下面。下图所示的是显示促销“水瓶”的发票:

同表单的例子一样,本例子使用了Dynamics AX 的文档管理功能。你可以使用文档处理在数据库中存储文本和图像。用两个不同的文档信息,PromoText和PromoImage,存储文本和图像。并附加到item数据表。下图显示了新的文档类型:

 下图显示了附加到item:PB-Bike的文本和图像:

用于在发票上显示促销的 X++代码在InventTable数据表中查找物料,搜索类型为PromoText和PromoImage的文档的文档处理以便打印在发票上。如果没有相应的文档,就不打印促销信息。

向发票报表中增加促销信息

 在定制SalesInvoice报表之前,必须在设计报表时决定促销信息打印在何处。每个发票项的促销信息都必须打印,因此,应该放在CustInvoiceTrans section group,因为CustInvoiceTrans数据表包含了发票项。CustInvoiceTrans section group 包含有reference body section,reference body section可以打印其它参考信息,例如,库存维的信息,或发票项发货时产生的装箱单行信息。促销信息在何时打印,如何打印方面与这些参考信息类似。

在设计报表时新建InventTable section group,如下图所示:

实现Promotional 方法

虽然这个方法可以直接在报表中实现,但是,因为他们不仅限于这个报表,也可以在其它报表中重用,甚至还可以在表单中使用。因此,我们在InventTable数据表中实现这些方法。方法代码如下:

display server public DocuValueFile PromotionImage()
{
    DocuRef     docuref;
    DocuValue   docuValue;
    ;
    select forceplaceholders firstonly tableid
    from docuRef
        where docuRef.RefCompanyId  == this.DataAreaId  &&
              docuRef.RefTableId    == this.TableId     &&
              docuRef.RefRecId      == this.RecId       &&
              docuRef.TypeId        == 'PromoImage'
    join file from docuValue
        where docuValue.RecId  == docuRef.ValueRecId;

    return docuValue.File;
}

 

display server public Notes PromotionText()
{
    DocuRef     docuref;
    ;
    select firstonly notes from docuRef
        where docuRef.RefCompanyId  == this.DataAreaId  &&
              docuRef.RefTableId    == this.TableId     &&
              docuRef.RefRecId      == this.RecId       &&
              docuRef.TypeId        == 'PromoText';

    return docuRef.Notes;
}

这两个方法都是display方法,这允许他们可以直接绑定到报表控件,打印信息。

绑定display方法到报表控件

在设计报表时,在InventTable section group下创建一个新的body section:BodyInventTable,设置如下:

Table 6-5. BodyInventTable Property Settings

Property

Settings

NoOfHeadingLines

0

LineAbove

Solid

LineBelow

Solid

LineLeft

Solid

LineRight

Solid

 在BodyInventTable下新建string控件:PromotionText,和bitmap控件:PromotionImage。并且绑定到两个新的InventTable方法。设置如下:

Table 6-6. PromotionText and PromotionImage Property Settings

Property

PromotionText

PromotionImage

Left

 

Auto (right)

Width

70.00 char

2.0 inch

Height

 

2.0 inch

DynamicHeight

Yes

 

ShowLabel

No

No

Table

InventTable

InventTable

DataMethod

PromotionText

PromotionImage

在BodyReference body section下建立如下的方法:

void printInventTable()
{
    InventTable inventTable = custInvoiceTrans
.inventTable();
    if (inventTable.RecId)
    {
         element.send(inventTable);
    }
}

void  executeSection()
{;
    this.printCustPackingSlipTrans();
    this.printDimHistory();
    this.printInventTable();
}

缺陷改进

void printInventTable()
{
    InventTable inventTable = custInvoiceTrans
.inventTable();
    if (inventTable.RecId &&
        (inventTable.PromotionText() ||
inventTable.PromotionImage()))
    {
         element.send(inventTable);
    }
}

性能改进

在报表的classDeclaration中增加如下代码:

DocuValueFile         promotionImage;
Notes                 promotionText;

修改后的printInventTable方法如下:

void printInventTable()
{
    InventTable inventTable = custInvoiceTrans
.inventTable();
    ;
    promotionImage  = inventTable.PromotionImage();
    promotionText   = inventTable.PromotionText();

    if (inventTable.RecId &&
        (promotionText || promotionImage))
    {
         element.send(inventTable);
    }
}

在BodyInventTable body section下新建如下两个方法:

 

display Notes PromotionText()
{
    return promotionText;
}

 


 

display DocuValueFile PromotionImage()
{
    return promotionImage;
}

 注意事项

  1. 给物料增加图像文档:库存管理-物料-文档处理
  2. 图像文档的设置:基本设置-设置-文档管理-单据类型-常规,可设置文档是存在目录中还是数据库中,本例是存在数据库中
  3. 察看SalesInvoice报表:应收帐款-销售订单-查询-发票-显示-原件

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值