14.04.2011, 13:24 | #1 |
Участник
|
Очередной сюрприз от АХ2009
Добрый день.
В стандартной АХ, после каждого закрытия формы, она запоминает размер и местоположение формы. Теперь попробуем следующее: Открываем Справочник номенклатур, настроим размер (ширину, высоту) и свернем форму. Не разворачивая справочник закроем Основное окно АХ (т.е. всю АХ). Вместе с ней автоматически закроется и свернутое нами окно Справочника. Открываем АХ, открываем справочник и видим, что он не сохраняет размеры, а превращает справочник в узкую полоску, которую снова приходится раздвигать!!!!!! Если форму сделать MDI, проблема исчезнет. Но у нас, например, на MDI сидят только разработчики, а пользователи научены и, наверное, уже привыкли к стандартным настройкам. Может быть это только у нас? Может быть, это связано с тем что у нас WinXP Professional SP3?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
14.04.2011, 13:30 | #2 |
Banned
|
|
|
14.04.2011, 13:35 | #3 |
Участник
|
да, конечно, забыл сказать, что у нас SaveSize включен на всех формах.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
14.04.2011, 13:36 | #4 |
Участник
|
Цитата:
Через какое то время надоело объяснять пользователям куда у них "пропала" форма "заказы" (например)... После исследования проблемы обнаружилось что не верный размер окна "запоминается" при закрытии формы. Как и с другими глюками в поведении форм в Ax2009, выручил класс SysSetupFormRun. (Эх, что бы мы делали без него ???) Решил сделать так (см ниже). Это помогло... X++: public void init() { // <GEEU> this.raiseEvent_W(methodstr(FormRunListener_W, beforeInit)); // </GEEU> super(); ... heightValue = this.design().heightValue(); // FIX X++: public void close() { ; this.repairForm(); super(); } X++: void repairForm() // Избежать сорачивание формы в узкую полоску { ; if (this.design().saveSize() == true) { if (this.design().heightValue() < 30) { this.design().heightValue(heightValue); } } } |
|
|
За это сообщение автора поблагодарили: Pustik (2), Logger (3), Ivanhoe (3), alex55 (2), S.Kuskov (5), Kabardian (4). |
14.04.2011, 15:02 | #5 |
Участник
|
Мы нашли еще такой вариант :
X++: public void close() { if (this.design().saveSize()) this.setActive(); super(); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Ansi (0), Logger (3), Poleax (2), Ivanhoe (2), ivas (2), Sergey Petrov (1), someOne (2), Kabardian (4). |
08.06.2012, 10:49 | #6 |
Участник
|
Коллеги, два вопроса Есть клиент версии 5.0.1500.6491.
Первый предложенный в этой ветке вариант периодически выдает ошибку на методе close() - якобы heightValue не определена. Второй вариант только что попробовал - не работает.
__________________
Ivanhoe as is.. |
|
08.06.2012, 12:50 | #7 |
Участник
|
Цитата:
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 heightValue; // <-- добавить это Можете описать как эту ошибку воспроизвести ? Каков точный текст ошибки ? |
|
08.06.2012, 13:15 | #8 |
Участник
|
Переменную, конечно, добавили. Ошибка выдается при попытке использовать эту переменную по назначению: this.design().heightValue(heightValue);
Цитата:
Ошибка времени выполнения: Глобальные системные переменные не найдены.
(C)\Classes\SysSetupFormRun\Close - line 9
__________________
Ivanhoe as is.. |
|
08.06.2012, 13:37 | #9 |
Участник
|
Цитата:
Возможно в 2009-й тоже что-то подобное имеет место быть. Лечил - сохранением нужных значений в глобальном кеше. Пример тут : Сброс фильтра в KR3 по Ctrl-N |
|
08.06.2012, 14:55 | #10 |
Участник
|
Цитата:
(Это затем экономит время при сравнении слоев приложения "вручную", а так же делает более наглядным смысл сделанных изменений) Никаких других целей специально не преследовалось. Указанную вами ошибку не встречал ни разу. Видимо какой то баг ядра... Тем более что у этого класса есть и другие переменные класса. Возможно использование переменных глобального кеша действительно может решить проблему. |
|
08.06.2012, 15:20 | #11 |
Участник
|
В том то и дело, что другие переменные есть и они работают (красим фон для тестовой базы).
Такая же ошибка была на другой инсталляции с RU-5. Работа на терминальном сервере под управлением Windows Server 2008. P.S. на третьем сервере программист предложил такой вариант, там это работает, у меня - нет. X++: public void close() { ; infolog.activateWindow(this.hWnd()); super(); }
__________________
Ivanhoe as is.. |
|
08.06.2012, 16:53 | #12 |
Участник
|
а если вместо переменной ему подставить голую циферку, чего будет?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
09.06.2012, 08:37 | #13 |
Участник
|
|
|
09.06.2012, 10:48 | #14 |
Участник
|
__________________
Ivanhoe as is.. |
|
Теги |
syssetupformrun, баг, форма, ax2009 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|