You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AX 2012自动生成销售发票PDF空白且程序崩溃问题求助

AX 2012 销售发票PDF自动保存问题修复方案

原代码核心问题分析

  • 未指定有效报表名称:printMgmtReportFormatName变量未赋值,报表控制器无法定位销售发票对应的SSRS报表,导致生成空白PDF。
  • 冗余RDP合同冲突:同时实例化采购订单合同与销售发票合同,且两次调用parmRdpContract覆盖配置,干扰报表数据加载逻辑。
  • 客户端路径不可访问:指定的C:\Users\spineda\Desktop\是客户端本地路径,服务器端执行时无权限访问,导致PDF生成失败或AX阻塞。
  • 同步执行阻塞UI:SysOperationExecutionMode::Synchronous会锁定UI线程,若报表生成耗时较长,直接导致AX无响应。

修正后的代码

public void savePDFInServer(CustInvoiceJour custInvoiceJour, TaxTypeDocumentId taxTypeDocumentId, InvoiceDate invoiceDate)
{
    SRSPrintDestinationSettings     settings;
    SrsReportRunController          controller = new SrsReportRunController();
    SalesInvoiceContract            salesInvoiceContract = new SalesInvoiceContract();
    PrintMgmtReportFormatName       reportFormatName = PrintMgmtReportFormat::getFormatId(PrintMgmtDocumentType::SalesInvoice);

    // 绑定销售发票对应的报表格式
    controller.parmReportName(reportFormatName);
    // 异步执行避免UI阻塞
    controller.parmExecutionMode(SysOperationExecutionMode::Asynchronous);

    // 配置销售发票报表参数
    salesInvoiceContract.parmRecordId(custInvoiceJour.RecId);
    salesInvoiceContract.parmCountryRegionISOCode(SysCountryRegionCode::countryInfo());
    controller.parmReportContract().parmRdpContract(salesInvoiceContract);

    // 设置PDF输出属性
    settings = controller.parmReportContract().parmPrintSettings();
    settings.printMediumType(SRSPrintMediumType::File);
    settings.fileFormat(SRSReportFileFormat::PDF);
    settings.overwriteFile(true);
    // 使用服务器可访问路径,确保AX服务账户有读写权限
    settings.fileName(@"D:\AX_Saved_Invoices\SalesInvoice_" + custInvoiceJour.InvoiceId + ".pdf");

    controller.parmShowDialog(false);
    
    try
    {
        controller.startOperation();
    }
    catch(Exception::Error)
    {
        error("PDF保存失败:" + infolog.text());
    }
}

关键注意事项

  • 路径权限验证:确认指定的服务器路径存在,且AX服务运行账户(如NT AUTHORITY\NETWORK SERVICE)拥有该路径的读写权限。
  • 报表格式正确性:通过PrintMgmtReportFormat::getFormatId动态获取报表格式,避免硬编码报表名称导致的适配问题。
  • 执行模式选择:若需同步获取生成结果,可改回SysOperationExecutionMode::Synchronous,但建议在后台任务中执行,避免阻塞用户操作。

内容的提问来源于stack exchange,提问作者sampineda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:20