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

Axapta AX 2009:需要在发票过帐之前打印形式发票,axapta,dynamics-ax-2009,invoice,Axapta,Dynamics Ax 2009,Invoice,因此,我的公司已责成我创建一个批处理作业,该作业将打印当天已过账装箱单但尚未过账发票的所有销售订单的形式销售发票。他们要求这样做是因为他们希望在实际过账之前通过PDF文件查看发票。最有可能的情况是,他们可以在一个流程中过账所有已批准的发票 到目前为止,关于如何创建此批处理报告运行的所有示例(我可以通过谷歌搜索找到)都使用销售订单的custInvoiceJour条目来生成SalesInvoice报告,但是,由于发票尚未实际过账,因此在本例中没有相应的custInvoiceJour条目可供使用 既然

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

到目前为止,关于如何创建此批处理报告运行的所有示例(我可以通过谷歌搜索找到)都使用销售订单的custInvoiceJour条目来生成SalesInvoice报告,但是,由于发票尚未实际过账,因此在本例中没有相应的custInvoiceJour条目可供使用

既然这些日记账分录还没有创建,我如何在不过账(形式)的情况下创建销售发票?我知道这是可以做到的,因为你可以通过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();

}

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

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);
}