|
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, 13:45 | #5 |
Administrator
|
Цитата:
X++: SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false); X++: sysTableLookup.parmUseLookupValue(false); Решение быстрое, но и с ограничениями.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Pustik (3). |
08.12.2011, 13:55 | #6 |
Участник
|
В Ax3.0 SP 3 такого параметра в классе SysTableLookup нет. Конечно, его можно доработать.
X++: SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false); sysTableLookup.parmUseLookupValue(false); |
|
08.12.2011, 14:23 | #7 |
Участник
|
А у Вас Ax3.0 SP 3? В трешке у нас насколько я помню таких глюков не было. И по стрелочке список вверх поднимался и колесиком тоже.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
08.12.2011, 14:39 | #8 |
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, 13:58 | #9 |
Участник
|
Не знал, что появилась такая фича в 2009. Спасибо.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
08.12.2011, 12:13 | #10 |
Участник
|
В методе объявите переменную
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 | #11 |
Участник
|
Помню про такую багу в АХ2009(при переходе с ней столкнулся).Она проявляется только в тех лукапах, в которых используются временные таблицы.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: DesertBrowser (1). |
08.12.2011, 13:25 | #12 |
Участник
|
Спасибо!
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 | #13 |
Участник
|
Уже разобралась (по примеру SysTableLookup класса):
X++: FormStringControl callingStringControl; ; callingStringControl = _formControl; callingStringControl.performFormLookup(frmRun); |
|
|
|