AX 2009:需要在发票过帐前打印形式发票

Posted

技术标签:

【中文标题】AX 2009:需要在发票过帐前打印形式发票【英文标题】:AX 2009: Need to print ProForma Invoice before the invoice has been posted 【发布时间】:2017-01-20 22:59:21 【问题描述】:

因此,我的公司要求我创建一个批处理作业,该作业将为当天已过帐装箱单但尚未过帐发票的所有销售订单打印形式销售发票。他们要求这样做是因为他们希望在实际发布发票之前通过 PDF 文件查看发票。最有可能的是,他们可以在一个流程中过帐所有已批准的发票。

到目前为止,关于如何创建此批处理报告运行的所有示例(我可以通过 Google 搜索找到)都使用销售订单的 custInvoiceJour 条目来生成 SalesInvoice 报告,因为发票实际上并没有尚未发布,在这种情况下没有对应的 CustInvoiceJour 条目可使用

由于尚未创建这些日记帐分录,我将如何在不过帐 (ProForma) 的情况下创建销售发票?我知道这是可以做到的,因为您可以通过 UI 做到这一点。

这是迄今为止我为批处理作业的 run 方法编写的代码,当它运行时会出错,提示无法找到 custInvoiceJour 条目。

public void run()

// Arguments for function.
   Args args;
   ParmId parmId;
   ReportRun reportRun;
   SalesTable salesTable;
   PrintJobSettings printJobSettings;
   SalesFormLetter formLetter;

   select salesTable where salesTable.DocumentStatus == DocumentStatus::PackingSlip && salesTable.SalesStatus == SalesStatus::Delivered;

   printJobSettings = new PrintJobSettings();
   printJobSettings.setTarget(PrintMedium::File);
   printJobSettings.format(PrintFormat::PDF);
   printJobSettings.fileName("C:\temp\proforma_invoice.pdf");

   formLetter = SalesFormLetter::construct(DocumentStatus::Invoice);

   formLetter.proforma(true);
   formLetter.printFormLetter(true);
   formLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());

   args = new Args(ReportStr(SalesInvoice));
   args.caller(formLetter);
   args.parmEnum(PrintCopyOriginal::Original);
   args.parmEnumType(enumnum(PrintCopyOriginal));
   args.record(salesTable);

   reportRun = new ReportRun(args);
   reportRun.printJobSettings().setTarget(PrintMedium::File);
   reportRun.printJobSettings().format(PrintFormat::PDF);
   reportRun.printJobSettings().fileName("C:\temp\proforma_invoice.pdf");
   reportRun.prompt();
   reportRun.run();

【问题讨论】:

【参考方案1】:

您可以使用下面的代码将形式保存到文件

public void run()

    SalesTable          salesTable;
    PrintJobSettings    printJobSettings;
    SalesFormLetter     salesFormLetter;
    ;

    select firstOnly salesTable
        where salesTable.DocumentStatus == DocumentStatus::PackingSlip
           && salesTable.SalesStatus    == SalesStatus::Delivered;

    printJobSettings = new PrintJobSettings();
    printJobSettings.setTarget(PrintMedium::File);
    printJobSettings.format(PrintFormat::PDF);
    printJobSettings.fileName(@'C:\Temp\proforma_invoice.pdf');

    salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
    salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
    salesFormLetter.update(salesTable, 
                           systemDateGet(), 
                           SalesUpdate::PackingSlip, 
                           AccountOrder::None, 
                           NoYes::Yes, 
                           NoYes::Yes);

【讨论】:

以上是关于AX 2009:需要在发票过帐前打印形式发票的主要内容,如果未能解决你的问题,请参考以下文章

SAP如何查看采购发票是不是过帐?如何审批没有过帐发票?

ebs r12 如何查看所有的ap 发票是不是全部过帐到总账了

过账采购发票

PDF电子发票如何打印

电子发票怎么下载

PDF的电子发票,怎么缩小打印?