AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2011, 11:36   #1  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
! Как избежать "обрезания" lookup-списка?
Добрый день, уважаемые коллеги.

Столкнулась с проблемой - при построении lookup-списка, основанного на временной таблице, в случае, если в поле введено какое-то значение, в списке присутствуют элементы начиная с него. Предшествующие данному элементу значения в списке недоступны.
Подскажите, как быть. Стирать вручную поле перед перевыбором из списка - неудобно для пользователя в связи с большим объёмом обрабатываемых документов. Если стирать программно, непонятно, по какому условию возвращать стёртое значение обратно. Возможно, есть какое-либо свойство, которое предотвращает автопоиск в списке?
Старый 08.12.2011, 11:48   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Предшествующие данному элементу значения в списке недоступны
Не доступны - означает отсутствуют в списке? Значение в поле может влиять позиционирование курсора в лукапе. "Проскролить" вверх точно нельзя?
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
при построении lookup-списка, основанного на временной таблице
Т.е. лукап перепрограммирован? Можете выложить код?
Старый 08.12.2011, 11:52   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Попробуйте не мышкой скролить вверх, а на клавиатуре стрелочкой.
__________________
Ivanhoe as is..
Старый 08.12.2011, 12:07   #4  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
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();
3. Стрелочкой пробовала, не прокручивается.
Старый 08.12.2011, 12:13   #5  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
В методе объявите переменную
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  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Помню про такую багу в АХ2009(при переходе с ней столкнулся).Она проявляется только в тех лукапах, в которых используются временные таблицы.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: DesertBrowser (1).
Старый 08.12.2011, 13:25   #7  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Спасибо!
X++:
[COLOR="Red"]this[/COLOR].performFormLookup(frmRun);
У меня построение лукапа выполняется в статическом методе специально отведённого под лукапы класса, куда из метода lookup контрола передаётся параметр типа FormControl:
X++:
static void EmplLookup_SignPermit(FormControl    _formControl, date _date = systemdateget())
...
void lookup()
{
    ;
    LookUpClass::EmplLookup__SignPermit(this,CustInvoiceJour.InvoiceDate);
}
Причём у _formControl отсутствует метод performFormLookup(). Как до него добраться (не из lookup-метода контрола, а из статического метода)?

PS использую Axapta 3.0
Старый 08.12.2011, 13:41   #8  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Уже разобралась (по примеру SysTableLookup класса):

X++:
FormStringControl       callingStringControl;
;
callingStringControl = _formControl;
callingStringControl.performFormLookup(frmRun);
Старый 08.12.2011, 13:45   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
1. Прокрутить вверх точно нельзя.
2. Код достаточно длинный, затрудняюсь, какую часть лучше привести.
3. Стрелочкой пробовала, не прокручивается.
Есть "быстрый" способ. Попробуйте либо при инициализации класса SysTableLookup написать:
X++:
SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false);
либо уже потом:
X++:
sysTableLookup.parmUseLookupValue(false);
Вы лишитесь позиционирования. Но и увидите весь список целиком.
Решение быстрое, но и с ограничениями.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Pustik (3).
Старый 08.12.2011, 13:55   #10  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
В Ax3.0 SP 3 такого параметра в классе SysTableLookup нет. Конечно, его можно доработать.
X++:
SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false);
sysTableLookup.parmUseLookupValue(false);
Старый 08.12.2011, 13:58   #11  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Есть "быстрый" способ.
X++:
SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false);
X++:
sysTableLookup.parmUseLookupValue(false);
Не знал, что появилась такая фича в 2009. Спасибо.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 08.12.2011, 14:23   #12  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
В Ax3.0 SP 3 такого параметра в классе SysTableLookup нет.
А у Вас Ax3.0 SP 3? В трешке у нас насколько я помню таких глюков не было. И по стрелочке список вверх поднимался и колесиком тоже.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 08.12.2011, 14:39   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
В Ax3.0 SP 3 такого параметра в классе SysTableLookup нет. Конечно, его можно доработать.
X++:
SysTableLookup::newParameters(tablenum(emplTitleOrgTmp), _ctrl, false);
sysTableLookup.parmUseLookupValue(false);
Упс, прошу прощения. Но этот параметр 100% был в 4.0
Вот код из АХ 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  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Цитата:
А у Вас Ax3.0 SP 3? В трешке у нас насколько я помню таких глюков не было. И по стрелочке список вверх поднимался и колесиком тоже.
К сожалению, есть такой глюк. Ни колёсико ни стрелочка не действуют, равно как и кнопка прокрутки вверх списка.

Спасибо за решение!
Старый 08.12.2011, 14:59   #15  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Подскажите, как отсортировать строки по определённому полю временной таблицы в lookup-списке?
Старый 08.12.2011, 15:08   #16  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Подскажите, как отсортировать строки по определённому полю временной таблицы в lookup-списке?
В запросе, который строится в Вашем методе lookUp'а, добавьте сортировку по нужному полю
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 08.12.2011, 15:18   #17  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Цитата:
В запросе, который строится в Вашем методе lookUp'а, добавьте сортировку по нужному полю
Не все поля берутся из результатов одного запроса. Некоторые значения заменяются на другие, в результате чего строки, первоначально отсортированные, частично теряют алфавитный порядок.
Временную таблицу как раз и пришлось использовать из-за того, что в одном запросе вернуть результат в виде одного поля нельзя: значение берётся то из одной таблицы, то из другой (речь о ФИО, которые некоторые сотрудники меняют, и предыдущее(ие) значение(ия) которого хранятся в отдельной таблице).
Старый 08.12.2011, 15:28   #18  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Не все поля берутся из результатов одного запроса. Некоторые значения заменяются на другие, в результате чего строки, первоначально отсортированные, частично теряют алфавитный порядок.
Временную таблицу как раз и пришлось использовать из-за того, что в одном запросе вернуть результат в виде одного поля нельзя: значение берётся то из одной таблицы, то из другой (речь о ФИО, которые некоторые сотрудники меняют, и предыдущее(ие) значение(ия) которого хранятся в отдельной таблице).
Если я правильно понял, то поле ФИО во временной таблице есть.
в sysTableLookup вы передаете запрос по этой таблице (в коде это строка sysTableLookup.parmQuery(query)) ?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 08.12.2011, 15:40   #19  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Делаю так, получаю ошибку при открытии лукапа"Функция 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  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Нужно раскомментировать, тогда всё получается. Спасибо!
X++:
sysTableLookup.parmTableID(tablenum(emplTitleOrgTmp));
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Вспомогательный документооборот. Поле "Код конфигурации вспомогательного бизнес-правила" lookup ни чего не показывает. Blog bot DAX Blogs 0 08.04.2011 10:11
Как убрать автопоиск по "*" для Lookup? Poleax DAX: База знаний и проекты 14 17.03.2009 13:38
"Подсунуть" произвольное значение в lookup nebraska DAX: Программирование 1 19.01.2009 05:36
Есть ли hotkey для открытия списка lookup-поля? ATimTim DAX: Функционал 4 06.10.2004 12:59
Как подавить вызов LookUp формы при нажатии на "*" SergeyA DAX: Программирование 3 29.08.2003 13:10

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:28.