形式销售发票不显示所有表中的数据

Proforma SalesInvoice doesn't show data from all tables

在 salesInvoice ssrs 报告中,我添加了一个名为 carTableEquipTmp 的 table,默认情况下它不存在,我将其与其他 [=35= 一起插入SalesInvoiceDP.InsertIntoSalesInvoiceTmp() 中的 ]s(SalesinvoiceTmp 和 SalesinvoiceHeaderFooterTmp)。

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

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

我认为这可能是 pack/unpack 的问题,或者来自服务器实例的形式代码 运行 与形式代码 运行 完全不同。

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

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

salesInvoiceDP.createData();

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

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

希望大家帮帮忙

SalesInvoice 报告有两个数据 class 您需要查看数据提供者的数据,SalesInvoiceDP 和 SalesInvoiceDPBase。 SalesInvoiceDPBase 扩展了 SrsReportDataProviderPreProcess,因此您需要执行几个额外的步骤才能将新数据源添加到报表中。

在salesInvoiceDPclass中,有一个叫useExistingReportData()的方法,它会在用户连接下重新插入pro-forma temp table数据,所以SrsReportDataProviderPreProcess框架会选择它在你的报告中。当备考流程创建报表数据时,它不会插入用户连接,因此不会添加到报表中。只有在报告 运行 形式时才会调用此方法。

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

//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());

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

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

CarTableEquipTmp.setConnection(this.parmUserConnection());

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

除此之外,它都是标准的 RDP 内容,但听起来您的部分工作正常。您的临时 table 必须是 "Regular" 类型才能正常工作。