|
12.03.2007, 11:45 | #1 |
Участник
|
Фильтр в Lookup по полю другой таблицы
Есть такая проблема: необходимо в Lookup выводить только те записи, у который доп. поле справочника имеет определенное значение.
Например - показать все переносы, у складов назначения которых не стоит флаг "обязательное пополнение". (Разумеется, в реале имеется в виду новое добавленное поле "временный склад", поле склад назначения в заголовке перемещения - так же доработка, используемая в определенных ситуациях). Формирую в соответствующем методе прицепление дополнительного источника данных, ставлю фильтр по полю, и... он выводит на форму поле, по которому осуществляется прицепление нового источника данных, а при попытке наложить фильтр - не показывает вообще ничего Может, кто подскажет? |
|
12.03.2007, 12:05 | #2 |
Участник
|
Смотрите метод lookupTransIdReturn на таблице InventTrans.
|
|
12.03.2007, 12:27 | #3 |
Участник
|
согласен, красивое решение. в след раз понадобится. проблема в том, что это поле - не часть InventDim, а прямо поле на таблице. Согласен, неправильно и криво. Просто так было сделано по изначальной постановке, а я сейчас разгребаю.
|
|
12.03.2007, 12:33 | #4 |
Участник
|
Не совсем понял, в чем проблема, но на всякий случай приведу код - лукап номенклатур, которые не заблокированы по соответствующему модулю
X++: client static void LookupItemIdOnType(FormStringControl _fc, ModuleInventPurchSales _module = ModuleInventPurchSales::Invent) { sysTableLookup sysTableLookup; Query query; QueryBuildDataSource queryBuildDataSource; QueryBuildDataSource queryBuildDataSourceModule; ; sysTableLookup = sysTableLookup::newParameters(tableNum(InventTable), _fc); sysTableLookup.addLookupfield(fieldNum(InventTable, itemId)); sysTableLookup.addLookupfield(fieldNum(InventTable, itemName)); query = new Query(); queryBuildDataSource = query.addDataSource(tableNum(InventTable)); queryBuildDataSourceModule = queryBuildDataSource.addDataSource(tableNum(InventTableModule)); queryBuildDataSourceModule.addLink(fieldNum(InventTable, ItemId), fieldNum(InventTableModule, ItemId)); queryBuildDataSourceModule.addRange(fieldNum(InventTableModule, ModuleType)).value(queryValue(_module)); queryBuildDataSourceModule.addRange(fieldNum(InventTableModule, Blocked)).value(queryValue(NoYes::No)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } Как видите, фильтр накладывается на доп. таблицу, при этом поле не выводится в лукапе. |
|
12.03.2007, 12:54 | #5 |
Участник
|
Спасибо.
Действительно, фильтр работает, хотя на форму из второй таблицы белиберда выводится. вывел просто display-metod туда, и все стало ок. |
|
12.03.2007, 12:55 | #6 |
Участник
|
|
|
12.03.2007, 13:06 | #7 |
Участник
|
В принципе, тоже рабочий вариант. Просто у меня там других условий и фильтров немеряно кроме этого. поэтому и кодом делал.
|
|