![]() |
#1 |
Участник
|
Странное поведение при обновлении форм ах2009
Уважаемые господа, сталкивался ли кто с подобной проблемой? При нажатии F5 на формах заказы на покупку и заказы на продажу, курсор уходит на другую запись формы (произвольно). Кажется, что такое поведение началось после накатывания обновления до версии 5.0.1500.64.91 (заметили не сразу). Используется бразильский слой.
С уважением, Дмитрий. |
|
![]() |
#2 |
Участник
|
Обновлялось что? Приложение, клиент, АОС? При сильном (уровня SP) несоответствии АОСа и клиента в 2009 было много разных глюков.
__________________
Ivanhoe as is.. |
|
![]() |
#3 |
Участник
|
Обновили все, полное соответсвие по версии клиента и сервера. Ни каких других глюков замечено не было.
![]() В принципе, кто нибудь сталкивался с подобным поведение АХ? С уважением, Дмитрий. Последний раз редактировалось DmitryK; 07.02.2013 в 08:37. |
|
![]() |
#4 |
Участник
|
Я так понимаю, что ни кто с подобным поведением системы не сталкивался и не может предложить как с этим бороться?
C уважением, Дмитрий. |
|
![]() |
#5 |
Участник
|
Я так понимаю, по F5 выполняется DS.research(true), где true - параметр _retainPosition. Сохранение позиции осуществляется за счет запоминания индекса записи в выборке и последующего перехода к записи с тем же индексом, так что теоретически курсор может уходить на другую запись, если выборка изменилась между последним обновлением формы и нажатием F5. В любом случае, стоит, наверно, посмотреть, как ведут себя другие формы в аналогичных ситуациях, например, формы справочников, где набор записей достаточно стабилен в масштабах времени работы с формой.
|
|
|
За это сообщение автора поблагодарили: DmitryK (1). |
![]() |
#6 |
Участник
|
Подобные проблемы есть только с формами Заказов на покупку/продажу. В обоих гридах (шапка, строки). Убрали все свои модификации этих форм, эффект остался. Возможно проблема в бразильской модификации. В российской аксапте ни кто подобного не наблюдал?
С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 08:57. |
|
![]() |
#7 |
Участник
|
Значит, вероятнее всего, обновленное ядро ни при чем и дело в кастомизациях этих форм либо в изменениях, появившихся после обновления приложения. Может, с сортировкой записей в запросе там какие-то манипуляции производятся. Как минимум, при переходе к форме основной таблицы сортировка может приводить к проблемам с позиционирование курсора, может, и тут она вмешивается.
|
|
![]() |
#8 |
Участник
|
Первоначально эффект заметили при использовании кнопки на строках покупки <Настройка> - налог. Курсор переходит на другую запись.
С уважением, Дмитрий. |
|
![]() |
#9 |
Участник
|
X++: public void automaticTotalDiscount() { PurchTable localPurchTable; ; if(VendParameters::find().AutomaticTotalDiscount) { for (localPurchTable = purchTable_ds.getFirst(true) ? purchTable_ds.getFirst(true) : purchTable_ds.cursor(); localPurchTable; localPurchTable = purchTable_ds.getNext()) { localPurchTable.updateFinalDisc(); } purchTable_ds.reread(); purchTable_ds.refresh(); purchLine_ds.executeQuery(); } } C уважением, Дмитрий. |
|
![]() |
#10 |
Участник
|
Так вызывается
X++: purchLine_ds.executeQuery() запомнить позицию с помощью X++: pos = purchLine_ds.getPosition(); X++: purchLine_ds.setPosition( pos ); |
|
|
За это сообщение автора поблагодарили: alex55 (1), DmitryK (1). |
![]() |
#11 |
Участник
|
Спасибо, Дим.
Просто закомментарив executeQuery() получается сохранение курсора. Вылечим следствие ..., хотелось бы понять зачем это сделано? К сожалению не могу посмотреть выполнение (состав) данного метода в российской реализации, если он такой же, то эффект должен проявляться, а судя по количеству откликов его нет. С уважением, Дмитрий. |
|
![]() |
#12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DmitryK (1). |
![]() |
#13 |
Участник
|
Сергей, не совсем так. Эффект есть при нажатии F5 и кнопки на строках покупки <Настройка> - налог. Пользователь хочет посмотреть налоги по строке, а смотрит не по той, что была выбрана (в этом случае всегда по первой). Подумалось, что проблема может быть вызвана одной причиной. Начали с налогов.
X++: void clicked()
{;
element.automaticTotalDiscount();
PurchTotals::showTaxLine(purchTable,purchLine);
} С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:19. |
|
![]() |
#14 |
Участник
|
Перекрыли executeQuery() , поставили точку останова, по F5 он вызывается.
С уважением, Дмитрий. |
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
Участник
|
Выше linkActive(). При вызове super() этого метода вызывается executeQuery()
С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:41. |
|
![]() |
#17 |
Участник
|
Вы на каком датасурсе перекрыли executeQuery() и на каком гриде жмёте F5?
|
|
![]() |
#18 |
Участник
|
PurchLine, нижний грид (строки)
С уважением, Дмитрий. |
|
![]() |
#19 |
Участник
|
В форме PurchTable обнаружен интересный метод, где отлавливаются F5. В нем, вроде, нет ни чего наказуемого, но не очень понятно предназначение. Код метода не помечен разработчиком, напрмер /GBR.
X++: public int task(int _taskId) { int ret; int rowposition; #task ; if(_taskId == #taskFormRefreshMenu ||_taskId == #taskFormRefresh_F5 ) { rowposition = this.objectSet().getPosition(); ret = super(_taskId); this.objectSet().setPosition(rowposition); } else ret = super(_taskId); return ret; } C уважением, Дмитрий. |
|
![]() |
#20 |
Участник
|
Фикс не срабатывает по-видимому, потому что загадочный вызов linkActive()->executeQuery() происходит не внутри super метода task(), а чуть позже.
Можно попробовать действия для запоминания и восстановления позиции перенести непосредственно в метод executeQuery, а в методе task() только устанавливать флаг о необходимости таких действий. После выполнения этих действий в методе executeQuery не забыть снять флаг. Последний раз редактировалось S.Kuskov; 08.02.2013 в 15:30. |
|