【问题标题】:Proforma SalesInvoice doesn't show data from all tables形式 SalesInvoice 不显示所有表中的数据
【发布时间】:2016-03-17 03:23:01
【问题描述】:

在 salesInvoice ssrs 报告中,我添加了一个名为 carTableEquipTmp 的表,默认情况下该表不存在,我将其与 SalesInvoiceDP.InsertIntoSalesInvoiceTmp() 中的其他表(SalesinvoiceTmp 和 SalesinvoiceHeaderFooterTmp)一起插入。 p>

即使我的表 carTableEquipTmp 已成功插入,但如果我打印形式报告,数据不会显示在报告中。

如果我将测试值添加到SalesInvoiceDP.processReport() 中的 carTableEquipTmp 表中,它们会显示在形式发票上,但此时我无法获取在表中设置正确数据所需的任何参数。如果我在调试器的这一点停止,则不存在任何数据,因为 processreport() 是从代码中的较低级别调用的。

我认为这可能是打包/解包的问题,​​或者形式代码从服务器实例运行,因为形式上运行的代码完全不同。

我可以看到SalesInvoiceJournalPostBase.CreateReportData() 创建了一个 salesInvoiceDP 实例

salesInvoiceDP = new SalesInvoiceDP();
salesInvoiceDP.parmDataContract(salesInvoiceContract);
salesInvoiceDP.parmUserConnection(new UserConnection(true));

salesInvoiceDP.createData();

这可能与它有关......但我仍然无法在 carTableEquipTmp 表中获得我想要的数据。

所以关于如何让 Ax 2012 接受我添加的这个新表的任何想法,因为它像其他表一样被插入并且似乎没有问题......

希望大家帮忙

【问题讨论】:

  • 您是在 rdp/ssrs 中将数据作为新数据源插入还是将其插入到 salesInvoiceTmp 中?
  • 这是一个名为 CarTableEquipTmp 的新表,它从 RDP 返回并添加到 ssrs/report 设计中。当发票不是形式时,它工作正常。是否有任何地方我必须添加对表格的引用才能使其显示在报告中?
  • 几天前我也遇到过类似的情况,我的问题是我没有正确设置预处理代码。您能告诉我以下内容吗: - 您是否修改了 SalesInvoiceDP.useExistingReportData()? - 您的临时表类型是否正常?如果这两个都是“否”,我会发布一个答案,因为您可能需要创建代码来处理这种情况(useExistingReportData 在形式场景中被调用)
  • 嘿。谢谢回答。我没有修改 SalesInvoiceDP.useExistingReportData() 并且我的临时表是 tableType 常规

标签: ssrs-2012 dynamics-ax-2012-r2


【解决方案1】:

SalesInvoice 报表有两个数据类,您需要为数据提供者查看 SalesInvoiceDP 和 SalesInvoiceDPBase。 SalesInvoiceDPBase 扩展了 SrsReportDataProviderPreProcess,因此您需要采取一些额外步骤才能将新数据源添加到报表中。

在salesInvoiceDP 类中,有一个名为useExistingReportData() 的方法,它在用户连接下重新插入形式上的临时表数据,因此SrsReportDataProviderPreProcess 框架将在您的报告中提取它。当备考流程创建报告数据时,它不会插入用户连接,因此不会添加到报告中。此方法仅在报表运行备考时被调用。

您需要将您的临时表添加到此方法中,并遵循其他表的模式,因此您的代码将如下所示:

//this is different from the buffer you insert your data with
CarTableEquipTmp localCarTableEquipTmp;

...

recordList = new RecordSortedList(tableNum(carTableEquipTmp));
recordList.sortOrder(fieldNum(carTableEquipTmp, RecId));

//You will need to add a field to relate your temp table 
//to the current invoice journal, and insert it in 
//InsertIntoSalesInvoiceTmp() if thats where you're inserting your table.
while select localCarTableEquipTmp
    where localCarTableEquipTmp.JournalRecId == jourRecId 
{
    recordList.ins(localCarTableEquipTmp);
}

delete_from localCarTableEquipTmp
    where localCarTableEquipTmp.JournalRecId == jourRecId;

recordList.insertDatabase(this.parmUserConnection());

此方法将您的数据重新插入框架下并删除原始数据。然后,重新插入的数据将被框架拾取并显示在您的报告中。如果您在表格浏览器中打开 CarTableEquipTmp,您很可能会看到您尝试运行报告的所有时间的数据。这就是我们重新插入数据后有delete_from 操作的原因。在userConnection下插入数据时,报表完成后自动删除

您要修改的另一个方法是 SalesInvoiceDP.setTableConnections(),您只需添加以下行:

CarTableEquipTmp.setConnection(this.parmUserConnection());

这将在常规(非备考)运行时为您的表设置用户连接。您可能希望使用表浏览器中的 alt+F9 删除当前存储在临时表中的数据。

除此之外,这都是标准 RDP 的东西,但听起来你的那部分工作正常。您的临时表必须是“常规”类型才能正常工作。

【讨论】:

  • 这正是我想要的。非常感谢您的协助,就像一个魅力!
猜你喜欢
  • 2015-12-15
  • 2020-11-29
  • 1970-01-01
  • 2022-01-28
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
相关资源
最近更新 更多