Показать сообщение отдельно
Старый 12.03.2014, 16:40   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Жаль, что никто не ответил. Хотелось получить альтернативный взгляд на проблему

Пока решил так: в методе FormLetterReport.loadPrintSettings() исправил строчку во вложенном методе setSettingDetail():
X++:
void setSettingDetail(PrintMgmtDocInstanceType _type, SRSPrintDestinationSettings _defaultSettings)
{

    ......

    if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
    {
        ......
    }
    else
    {
    // </GEERU>
        /*
        printSettingDetail.parmReportFormatName(PrintMgmtReportFormat::findSystem(this.getPrintMgmtDocumentType()).Name);
        */
        printSettingDetail.parmReportFormatName(getReportFormatName(_type));
    // <GEERU>
    }

    ......

}
И добавил (внутри того же самого метода loadPrintSettings()) собственно сам вложенный метод getReportFormatName():

X++:
PrintMgmtReportFormatName getReportFormatName(PrintMgmtDocInstanceType _type)
{
    PrintMgmtPrintContext   printContext = new PrintMgmtPrintContext();
    container               printSettingPacked;
    PrintMgmtPrintSetting   printSetting;
    int                     detailPosition;

    printContext.parmDefaultOriginalPrintJobSettings(printMgmtReportRun.parmDefaultOriginalPrintJobSettings());
    printContext.parmDefaultCopyPrintJobSettings(printMgmtReportRun.parmDefaultCopyPrintJobSettings());
    printContext.parmLanguageId(_languageId);
    printContext.parmQueryTableBuffer(_jourTable);
    printContext.parmForcePrintJobSettings(printMgmtReportRun.parmForcePrintJobSettings());
    printContext.setHierarchyContext(printMgmtReportRun.parmHierarchyType(), printMgmtReportRun.parmNodeType(), printMgmtReportRun.parmDocType(), _transTable);
    // if code running on client, then make a server call to reduce RPC
    if(isRunningOnServer())
    {
        printSetting = PrintMgmt::getSettings(printContext);
    }
    else
    {
        printSettingPacked = PrintMgmt::getSettings_Server(printContext.pack());
        printSetting = new PrintMgmtPrintSetting();
        printSetting.unpack(printSettingPacked);
    }

    for (detailPosition = 1; detailPosition <= printSetting.numDetails(); detailPosition++)
    {
        if (printSetting.getDetailByPos(detailPosition).parmType() == _type)
        {
            return printSetting.getDetailByPos(detailPosition).parmReportFormatName();
        }
    }

    return PrintMgmtReportFormat::findSystem(this.getPrintMgmtDocumentType()).Name;
}
Не могу сказать, что очень уж изящно получилось, но глубже разбираться со структурой данных, в которой хранятся настройки управления печатью, сил не хватило Кроме того, у меня всё ещё теплится надежда, что Майкрософт своё решение предложит в каком-нибудь хотфиксе
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: Avalon (1).