|
|
|
|
#1 |
|
Участник
|
Переход к основной таблице номенклатуры
Здравствуйте, уважаемые коллеги!
Не работает переход к основной таблице номенклатуры. При выполнении этой операции открывается номенклатурный справочник, но курсор позиционируется на первую строчку, а не на нужную. Так происходит при переходе из всех таблиц. Для остальных таблиц указанная операция перехода работает нормально На форуме искал, ничего по этой проблеме не нашел. Может, кто-то сталкивался с подобным? Ax 3.0 SP4 |
|
|
|
|
#2 |
|
Участник
|
А у вас порядок сортировки на форме справочника номенклатур по коду или по какому-либо другому полю?
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: DreamCreator (2). | |
|
|
#3 |
|
Участник
|
Скорее всего, вы поменяли индекс на датасорсе в форме номенклатурного справочника.
|
|
|
|
|
#4 |
|
Участник
|
Изменений индекса и сортировки не делал, все стандартное.
|
|
|
|
|
#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. |
|
|
|
|
#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()); |
|
|
|
|
#7 |
|
Участник
|
При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#8 |
|
Участник
|
Рискну высказать еще одно предположение: не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись.
|
|
|
|
|
#9 |
|
Участник
|
А вы переходите к основной таблице по коду номенклатуры или по ее названию?
|
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от denny
...не было ли на форме "Номенклатурные единицы" программных модификаций, накладывающий фильтры? Номенклатура, к который Вы переходите, может не отвечать условиям программного range - вследствие этого курсор переходит на совершенно другую запись.
Цитата:
Сообщение от AraraT®
А вы переходите к основной таблице по коду номенклатуры или по ее названию?
|
|
|
|
|
#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)... Просто делайте модификации корректно. Если уж начали их делать. |
|
|
|
|
#12 |
|
Участник
|
Цитата:
Сообщение от mazzy
Просто делайте модификации корректно. Если уж начали их делать.
|
|
|
|
|
#13 |
|
Участник
|
Цитата:
Сообщение от akvi
Перехожу, конечно же, по коду
Если ваш код содержит специальные символы .,?*"\ или пробел, то такой код нужно экранировать при передаче в range. Используйте SysQuery::Value() чтобы гарантировано экранировать спец.символы. Посмотрите этот метод, чтобы разобраться что и как экранируется. |
|
|
|
|
#14 |
|
Участник
|
Цитата:
Сообщение от AndyD
При таком подходе, если справочник номенклатур большой, то ждать разультата придется долго. |
|
|