形式销售发票不显示所有表中的数据
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" 类型才能正常工作。
在 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" 类型才能正常工作。