通过X ++在Microsoft Dynamics AX 2009中打印报告

时间:2010-10-01 15:11:06

标签: axapta x++

我正在尝试打印单击按钮上的销售确认报告,我已在Microsoft Dynamics AX 2009中的“销售订单明细”表单中添加该按钮。在该按钮的单击事件中,我编写了以下代码:

void clicked()
{
    Args                args;
    ReportRun           reportRun;
    SalesFormLetter     salesFormLetter;
    PrintJobSettings    printJobSettings;
    CustConfirmJour     custConfirmJour;
    RecordSortedList    list                = new RecordSortedList(55);
    SalesTable          salesTableUpdate;
    ;

    SELECT firstonly custConfirmJour order by ConfirmID desc where custConfirmJour.SalesId == salesTable.SalesId ;

    list.ins(custConfirmJour);

    args = new Args(ReportStr(SalesConfirm));


    printJobSettings = new PrintJobSettings();
    printJobSettings.SetTarget(PrintMedium::Printer);
    printJobSettings.suppressScalingMessage(true);

    salesFormLetter  = new SalesFormLetter_Confirm(true);
    salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());

    args.designName("Standard");
    args.caller(salesFormletter);
    args.parmEnum(PrintCopyOriginal::Original);
    args.parmEnumType(enumnum(PrintCopyOriginal));
    args.object(list);

    reportRun = new ReportRun(args);
    reportRun.setTarget(PrintMedium::Printer);
    reportRun.init();
    reportRun.run();
}

代码运行正常除了问题,而不是直接在打印机上发送报告,打印预览即将到来。

如果你们中的任何人能让我知道这段代码有什么问题,我会非常感激。

RGDS

哈龙

3 个答案:

答案 0 :(得分:1)

由于您没有向任何打印机发送引用,因此必须使用默认打印机,这可能是Microsoft XPS或某些支持显示的打印机。

我必须将打印机内容发送到报告(SalesInvoice)并添加一些代码以嗅出任何已发送的打印机设置。否则,报告将使用适用于该类型报告的任何打印机设置。让它工作使我能够传递各种打印机设备,如电子邮件,PDF等...: - )

答案 1 :(得分:1)

试试这个:

public void run()
{
     Args               args;
     ReportRun          report;
     str                printer;
     PrintJobSettings   pjs;
;
    args = new Args(reportstr("PwC_ExciseInvoice_Sales"));
    counter = 1;
    pjs = new printJobSettings();


    while(counter <= maxReports)
    {
        args.parm(int2str(counter));
        args.record(custInvoiceJour);
        report = new ReportRun(args);
        pjs.setTarget(PrintMedium::Printer);
        report.setTarget(PrintMedium::Printer);
        report.init();
        report.run();

        counter++;
    }

}

通过这段代码,我每次直接打印机都会调用Thrice(变量maxReports)报告。

答案 2 :(得分:1)

如果您不知道用户已将设备设置为默认打印机,则它将始终打印到默认打印机。如果您要将默认设置打印到屏幕(即使您选择了Print Medium :: Printer),它仍将进入屏幕。我认为你应该选择PrintMedium :: Screen并让它总是进入屏幕以便用户可以选择打印机,否则他们可能不知道打印报告的位置(我有一些用户有奇怪的选择作为他们的默认打印机,这可能是整个建筑物)。