06.02.2013, 15:02 | #1 |
Участник
|
Странное поведение при обновлении форм ах2009
Уважаемые господа, сталкивался ли кто с подобной проблемой? При нажатии F5 на формах заказы на покупку и заказы на продажу, курсор уходит на другую запись формы (произвольно). Кажется, что такое поведение началось после накатывания обновления до версии 5.0.1500.64.91 (заметили не сразу). Используется бразильский слой.
С уважением, Дмитрий. |
|
06.02.2013, 18:04 | #2 |
Участник
|
Обновлялось что? Приложение, клиент, АОС? При сильном (уровня SP) несоответствии АОСа и клиента в 2009 было много разных глюков.
__________________
Ivanhoe as is.. |
|
07.02.2013, 08:03 | #3 |
Участник
|
Обновили все, полное соответсвие по версии клиента и сервера. Ни каких других глюков замечено не было.
В принципе, кто нибудь сталкивался с подобным поведение АХ? С уважением, Дмитрий. Последний раз редактировалось DmitryK; 07.02.2013 в 08:37. |
|
07.02.2013, 15:49 | #4 |
Участник
|
Я так понимаю, что ни кто с подобным поведением системы не сталкивался и не может предложить как с этим бороться?
C уважением, Дмитрий. |
|
07.02.2013, 17:21 | #5 |
Участник
|
Я так понимаю, по F5 выполняется DS.research(true), где true - параметр _retainPosition. Сохранение позиции осуществляется за счет запоминания индекса записи в выборке и последующего перехода к записи с тем же индексом, так что теоретически курсор может уходить на другую запись, если выборка изменилась между последним обновлением формы и нажатием F5. В любом случае, стоит, наверно, посмотреть, как ведут себя другие формы в аналогичных ситуациях, например, формы справочников, где набор записей достаточно стабилен в масштабах времени работы с формой.
|
|
|
За это сообщение автора поблагодарили: DmitryK (1). |
08.02.2013, 08:45 | #6 |
Участник
|
Подобные проблемы есть только с формами Заказов на покупку/продажу. В обоих гридах (шапка, строки). Убрали все свои модификации этих форм, эффект остался. Возможно проблема в бразильской модификации. В российской аксапте ни кто подобного не наблюдал?
С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 08:57. |
|
08.02.2013, 09:00 | #7 |
Участник
|
Значит, вероятнее всего, обновленное ядро ни при чем и дело в кастомизациях этих форм либо в изменениях, появившихся после обновления приложения. Может, с сортировкой записей в запросе там какие-то манипуляции производятся. Как минимум, при переходе к форме основной таблицы сортировка может приводить к проблемам с позиционирование курсора, может, и тут она вмешивается.
|
|
08.02.2013, 11:15 | #8 |
Участник
|
Первоначально эффект заметили при использовании кнопки на строках покупки <Настройка> - налог. Курсор переходит на другую запись.
С уважением, Дмитрий. |
|
08.02.2013, 12:22 | #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 уважением, Дмитрий. |
|
08.02.2013, 12:36 | #10 |
Участник
|
Так вызывается
X++: purchLine_ds.executeQuery() запомнить позицию с помощью X++: pos = purchLine_ds.getPosition(); X++: purchLine_ds.setPosition( pos ); |
|
|
За это сообщение автора поблагодарили: alex55 (1), DmitryK (1). |
08.02.2013, 12:44 | #11 |
Участник
|
Спасибо, Дим.
Просто закомментарив executeQuery() получается сохранение курсора. Вылечим следствие ..., хотелось бы понять зачем это сделано? К сожалению не могу посмотреть выполнение (состав) данного метода в российской реализации, если он такой же, то эффект должен проявляться, а судя по количеству откликов его нет. С уважением, Дмитрий. |
|
08.02.2013, 12:51 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DmitryK (1). |
08.02.2013, 13:16 | #13 |
Участник
|
Сергей, не совсем так. Эффект есть при нажатии F5 и кнопки на строках покупки <Настройка> - налог. Пользователь хочет посмотреть налоги по строке, а смотрит не по той, что была выбрана (в этом случае всегда по первой). Подумалось, что проблема может быть вызвана одной причиной. Начали с налогов.
X++: void clicked()
{;
element.automaticTotalDiscount();
PurchTotals::showTaxLine(purchTable,purchLine);
} С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:19. |
|
08.02.2013, 13:25 | #14 |
Участник
|
Перекрыли executeQuery() , поставили точку останова, по F5 он вызывается.
С уважением, Дмитрий. |
|
08.02.2013, 13:31 | #15 |
Участник
|
|
|
08.02.2013, 13:36 | #16 |
Участник
|
Выше linkActive(). При вызове super() этого метода вызывается executeQuery()
С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:41. |
|
08.02.2013, 13:40 | #17 |
Участник
|
Вы на каком датасурсе перекрыли executeQuery() и на каком гриде жмёте F5?
|
|
08.02.2013, 13:43 | #18 |
Участник
|
PurchLine, нижний грид (строки)
С уважением, Дмитрий. |
|
08.02.2013, 14:49 | #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 уважением, Дмитрий. |
|
08.02.2013, 15:07 | #20 |
Участник
|
Фикс не срабатывает по-видимому, потому что загадочный вызов linkActive()->executeQuery() происходит не внутри super метода task(), а чуть позже.
Можно попробовать действия для запоминания и восстановления позиции перенести непосредственно в метод executeQuery, а в методе task() только устанавливать флаг о необходимости таких действий. После выполнения этих действий в методе executeQuery не забыть снять флаг. Последний раз редактировалось S.Kuskov; 08.02.2013 в 15:30. |
|