AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2014, 18:55   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
? AX2012: Новый формат заказа на покупку
Пытаюсь добавить ещё один формат отчёта для подтверждения заказа на покупку. Делаю всё так, как написано здесь http://blogs.msdn.com/b/axsupport/ar...firmation.aspx

Всё работает нормально, новый формат выбирается при разноске. Но когда я перепечатываю оригинал или копию уже разнесённого подтверждения через Закупки и источники/Запросы/Журналы/Подтверждения заказов на покупку, всё равно выбирается системный формат. Настройка в управлении печатью, в которой мой новый формат выбран в качестве формата по умолчанию, при этом игнорируется.

Нашёл, что выбор формата отчёта происходит в FormLetterReport.loadPrintSettings(). Если в форме Подтверждения заказов на покупку выбрать Просмотр копии или Просмотр оригинала, то загружаются системные настройки print management (что логично) и в их числе название формата (что уже не так логично). Если же печатать отчёт через Использование управления печатью, то формат отчёта выбирается правильно из настроек управления печатью, но при этом могут выбраться и другие настройки - например, назначения отчёта или колонтитул - которые не всегда нужны.

Вопросы теперь у меня такие. Правильно ли, что при печати копии или оригинала всегда выбирается системный формат? Если у меня есть два формата заказа на покупку - один для закупок внутри страны, а другой для импорта - как мне быть в таком случае? Запрещать пользователям нажимать на кнопки Просмотр копии и Просмотр оригинала?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: mazzy (2).
Старый 12.03.2014, 16:40   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (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).
Теги
ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 4.0 Заказ на продажу на основании заказа на покупку Бигудь DAX: Функционал 13 20.11.2024 17:12
Проблемма обновления строк заказа на покупку kazpiez DAX: Функционал 6 05.08.2013 15:18
Тормозит разноска Заказа на Покупку с ОС vazerdim DAX: Функционал 6 24.10.2012 22:04
Обнуление Цены при изменении Суммы в строке Заказа на покупку Arseniy_F DAX: Функционал 8 05.04.2012 16:38
Программное создание заказа на покупку niksen DAX: Программирование 14 29.07.2011 10:14
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:49.