2

我正在尝试在 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

哈龙

4

3 回答 3

1

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

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

于 2010-10-05T20:17:23.337 回答
1

如果您不知道用户设置为默认打印机的设备,那么它将始终打印到默认打印机。如果您的默认设置是打印到屏幕(即使您选择了 Print Medium::Printer),它仍然会进入屏幕。我认为您应该选择 PrintMedium::Screen 并让它始终显示在屏幕上,以便用户可以选择打印机,否则他们可能不知道报告的打印位置(我有一些用户选择奇怪的默认打印机,可能在建筑物的对面)。

于 2011-05-05T14:29:40.570 回答
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++;
    }

}

通过这段代码,我调用了三次报告(变量 maxReports),每次它直接进入打印机。

于 2011-01-05T08:48:00.130 回答