Приведенное решение - это борьба со следствием, а не с причиной. Тем более, что выбор цели не отображается в диалоговой форме 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 для решения данной проблемы - не нужна