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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.03.2011, 13:10   #1  
Maximin is offline
Maximin
NavAx
NavAx Club
 
415 / 361 (13) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Обычно помогает вот что:
1. Убрать установки visible с active или заменить на enabled.
2. Никаких обновлений "левых" полей/надписей(StaticText) на active - все на display методах. Ну, или как описано - замена на StringEdit.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 09.03.2011, 12:37   #2  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Кажется, понял причину проблемы потери фокуса окна поиска в формах "SalesTable" и "PurchTable"

Проблема там вызвана, судя по всему, функциональностью формата адресов доставки,
которая используется в локализации Аксапта.

Каждый раз, при отрабатывании метода active источника данных формы происходит "перерисовывание" контролов на закладке "Адрес". При этом обновление контролов происходит как в самом заказе, так и в строках заказа (даже если у вас отключен конфигурационный ключ "TradeMultiShipTo" - "Несколько получателей", и закладка "Адрес" в строках - не видима!). Именно в полях адреса имеется контрол "StaticText" который "забирает" фокус.

Решить проблему можно таким способом.
1. Если вы не используется функциональность "Несколько получателей" - лучше всего вообще отключить функциональность Адресов для строк заказа (закупки).
(или "повесить" туда конфигурационный ключ "TradeMultiShipTo")
class FormRunListener_Address_RU
X++:
public static container addressInfo(Args _args)
...
            case formstr(SalesTable) :
                return [[#HeaderDeliveryAddress, tablenum(AddressMap)]];
...
2. Перенести "обновление" полей адреса из метода active источника данных, например, в метод активации закладки "адрес" формы "заказы"
X++:
public void pageActivated()
{
    SysSetupFormRun SysSetupFormRun = element;
    ;
    SysSetupFormRun.active_W();

    super();
}
и отключить его для метода active :
class Info:
X++:
void formNotify(FormRun formRun,FormNotify event)
...
            // <GEEU>
            if (SysDictClass::is(formRun, classnum(SysSetupFormRun)))
            {
                // исправить ошибку потери фокуса при открытии окна поиска, перерисовка происходит при активации tabPage
                if (formRun.name() == FormStr(PurchTable) || formRun.name() == FormStr(SalesTable))
                    break;
                // <--

                sysSetupFormRun = formRun;
                sysSetupFormRun.active_W();
            }
            // </GEEU>

...
Эти меры позволяют не только избежать ошибки потери фокуса, но и по моим ощущениям, ускорить работу самой формы заказы (закупки).
(Так как больше не происходит лишних действий по обновлению полей адреса)
Старый 09.03.2011, 13:29   #3  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Судя по тому что у меня в четверке нет класса FormRunListener_Address_RU - это рецепт для Ax2009 ?
Старый 09.03.2011, 13:40   #4  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Судя по тому что у меня в четверке нет класса FormRunListener_Address_RU - это рецепт для Ax2009 ?
Да, решение для Ax2009.

В предыдущих версиях идея примерно была та же. Группа полей адреса "перерисовывается" каждый раз при активации новой записи.

В версии 4 не видел, но наверное там работает та же система что и в версии 3.0.
Попробуйте перенести код (ниже) (из метода Active) в метод pageActivated
X++:
    if(isConfigurationkeyEnabled(configurationkeynum(RAddress)) && ret)
        addressEngine_RU.afterDataSourceActive();
Старый 09.03.2011, 13:53   #5  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от someOne Посмотреть сообщение
В версии 4 не видел, но наверное там работает та же система что и в версии 3.0.
Как-то по-другому, даже комментирование целиком методов salestable.active() , purchtable.active() не помогает, фокус пропадает как и прежде.
Старый 09.03.2011, 14:01   #6  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Не знаю как в версии 4,0 но может быть и там могут быть поля адресов как в заказе, так и в строках заказа, поэтому метод active нужно отключать в 2-х местах сразу, для обоих источников данных ...

Но так или иначе, поля с адресами - это не единственная возможная причина потери фокуса. Могут быть и другие (свои кастомизации, или еще что...)
За это сообщение автора поблагодарили: Logger (3).
Теги
ax4.0, sysformsearch, поиск, фокус, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Потеря активного буфера записи при вызове super() в update() таблицы TasmanianDevil DAX: Администрирование 13 01.10.2008 11:36
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Критическая ошибка при вызове ранее настроенной формы tolstjak DAX: Администрирование 5 11.04.2007 09:51
Сохранение строки закупки - потеря фокуса? andy239 DAX: Программирование 6 22.01.2006 12:33
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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