![]() |
#1 |
Участник
|
Фильтр для lookup
Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. На всякий случай - я пользуюсь примерно такими конструкциями: SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(InventTable), _ctrl); Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildDataSource queryBuildDataSource1; QueryBuildRange queryBuildRange; ; sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemName)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemType)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemGroupId)); queryBuildDataSource = query.addDataSource(tablenum(InventTable)); queryBuildDataSource1 = queryBuildDataSource.addDataSource(tablenum(InventItemGroup)); queryBuildDataSource1.joinMode(JoinMode::InnerJoin); queryBuildDataSource1.relations(false); queryBuildDataSource1.addLink(fieldnum(InventTable, ItemGroupId),fieldnum(InventItemGroup,ItemGroupId)); queryBuildRange = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, IsCommodity)); queryBuildRange.value(queryValue(NoYes::Yes)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); Заранее спасибо за ответы! |
|
![]() |
#2 |
Участник
|
Если ограничение по полю той же таблицы с фиксированным значением, то можно его вынести в EDT поля таблицы или контрола на форме, или в лукапе:
X++: control.performTypeLookup(typeId(ItemIdCustom)); |
|
![]() |
#3 |
MCITP
|
![]() Цитата:
Сообщение от nebraska
![]() Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. Есть. Метод performFormLookup() на поле датасорса или на контроле. Пример X++: public void performFormLookup(FormRun _form, FormControl _formControl) { FormDataSource formDS = _form.dataSource(); QueryBuildDatasource qbds; ; qbds = formDS.query().dataSourceTable(TableId); qbds.addRange(fieldNum(TableId, FieldId)).value(< >); super(_form, _formControl); }
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: evv (1), Eldar9x (1), vanokh (1), SuperStar88 (1). |
![]() |
#4 |
MCT
|
Цитата:
Сообщение от nebraska
![]() Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. На всякий случай - я пользуюсь примерно такими конструкциями: SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(InventTable), _ctrl); Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildDataSource queryBuildDataSource1; QueryBuildRange queryBuildRange; ; sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemName)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemType)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemGroupId)); queryBuildDataSource = query.addDataSource(tablenum(InventTable)); queryBuildDataSource1 = queryBuildDataSource.addDataSource(tablenum(InventItemGroup)); queryBuildDataSource1.joinMode(JoinMode::InnerJoin); queryBuildDataSource1.relations(false); queryBuildDataSource1.addLink(fieldnum(InventTable, ItemGroupId),fieldnum(InventItemGroup,ItemGroupId)); queryBuildRange = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, IsCommodity)); queryBuildRange.value(queryValue(NoYes::Yes)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); Заранее спасибо за ответы! queryBuildRangeExt = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, <еще одно поле>)); queryBuildRange.value(queryValue(<ваше значение>));
__________________
Axapta book for developer |
|
![]() |
#5 |
Участник
|
Цитата:
![]() |
|
|
За это сообщение автора поблагодарили: ZVV (1), coolibin (1), vanokh (1). |
![]() |
#6 |
MCITP
|
![]() Цитата:
Сообщение от gl00mie
![]() Не сочтите за занудство, но такой код будет работать почти всегда
![]() Что ж, значит это надо учитывать. ![]() Вообще в аксапте всё так, работает почти всегда. Пока кто-нибудь что-нибудь не подправит и не испортит ![]() [offtop] Не далее как вчера догло ковырялся, пытался понять почему рэндж на форме обрезается где-то до 100 символов, вместо ожидаемых 250. ![]() В итоге был найден код коллеги, который копируя значения рэнджа в другой (в детали не будем вдаваться) использовал буфер "str 100". ![]() [/offtop]
__________________
Zhirenkov Vitaly |
|
Теги |
lookup, фильтр |
|
![]() |
||||
Тема | Ответов | |||
Lookup form, OuterJoin и фильтр | 45 | |||
Создание Lookup формы | 9 | |||
Фильтр в Lookup по полю другой таблицы | 6 | |||
Фильтр в lookup | 7 | |||
lookup фильтр в произвольной lookup форме | 4 |
|