06.07.2007, 09:12 | #1 |
Участник
|
Сброс фильтра в KR3 по Ctrl-N
Всем известно поведение клиента KR3, когда при добавлении новой записи сбрасывается пользовательский фильтр на форме.
Вопрос - это как-то можно победить или такое поведение зашито в exe ? |
|
06.07.2007, 10:48 | #2 |
Участник
|
В KR2 то-же самое.
Могу предложить такое решение. В декларацию класса SysSetupFormRun добавить флаг X++: public class SysSetupFormRun extends FormRun { boolean newRecordMode; #if.never #define.CurrentVersion(1) #localmacro.CurrentList #endmacro #endif } X++: ... if (_p1 == 260/* #taskNew*/) newRecordMode = true; if (newRecordMode && _p1 == 2840) ret = 1; else ret = super(_p1); if (_p1 == 260 /* #taskNew*/) newRecordMode = false; ...
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: savel (1), Logger (2). |
06.07.2007, 10:53 | #3 |
Участник
|
Цитата:
|
|
06.07.2007, 10:58 | #4 |
Участник
|
Угу.
По стрелке вниз другой taskId приходит (1282), соответственно, и обработка другая происходит.
__________________
Axapta v.3.0 sp5 kr2 |
|
06.07.2007, 11:12 | #5 |
Участник
|
Цитата:
PS. Судя по моим закладкам, все это уже обсуждалось, выводы сделаны были те же сброс фильтров на формах в KR3 Последний раз редактировалось gl00mie; 06.07.2007 в 11:17. |
|
06.07.2007, 11:22 | #6 |
Участник
|
Ну, я не имею доступ на партнерские ресурсы, но здесь и ниже Андре пишет, что MBS обещала это исправить, так что, скорее всего, бага
Кстати, а чем поиск от фильтра отличается?
__________________
Axapta v.3.0 sp5 kr2 |
|
06.07.2007, 11:49 | #7 |
Участник
|
Цитата:
Сообщение от AndyD
Ну, я не имею доступ на партнерские ресурсы, но здесь и ниже Андре пишет, что MBS обещала это исправить, так что, скорее всего, бага
Я, может, не совссем точно выразился на счет того, что в случае с фильтром всегда будут присутствовать соответствующие записи Конечно, если использовать "фильтрацию записей" (Ctrl-F3), то тоже может ничего не найтись - просто я привык фильтровать через контекстное меню по отдельным полям... Последний раз редактировалось gl00mie; 06.07.2007 в 11:53. |
|
06.07.2007, 12:48 | #8 |
Участник
|
Ну, это в кернеле надо править, а sp6, к примеру, содержит в себе kr3, который от ошибки не избавлен. Так что надо kr4 ждать
А по поводу поиска - так он тоже в конечном счете приводит к наложению фильтра на датасоурс. Так что разделять их не стоит. Имхо.
__________________
Axapta v.3.0 sp5 kr2 |
|
26.07.2007, 14:42 | #9 |
Участник
|
Цитата:
Типа роллап это исправил. Возможно эта багофича лечила именно этот глюк. Перед созданием записи сбрасывала фильтр, чтобы гарантировано не мог воспроизвестись баг с одинаковыми LineNum |
|
|
За это сообщение автора поблагодарили: gl00mie (3). |
27.07.2007, 10:08 | #10 |
Участник
|
Цитата:
Сообщение от Logger
в каком то из роллапов было указано на глюк когда при создании записи на форме с установленным фильтром могли сгенериться одинаковые LineNum. Типа роллап это исправил. Возможно эта багофича лечила именно этот глюк. Перед созданием записи сбрасывала фильтр, чтобы гарантировано не мог воспроизвестись баг с одинаковыми LineNum
Цитата:
Request No. 13800
KB 912788 Short Desc Filtering on any form causes duplicate linenums Problem On the form where lines are numbered it is possible to create duplicate values in the line number field. These duplicate line numbers prevent posting to the journal. Cause This problem may occur when the journal form is filtered by line number. Solution Remove the filter when adding a new line between existing lines on the sales order. Вместо того, чтобы сделать уникальные индексы [JournalId, LineNum] на строках журналов, сделали сброс пользовательского фильтра везде Последний раз редактировалось gl00mie; 27.07.2007 в 10:14. |
|
27.07.2007, 12:49 | #11 |
Участник
|
Лучше сделать так
X++: if (_p1 == 260/* #taskNew*/) SysSetupFormRun::GRD_NewRecordMode(this.hWnd(), true); if (_p1 == 2840 && SysSetupFormRun::GRD_NewRecordMode(this.hWnd())) ret = 1; else ret = super(_p1); if (_p1 == 260 /* #taskNew*/) SysSetupFormRun::GRD_NewRecordMode(this.hWnd(), false); X++: // pkoz 27.07.2007 static boolean GRD_NewRecordMode(int _hwnd, boolean _parm = false) { SysGlobalCache SysGlobalCache = infolog.globalCache(); boolean ret; ; if (prmIsDefault(_parm)) // читаем { ret = SysGlobalCache.get(funcName(), _hWnd, false); } else { if (_parm) { SysGlobalCache.set(funcName(), _hWnd, _parm); } else { SysGlobalCache.remove(funcName(), _hWnd); // значение false не кладем // а просто чистим кеш - чтобы не флудить его ненужными значениями - все равно // hwnd почти всегда новый выделяется } ret = _parm; } return ret; } |
|
|
За это сообщение автора поблагодарили: rumpleteazer (1), erudit (1), dn (3), raz (5), savel (1), Pustik (2), Bega (5), SIrina (1). |
27.07.2007, 12:51 | #12 |
Участник
|
Там проблема не только в индексе, а еще в том что новое значение, которое движок формы генерит автоматом - повторяется.
|
|