2010-10-01 12 views
2

J'essaie d'imprimer le rapport de confirmation des ventes sur un bouton que j'ai ajouté dans le formulaire Détail de la commande client dans Microsoft Dynamics AX 2009. Sur l'événement de clic de ce bouton, j'ai écrit Code:Imprimer le rapport dans 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(); 
} 

le code fonctionne bien sauf problème au lieu d'envoyer le rapport directement sur l'imprimante, l'aperçu avant impression est à venir.

Je serai très reconnaissant si quelqu'un d'entre vous pouvait me dire ce qui ne va pas avec ce code.

Mfg

Haroon

Répondre

1

Puisque vous n'êtes pas envoyer dans une référence à une imprimante, il devrait utiliser l'imprimante par défaut, ce qui pourrait très bien être Microsoft XPS ou d'un écran capable imprimante.

J'ai dû envoyer l'imprimante au rapport (SalesInvoice) et ajouter du code pour détecter les imprimantes envoyées. Sinon, le rapport utilisera les imprimantes qui s'appliquent à ce type de rapport. Obtenir que le travail m'a permis de passer dans divers PrinterSettings, comme le courrier électronique, PDF, etc, etc ... :-)

1

essayez ceci:

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

} 

Grâce à ce code, j'appelle un rapport Thrice (variable maxReports), chaque fois qu'il va directement à l'imprimante.

1

Si vous ne connaissez pas le périphérique que l'utilisateur a configuré comme imprimante par défaut, il imprime toujours sur l'imprimante par défaut. Si vos paramètres par défaut sont à imprimer sur l'écran (même si vous avez sélectionné Imprimer moyen: Imprimante), l'écran sera toujours affiché. Je pense que vous devriez sélectionner PrintMedium :: Screen et l'avoir toujours à l'écran afin que l'utilisateur puisse sélectionner une imprimante, sinon ils ne peuvent pas savoir où le rapport a imprimé (j'ai quelques utilisateurs qui ont des choix impairs comme imprimante par défaut, qui peut être à travers le bâtiment).