02.06.2011, 09:15 | #1 |
Участник
|
Поля из разных таблиц в динамической Lookup-форме
Здравствуйте!
Помогите, пожалуйста, с ответом на вопрос: Есть ли возможность программно - посредством перекрытия метода lookup() строкового контрола (StringEdit) отобразить поля из двух разных таблиц, связанных через InnerJoin. Подобного нигде не видел, и посему мне кажется, что реализовать подобную конструкцию нельзя в Аксапте (версия Акстапты 3.0 SP1), т.к. насколько я понимаю, в лукапной форме будут отображаться только поля таблицы, которая указана в нижеприведенной строке: X++: sysTableLookup = SysTableLookup::newParameters(tableNum(), ); P.S. Создание внешней lookup-формы как вариант я учитываю, но все же хочется узнать, есть ли возможность сделать вышеописанное программно.
__________________
С уважением, Александр. |
|
02.06.2011, 09:30 | #2 |
Участник
|
Постмотрите метод formRun в классе SysTableLookup и сами все поймете (если кратко - нельзя). Возможно Вам подойдет класс TableLookup_RU - там вместо lookupField можно указывать метод. А так, либо lookup-форма, либо доработка.
|
|
|
За это сообщение автора поблагодарили: samolalex (1). |
02.06.2011, 10:32 | #3 |
Участник
|
А если попробовать View сделать?
|
|
|
За это сообщение автора поблагодарили: samolalex (1). |
02.06.2011, 10:46 | #4 |
Участник
|
У класса SysTableLookup есть такой метод SysTableLookup.parmQuery() куда в качестве параметра можно передать предварительно сформированный Query, в том числе и по нескольким таблицам. Общая схема примерно такая
X++: // Формируем Query query = new Query() queryBuildDataSource1 = query.addDataSource(tableNum(Table1)) queryBuildDataSource2 = queryBuildDataSource1.addDataSource(tableNum(Table2)) (...) // Инициализируем класс для создания формы lookup sysTableLookup = SysTableLookup::newParameters(tablenum(Table1), _lookupCtrl); // Какие поля должны отображаться в выпадающем списке sysTableLookup.addLookupfield(fieldnum(Table1, Field1)); sysTableLookup.addLookupfield(fieldnum(Table1, Field2)); // Передаем запрос в форму Lookup sysTableLookup.parmQuery(query); // Формируем форму Lookup sysTableLookup.performFormLookup(); \Forms\PBATreeInsertDefaultRoute\Designs\Design\StringEdit:PBADefaultRouteId\Methods\lookup Хотя, кажется, не получится вывести поля из разных таблиц. Впрочем, я не пробовал. Может и получится... PS: Нет. Не получится. Формированием Grid в форме lookup занимается метод \Classes\SysTableLookup\buildGrid() в котором указывается Id только одной таблицы-источника. Значит, добавить объекты из нескольких таблиц-источников - не получится. Не будут сформированы корректные Id источников Последний раз редактировалось Владимир Максимов; 02.06.2011 в 10:57. |
|
|
За это сообщение автора поблагодарили: samolalex (1). |
02.06.2011, 10:48 | #5 |
MCT
|
Может я чего-то не понял, но почему нельзя использовать query?
X++: public void lookup() { Query queryLookup = new Query(); QueryBuildDataSource qbdsRPayGroupTable; QueryBuildDataSource qbdsRPayGroupSetMemberTable; SYSTableLookup sysTableLokup = SYSTableLookup::newParameters(TableNum(RPayGroupTable), this); ; sysTableLokup.addLookupfield(fieldNum(RPayGroupTable, PayGroup), true); sysTableLokup.addLookupfield(fieldNum(RPayGroupTable, Name), false); qbdsRPayGroupTable = queryLookup.addDataSource(TableNum(RPayGroupTable)); qbdsRPayGroupSetMemberTable = qbdsRPayGroupTable.addDataSource(tablenum(RPayGroupSetMemberTable)); qbdsRPayGroupSetMemberTable.relations(true); qbdsRPayGroupSetMemberTable.addRange(fieldnum(RPayGroupSetMemberTable, GroupSetId)).value(QueryValue(RHRMParameters::find().GroupSetIdEmplFilter)); sysTableLokup.parmQuery(queryLookup); sysTableLokup.performFormLookup(); }
__________________
Axapta book for developer |
|
|
За это сообщение автора поблагодарили: samolalex (1). |
02.06.2011, 11:00 | #6 |
Ищущий знания...
|
я предлагаю сделать немного по другому.
создать форму LookUp'a (для примера можно посмотреть форму InventBatchIdLookup). На этой форме написать нужный Вам запрос, и вывести нужные поля (столбцы). потом создаете для Вашего StringControl'а EDT и ему в свойствах указываете FormHelp (опять же для примера можете глянуть EDT InventBatchId).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: samolalex (1). |
02.06.2011, 11:01 | #7 |
Участник
|
Кстати, у класса sysTableLookup есть класс-наследник TableLookup_RU. Основное отличие в том, что в классе TableLookup_RU в качестве поля Grid можно указать дисплейный метод таблицы-источника. Ну, а в дисплейном методе обратится к полю другой таблицы. Пример смотри в форме
\Forms\RHRMOrderTable\Designs\Design\[Tab:Tab]\[TabPage:General]\[Group:Location]\StringEdit:tripState\Methods\lookup PS: Только что заметил, что _scorp_ уже сказал все то же самое в самом первом ответе Последний раз редактировалось Владимир Максимов; 02.06.2011 в 11:10. |
|
02.06.2011, 11:07 | #8 |
Участник
|
Автору темы необходимо в форме lookup отобразить поля из двух разных таблиц. Не запрос создать, а чтобы в выпадающем списке были поля из разных таблиц.
Для этого, теоретически, в методах sysTableLokup.addLookupfield() надо перечислить поля из разных таблиц. Но при формировании Grid формы lookup в классе sysTableLokup это вызовет ошибку. |
|
06.06.2011, 20:20 | #9 |
Участник
|
Спасибо Всем огромное за мнения! Вопрос решил созданием "внешней" формы. Это оказался, по-моему, самый оптимальный вариант для решения данной задачи.
__________________
С уважением, Александр. |
|