Лукап можно строить и по связанным таблицам
X++:
Query query = new Query();
QueryBuildDataSource queryBuildDataSource,queryBuildDataSource2;
QueryBuildRange queryBuildRange,queryBuildRange2;
SysTableLookup sysTableLookup;
;
//Create an instance of SysTableLookup with the form control passed in
sysTableLookup = SysTableLookup::newParameters(tablenum(1), this);
//create the query datasource
queryBuildDataSource = query.addDataSource(tablenum(1));
queryBuildRange = queryBuildDataSource.addRange(fieldnum(1, 1));
queryBuildRange.value('Value1');
queryBuildDataSource2 = queryBuildDataSource.addDataSource(tablenum(2));
queryBuildDataSource2.joinMode(JoinMode::InnerJoin);
queryBuildDataSource2.relations(true);
queryBuildDataSource2.addLink(fieldnum(1, 1), fieldnum(2, 1));
queryBuildRange2 = queryBuildDataSource.addRange(fieldnum(2, 2));
queryBuildRange2.value('Value2');
//Add the fields to be shown in the lookup form
sysTableLookup.addLookupfield(fieldnum(1, 1));
//add the query to the lookup form
sysTableLookup.parmQuery(query);
// Perform lookup
sysTableLookup.performFormLookup();
а если какой-то уж очень мудреный лукап, можно подготовить временную таблицу, заранее ее по нужным критериям заполнить и на основе нее построить лукап