08.12.2011, 11:36 | #1 |
Участник
|
Как избежать "обрезания" lookup-списка?
Добрый день, уважаемые коллеги.
Столкнулась с проблемой - при построении lookup-списка, основанного на временной таблице, в случае, если в поле введено какое-то значение, в списке присутствуют элементы начиная с него. Предшествующие данному элементу значения в списке недоступны. Подскажите, как быть. Стирать вручную поле перед перевыбором из списка - неудобно для пользователя в связи с большим объёмом обрабатываемых документов. Если стирать программно, непонятно, по какому условию возвращать стёртое значение обратно. Возможно, есть какое-либо свойство, которое предотвращает автопоиск в списке? |
|
08.12.2011, 11:48 | #2 |
Участник
|
Не доступны - означает отсутствуют в списке? Значение в поле может влиять позиционирование курсора в лукапе. "Проскролить" вверх точно нельзя?
Т.е. лукап перепрограммирован? Можете выложить код? |
|
08.12.2011, 11:52 | #3 |
Участник
|
Попробуйте не мышкой скролить вверх, а на клавиатуре стрелочкой.
__________________
Ivanhoe as is.. |
|
08.12.2011, 12:07 | #4 |
Участник
|
1. Прокрутить вверх точно нельзя.
2. Код достаточно длинный, затрудняюсь, какую часть лучше привести. Вначале строится запрос, потом наполняется временная таблица, затем она используется как основа для лукапа: X++: sysTableLookup.parmTmpBuffer(emplTitleOrgTmp); sysTableLookup.parmTableID(tablenum(emplTitleOrgTmp)); sysTableLookup.parmCallingControl(_formControl); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Name)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Titleid)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Title)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Organization)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, documentnum)); sysTableLookup.performFormLookup(); |
|
08.12.2011, 12:13 | #5 |
Участник
|
В методе объявите переменную
X++: FormRun frmRun; X++: sysTableLookup.performFormLookup(); X++: frmRun = sysTableLookup.formRun();
frmRun.args().lookupValue('');
this.performFormLookup(frmRun);
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 08.12.2011 в 12:45. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
08.12.2011, 12:28 | #6 |
Участник
|
Помню про такую багу в АХ2009(при переходе с ней столкнулся).Она проявляется только в тех лукапах, в которых используются временные таблицы.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: DesertBrowser (1). |
08.12.2011, 13:25 | #7 |
Участник
|
Спасибо!
X++: [COLOR="Red"]this[/COLOR].performFormLookup(frmRun); X++: static void EmplLookup_SignPermit(FormControl _formControl, date _date = systemdateget()) ... void lookup() { ; LookUpClass::EmplLookup__SignPermit(this,CustInvoiceJour.InvoiceDate); } PS использую Axapta 3.0 |
|
08.12.2011, 13:41 | #8 |
Участник
|
Уже разобралась (по примеру SysTableLookup класса):
X++: FormStringControl callingStringControl; ; callingStringControl = _formControl; callingStringControl.performFormLookup(frmRun); |
|
08.12.2011, 13:45 | #9 |
Administrator
|
Цитата:
X++: SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false); X++: sysTableLookup.parmUseLookupValue(false); Решение быстрое, но и с ограничениями.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Pustik (3). |
08.12.2011, 13:55 | #10 |
Участник
|
В Ax3.0 SP 3 такого параметра в классе SysTableLookup нет. Конечно, его можно доработать.
X++: SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false); sysTableLookup.parmUseLookupValue(false); |
|
08.12.2011, 13:58 | #11 |
Участник
|
Не знал, что появилась такая фича в 2009. Спасибо.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
08.12.2011, 14:23 | #12 |
Участник
|
А у Вас Ax3.0 SP 3? В трешке у нас насколько я помню таких глюков не было. И по стрелочке список вверх поднимался и колесиком тоже.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
08.12.2011, 14:39 | #13 |
Administrator
|
Цитата:
Вот код из АХ 2009 (\Classes\SysTableLookup\formRun): X++: args = new Args(); args.object(form); if(useLookupValue && !tmpBuffer) //highlighting existing value doesn't work with temp tables { args.lookupField(lookupField); switch (callingControl.handle()) { case classnum(FormStringControl): callingStringControl = callingControl; args.lookupValue(callingStringControl.text()); break; } } formRun = classfactory.formRunClass(args); form = formRun.form();
__________________
Возможно сделать все. Вопрос времени |
|
08.12.2011, 14:48 | #14 |
Участник
|
Цитата:
А у Вас Ax3.0 SP 3? В трешке у нас насколько я помню таких глюков не было. И по стрелочке список вверх поднимался и колесиком тоже.
Спасибо за решение! |
|
08.12.2011, 14:59 | #15 |
Участник
|
Подскажите, как отсортировать строки по определённому полю временной таблицы в lookup-списке?
|
|
08.12.2011, 15:08 | #16 |
Ищущий знания...
|
В запросе, который строится в Вашем методе lookUp'а, добавьте сортировку по нужному полю
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
08.12.2011, 15:18 | #17 |
Участник
|
Цитата:
В запросе, который строится в Вашем методе lookUp'а, добавьте сортировку по нужному полю
Временную таблицу как раз и пришлось использовать из-за того, что в одном запросе вернуть результат в виде одного поля нельзя: значение берётся то из одной таблицы, то из другой (речь о ФИО, которые некоторые сотрудники меняют, и предыдущее(ие) значение(ия) которого хранятся в отдельной таблице). |
|
08.12.2011, 15:28 | #18 |
Ищущий знания...
|
Цитата:
Сообщение от DesertBrowser
Не все поля берутся из результатов одного запроса. Некоторые значения заменяются на другие, в результате чего строки, первоначально отсортированные, частично теряют алфавитный порядок.
Временную таблицу как раз и пришлось использовать из-за того, что в одном запросе вернуть результат в виде одного поля нельзя: значение берётся то из одной таблицы, то из другой (речь о ФИО, которые некоторые сотрудники меняют, и предыдущее(ие) значение(ия) которого хранятся в отдельной таблице). в sysTableLookup вы передаете запрос по этой таблице (в коде это строка sysTableLookup.parmQuery(query)) ?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
08.12.2011, 15:40 | #19 |
Участник
|
Делаю так, получаю ошибку при открытии лукапа"Функция SysTableLookup.formRun была неверно вызвана":
X++: qbds11 = q1.addDataSource(tablenum(emplTitleOrgTmp)); qbds11.addSortField(fieldnum(emplTitleOrgTmp,name)); sysTableLookup.parmTmpBuffer(emplTitleOrgTmp); //sysTableLookup.parmTableID(tablenum(emplTitleOrgTmp)); эту строку закомментировала sysTableLookup.parmQuery(q1); //вставляю эту строку sysTableLookup.parmCallingControl(_formControl); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Name)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Titleid)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Title)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, Organization)); sysTableLookup.addLookupfield(fieldNum(EmplTitleOrgTmp, documentnum)); frmRun = sysTableLookup.formRun(); frmRun.args().lookupValue(''); callingStringControl = _formControl; callingStringControl.performFormLookup(frmRun); |
|
08.12.2011, 15:43 | #20 |
Участник
|
Нужно раскомментировать, тогда всё получается. Спасибо!
X++: sysTableLookup.parmTableID(tablenum(emplTitleOrgTmp)); |
|
|
|