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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.02.2011, 18:41   #1  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Перекос грида в стандартной AX2009
Здравствуйте, уважаемые коллеги. Долго меня мучила эта проблема, сегодня это все вылилось на пользователей.
AX2009. Попробуйте в репозитарии встать на таблицу CustInvoiceTable, открыть ее,расширить побольше на весь экран и нажимать клавишу Enter (переход к следующему полю.Нажимать желательно побольше).Увидите очень красивую картинку.
Я бы не волновался , если бы это было только в обозревателе для разработчиков, такое происходит в обычных формах,в которых работают пользователи, правда не всегда. Понять логику происхождения такого глюка я пока не смог.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: Logger (3).
Старый 17.02.2011, 10:07   #2  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
После долгих экспериментов выяснил, что на формах этот глюк происходит зачастую тогда, когда отключено автовыравнивание полей на гриде autoSizeColumns(false).Тема автовыравнивания тут много раз обсуждалась. Поскольку с включенным автовыравниванием полей заметные тормоза, включать на формах его как-то не хотелось. А вот в обозревателе таблиц постоянно грид перекашивает при переходе с ячейки грида, используя клавишу Enter. Хоть включай автовыравнивание, хоть выключай. Но все - таки проблему удалось решить следующим образом :
В классе SysSetupFormRun описываем переменные :
X++:
// This is a framework class. Customizing this class may cause problems with future upgrades to the software.
public class SysSetupFormRun extends FormRun
{
    SysWorkflowFormControls     workflowControls;
    // <GEEU>
    // Event listeners list
    List listeners_W;
    // </GEEU>
    // перекос грида
    int Gridhwnd;
    Set GridControls;
    Set Grids;
    // перекос грида

#if.never
    #define.CurrentVersion(1)
    #localmacro.CurrentList
    #endmacro
#endif
}
В методе init() пишем :
X++:
public void init()
{
    // <GEEU>
    this.raiseEvent_W(methodstr(FormRunListener_W, beforeInit));
    // </GEEU>
    // перекос грида
    Grids = new Set(Types::Integer);
    GridControls = new Set(Types::Integer);
    // перекос грида

    super();
    SysSecurityFormSetup::loadSecurity(this);
    this.dimensionFieldCtrls();
    this.inventStorageDimFieldCtrls();

    if (this.isWorkflowEnabled())
    {
        workflowControls = SysWorkflowFormControls::construct(this);
        workflowControls.initControls();
    }
    // <GEEU>
    this.raiseEvent_W(methodstr(FormRunListener_W, afterInit));
    // </GEEU>
}
в этом же классе перекрываем метод selectControl() и :
X++:
public boolean selectControl(FormControl _control)
{
    boolean ret;
    Object Object;
    void findGridControls(Object _ctrl)
    {
        int i;
        Object _subcontrol;

        for (i=1; i <=_ctrl.controlCount(); i++)
        {
            _subcontrol = _ctrl.controlNum(i);
            if (_subcontrol.isContainer())
                findGridControls(_subcontrol);
            else
            {
                switch (_subcontrol.handle())
                {
                    case classnum(FormStringControl):
                    case classnum(FormRealControl):
                    case classnum(FormIntControl):
                    case classnum(FormInt64Control):
                    case classnum(FormDateControl):
                    case classnum(FormTimeControl):
                    case classnum(FormDateTimeControl):
                    case classnum(FormComboBoxControl):
                    GridControls.add(_subcontrol.hwnd());
                    break;
                    default:
                    break;
                }
            }
        }
    }

    ret = super(_control);

    // перекос грида
    if (_control)
    {

        switch (_control.handle())
        {
            case classnum(FormGridControl):
            Gridhwnd = _control.hWnd();
            if (!Grids.in(Gridhwnd))
                findGridControls(_control);
            Grids.add(Gridhwnd);
            break;
            case classnum(FormStringControl):
            case classnum(FormRealControl):
            case classnum(FormIntControl):
            case classnum(FormInt64Control):
            case classnum(FormDateControl):
            case classnum(FormTimeControl):
            case classnum(FormDateTimeControl):
            case classnum(FormComboBoxControl):
            if (GridControls && GridControls.in(_control.hWnd()))
               _control.AlignControl(false);
            break;
            default:
            break;
        }
    }
    // перекос грида

    return ret;
}
перекосов ни в обозревателе ни на формах больше не будет.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: raz (5), Logger (7), Daiver (1), gl00mie (5).
Старый 13.07.2012, 16:26   #3  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Прошу прощения, при этом автовыравнивание на формах не выключаем, так?
Старый 13.07.2012, 17:48   #4  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от uchenik Посмотреть сообщение
Прошу прощения, при этом автовыравнивание на формах не выключаем, так?
Я думаю что можно и не выключать, если это Вам удобно. Мы его отключили только потому, что наблюдались большие тормоза, особенно там, где много дисплей-методов, плюс пользователи от этого эффекта большого восторга не испытывали. После отключения и выскочил этот глюк.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: Logger (1).
Теги
ax2009, grid, syssetupformrun, баг, грид, интерфейс, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не работает корректировка налога в стандартной AX2009 Pustik DAX: Функционал 17 23.11.2012 15:00
Анализ счета обрезает копейки у сумм достигающих миллиарда и больше в стандартной AX2009 Pustik DAX: Программирование 1 09.02.2011 16:01
EP AX2009: сохранить параметры грида (фильтр, позиционирование) caper DAX: Программирование 9 01.04.2010 09:16
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
Сколько раз вызывается DataMethod поля грида при инициализации этого грида? storer DAX: Программирование 2 18.11.2003 14:03

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

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

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