22.05.2006, 15:49 | #1 |
Участник
|
Переход к основной таблице номенклатуры
Здравствуйте, уважаемые коллеги!
Не работает переход к основной таблице номенклатуры. При выполнении этой операции открывается номенклатурный справочник, но курсор позиционируется на первую строчку, а не на нужную. Так происходит при переходе из всех таблиц. Для остальных таблиц указанная операция перехода работает нормально На форуме искал, ничего по этой проблеме не нашел. Может, кто-то сталкивался с подобным? Ax 3.0 SP4 |
|
22.05.2006, 16:05 | #2 |
Участник
|
А у вас порядок сортировки на форме справочника номенклатур по коду или по какому-либо другому полю?
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: DreamCreator (2). |
22.05.2006, 16:40 | #3 |
Участник
|
Скорее всего, вы поменяли индекс на датасорсе в форме номенклатурного справочника.
|
|
23.05.2006, 15:56 | #4 |
Участник
|
Изменений индекса и сортировки не делал, все стандартное.
|
|
23.05.2006, 16:25 | #5 |
Участник
|
Если у вас есть возможность, попробуйте промониторить запрос, идущий на сервер при переходе.
В нормальных условиях на сервер должен уходить запрос вида X++: select ... from INVENTTABLE A, ... where A.DataAreaId = '' and A.ItemId >= 'Код номенклатуры' and ... order by A.DataAreaId, A.ItemId PS Возможно, у вас на форме при инициализации чистятся element.args().lookupField() или element.args().lookupValue()
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 23.05.2006 в 16:28. |
|
23.05.2006, 19:52 | #6 |
Участник
|
Есть вариант - перекрыть метод на поле ист. данных откуда переходим к основной таблице
Код: public void jumpRef() { Args args1; FormRun formRun; InventTable inventTable; ; select firstonly inventTable where inventTable.ItemId == DataSources.ItemId; args1 = new Args(formstr(InventTable)); args1.record(inventTable); formRun = classFactory.formRunClass(args1); formRun.init(); formRun.run(); formRun.detach(); } Да, еще на форме InventTable придеться дописывать в executeQuery что то типа. Код: if (element.args().dataset()) InventTable_DS.findRecord(element.args().record()); |
|
23.05.2006, 23:37 | #7 |
Участник
|
При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго.
__________________
Axapta v.3.0 sp5 kr2 |
|
24.05.2006, 06:02 | #8 |
Участник
|
Рискну высказать еще одно предположение: не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись.
|
|
24.05.2006, 08:36 | #9 |
Участник
|
А вы переходите к основной таблице по коду номенклатуры или по ее названию?
|
|
24.05.2006, 09:07 | #10 |
Участник
|
Цитата:
Сообщение от denny
...не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись.
Цитата:
Сообщение от AraraT®
А вы переходите к основной таблице по коду номенклатуры или по ее названию?
|
|
24.05.2006, 11:15 | #11 |
Участник
|
Цитата:
Сообщение от akvi
Есть такие модификации
Если модификации создают query и datasource формы заново, то никакой связи с внешними таблицами и формами не будет. Ваш код должен брать текущий queryRun формы и модифицировать его. Ни в коем случае не пересоздавать. Т.е. в форма следующий код инициализации датасорса является неправильным, поскольку датасорс пересоздается X++: query q = new Query();
q.addRange(....)
...
this.query(q); X++: super();
this.query().addRange(...)
... X++: super();
SysQuery::findOrCreateRange(this.query(),....);
... Устанавливать значения в range нужно в методе executeQuery. Теоретически можно и не заниматься всей этой "чепухой" и лепить полностью новый запрос в init'е. Вы почувстуете разницу как раз при переходе к основной таблице, при привязке вашей формы к другим (dynaLink) и на прочих интересных вкусностях (например, работа RLS)... Просто делайте модификации корректно. Если уж начали их делать. |
|
24.05.2006, 11:17 | #12 |
Участник
|
Цитата:
Сообщение от akvi
Перехожу, конечно же, по коду
Если ваш код содержит специальные символы .,?*"\ или пробел, то такой код нужно экранировать при передаче в range. Используйте SysQuery::Value() чтобы гарантировано экранировать спец.символы. Посмотрите этот метод, чтобы разобраться что и как экранируется. |
|
24.05.2006, 12:03 | #13 |
Участник
|
Цитата:
Сообщение от mazzy
Просто делайте модификации корректно. Если уж начали их делать.
|
|
24.05.2006, 14:59 | #14 |
Участник
|
Цитата:
Сообщение от AndyD
При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго. |
|