2010-10-01 2 views
2

Я пытаюсь распечатать отчет о подтверждении продаж на кнопку, которую я добавил в форме заказа клиента заказа клиента в Microsoft Dynamics AX 2009. При щелчке на этой кнопке я написал следующее код:Печать отчета в Microsoft Dynamics AX 2009 по X ++

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

Харун

ответ

1

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

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

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

1

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

Смежные вопросы