Показать сообщение отдельно
Старый 31.03.2011, 19:43   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,709 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Приведенное решение - это борьба со следствием, а не с причиной. Тем более, что выбор цели не отображается в диалоговой форме RunBaseReport и пользователь вынужден нажимать Ok, в надежде, что выбор где-то там сохранился.

Причина проблемы кроется в методе \Classes\RunBaseReportDialog\main

Там предварительно сделан вызов reportRun.prompt(). Таким образом, последующие настройки printJobSettings будут сделаны в кеше reportRun (отчета), а не в кеше RunBaseReport (класса).

Собственно, "лечение" заключается в том, чтобы просто передать настройки сделанные для ReportRun в настройки для RunBaseReport. Т.е. необходимо изменить код метода \Classes\RunBaseReportDialog\main следующим образом

X++:
static void main(Args args)
{
    RunBaseReportDialog reportDialog    = new RunBaseReportDialog(args.caller());
    RunBaseReport       runBaseReport   = args.caller().runbase();
    ReportRun           reportRun       = runBaseReport.reportRun();
    Report              report          = reportRun.report();
    boolean             oldInteractive;
    boolean             res;
    Dialog              dialog;
    // 31.03.2011, Maksi -->
    PrintJobSettings    printJobSettingsRunBase;
    PrintJobSettings    printJobSettingsReportRun;
    // 31.03.2011, Maksi <--
    ;
    
    // We must invoke the SysPrintForm via the report object so that we honor an prompt overrides.
    oldInteractive = report.interactive();
    report.interactive(true);
    res = reportRun.prompt();
    report.interactive(oldInteractive);
    if (!res)
        return;

    // 31.03.2011, Maksi -->
    // Перенос сделанного выбора из ReportRun в RunBaseReport
    printJobSettingsReportRun   = reportRun.printJobSettings();
    printJobSettingsRunBase     = runBaseReport.printJobSettings();
    printJobSettingsRunBase.unpackPrintJobSettings(printJobSettingsReportRun.packPrintJobSettings());
    // 31.03.2011, Maksi <--

    dialog = Dialog::getDialogFromCaller(args.caller());
    if (dialog)
    {
        dialog.updateServer();
    }
    runBaseReport.dialogUpdatePrinterSettings(dialog);
    reportDialog.run();
}

PS: Модификации методов pack/unpack в классе RunBaseReport для решения данной проблемы - не нужна
За это сообщение автора поблагодарили: mazzy (2), Pustik (2).