Axapta 将领料单重新打印到打印机上,而不是通过X++;

Axapta 将领料单重新打印到打印机上,而不是通过X++;,axapta,dynamics-ax-2009,x++,Axapta,Dynamics Ax 2009,X++,我正在尝试将拣货单直接自动打印到打印机上。它已经被挑选出来了。这是一个打印它的作业,但它一直在屏幕上,而不是打印机上 static void JobReprintPickingList(Args _args) { Args args; ReportRun reportRun; SalesFormLetter salesFormLetter; PrintJobSettings printJobSettings; RecordSortedList list =

我正在尝试将拣货单直接自动打印到打印机上。它已经被挑选出来了。这是一个打印它的作业,但它一直在屏幕上,而不是打印机上

static void JobReprintPickingList(Args _args)
{
    Args args;
    ReportRun reportRun;
    SalesFormLetter salesFormLetter;
    PrintJobSettings printJobSettings;
    RecordSortedList list = new RecordSortedList(tablenum(WMSPickingRoute));
    WMSPickingRoute wmsPickingRoute = WMSPickingRoute::find('PkR 079256');
    ;

    if(!wmsPickingRoute)
        return;

    list.ins(wmsPickingRoute);

    args = new Args(ReportStr(WMSPickingList_OrderPick));
    args.designName("Standard");

    printJobSettings    = new PrintJobSettings();
    printJobSettings.deviceName('HP Universal Printing PCL 6');
    printJobSettings.setTarget(PrintMedium::Printer);
    printJobSettings.preferredTarget(PrintMedium::Printer);

    salesFormLetter  = new SalesFormLetter_PickingList(false);
    salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());

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

    reportRun = new ReportRun(args);
    reportRun.init();
    reportRun.run();
}

您可以将代码更改为使用OriginalPrint,如下所示:

args.parmEnum(PrintCopyOriginal::OriginalPrint);

问题在于类FormletReport的loadPrintSettings方法,该方法在使用Original或OriginalCopy时覆盖屏幕目标。

我找到了答案。我不得不加上这句话:

printJobSettings.lockDestinationProperties(true);

这将强制它以anway的方式打印。

这也适用于一种方式。我正在做一些时髦的印刷工作,所以这不会一直奏效。给了你一票,谢谢!这解决了我的问题,将打印代码作为一个批处理运行,因此无法显示到屏幕上,这就是它失败的原因。谢谢