02.07.2007, 17:16 | #1 |
MCTS
|
Спозиционироваться на запись
В диалоге, у которого нет датасорса, есть стринговое контрол. Есть также LookUp для это контрола, который выбирает ItemId из InventTable. Установил для этого контрола свойство ExtendedDataType равным ItemId, но не тут то было, переход к основной таблице не работает. Перекрыл JumpRef этого контрола и написал в коде:
X++: public void jumpRef() { InventTable inventTable; Args args = New Args("InventTable"); FormRun FR; ; inventTable = InventTable::find(this.valueStr()); //args.lookupField(fieldNum(InventTable, ItemId)); //args.lookupValue(SlatMaterial.valueStr()); FR = new FormRun(args); super(); FR.init(); FR.dataSource( 1 ).findRecord(inventTable); Fr.run(); Fr.wait(); } |
|
02.07.2007, 17:27 | #2 |
Участник
|
Перенесите вызов findRecord после вызова run()
super() не нужно вызывать, раз уж вы переписываете этот метод. подход через lookupField и lookupvalue используется системой и, имхо, является предпочтительным. почитайте на форуме просто скорость работы findRecord |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
02.07.2007, 17:29 | #3 |
Участник
|
А так:
X++: public void jumpRef() { InventTable inventTable; Args args = New Args("InventTable"); FormRun FR; ; inventTable = InventTable::find(this.valueStr()); FR = new FormRun(args); super(); FR.init(); Fr.run(); FR.dataSource( 1 ).findRecord(inventTable); Fr.wait(); } |
|
02.07.2007, 17:30 | #4 |
Участник
|
еще можно запихать ее в args,record
|
|
02.07.2007, 17:31 | #5 |
Участник
|
а у вас в форме сортировка по коду номенклатуры?
возможно просто что нет, в смысле, что findRecord он же ищет по сортированному массиву, типа. где-то AndyD описывал, почему, в частности, не работает поиск записи по RecId |
|
02.07.2007, 17:34 | #6 |
MCTS
|
блин, ну шикарно! Огромное спасибо! В форме нет сортировки, там просто контрол со строковым значением.
|
|
02.07.2007, 17:35 | #7 |
Участник
|
Кстати, специально только что проверил.
У нас номенклатуры 23000 где-то. так вот, на запись, близкую от конца, через findRecord переходит за секунд 15. через lookupValue - моментально (там же запрос посылается другой) |
|
02.07.2007, 17:35 | #8 |
Участник
|
Да нет, про сортировку - это в форме номенклатурного справочника. и вопрос был больше Максиму.
|
|
02.07.2007, 17:38 | #9 |
MCTS
|
про скорость работы читал, использовать не буду. Просто хотелось понять, почему не работает данный вариант. Если правильно понял, то, наверное, в методе run() формы происходит считывание записей из базы данных в датасорс....
|
|
02.07.2007, 17:40 | #10 |
Участник
|
да. в super() метода run() вызывается executeQuery источника.
|
|
02.07.2007, 18:00 | #11 |
MCTS
|
кстати, если запихать в args().record, то спозиционируется, но откроется форма только с одной записью
|
|
02.07.2007, 18:03 | #12 |
Участник
|
Ну, это уже не позиционирование,а dynalink - здесь запрос уже выбирает только одну запись эту
|
|