Печать отчета в Microsoft Dynamics AX 2009 через X ++ - PullRequest
2 голосов
/ 01 октября 2010

Я пытаюсь распечатать отчет о подтверждении продаж по нажатию кнопки, которую я добавил в форме Подробная информация о заказе клиента в 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

Haroon

Ответы [ 3 ]

1 голос
/ 05 января 2011

попробуйте это:

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) каждый раз, когда он отправляется непосредственно на принтер.

1 голос
/ 05 мая 2011

Если вы не знаете устройство, которое пользователь настроил в качестве принтера по умолчанию, оно всегда будет печатать на принтере по умолчанию.Если ваши настройки по умолчанию - печать на экран (даже если вы выбрали Print Medium :: Printer), он все равно будет отображаться на экране.Я бы подумал, что вам следует выбрать PrintMedium :: Screen и всегда показывать его на экране, чтобы пользователь мог выбрать принтер, в противном случае он может не знать, где напечатан отчет (у меня есть несколько пользователей, которые имеют странный выбор в качестве принтера по умолчаниюкоторый может быть через здание).

1 голос
/ 06 октября 2010

Поскольку вы не отправляете ссылку на какой-либо принтер, ему придется использовать принтер по умолчанию, который вполне может быть Microsoft XPS или каким-либо принтером с поддержкой отображения.

Мне пришлось отправить настройку принтера в отчет (SalesInvoice) и добавить код, чтобы отследить любую отправленную настройку принтера. В противном случае в отчете будет использоваться любая настройка принтера, которая применяется к отчету такого типа. Чтобы это работало, я смог передать различные настройки принтера, такие как электронная почта, PDF и т. Д. И т. Д.: -)

...