Если говорить про техническую реализацию, то примеры есть в стандарте - класс EREnumLookupMultiSelectGrid, метод new, передача через QueryRun.
X++:
container selectedFields = [tableNum(SysOperationMultiSelectTmp), fieldName2id(tableNum(SysOperationMultiSelectTmp), fieldStr(SysOperationMultiSelectTmp, Values))];
selectTableTmp = this.getMultiSelectTableForEnum(_enumId, _valuesToSkip);
QueryRun localQueryRun = SysOperationHelper::getMultiSelectQueryRun(selectTableTmp);
this.parmCallingControl(_targetStringControl);
this.parmQuery(localQueryRun.query());
this.parmQueryRun(localQueryRun);
Правда использовать временные таблички в лукапах, имеет смысл, если условно там выбор из десятка значений, иначе тормоза при открытии лукапа, будут раздражать куда больше, чем recId в колонке справа.
Также можно в качестве времянки использовать TempDB, заполнять ее прямым запросом через Query::insert_recordset, будет работать быстро, но выглядит это все как какой то Overengineering, ради лукапа.
Я бегло посмотрел по перекрестным ссылкам в стандарте, есть пример (да там нет группировки, может быть можно сделать примерно так же - скрытый контрол с recId - StatisticsOnInvoiceUIBuilder?).
X++:
private void initPostingProfilesDialogField()
{
DialogField postingProfilesField = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(StatisticsOnInvoiceDataContract, parmPostingProfiles));
postingProfilesField.registerOverrideMethod(
methodStr(FormDateControl, lookup),
methodStr(StatisticsOnInvoiceUIBuilder, postingProfilesLookup),
this);
postingProfilesField.lookupButton(FormLookupButton::Always);
SysOperationDialog reportDialogBox = this.dialog();
postingProfilesRecIdsControl = reportDialogBox.formRun().design().addControl(FormControlType::String, PostingProfilesRecIdsControlName);
postingProfilesRecIdsControl.visible(false);
}
private void postingProfilesLookup(FormStringControl _postingProfilesControl)
{
Query query = new Query();
QueryBuildDataSource qbds = query.addDataSource(tableNum(VendLedger));
QueryBuildFieldList qbfl = qbds.fields();
qbfl.dynamic(false);
qbfl.clearFieldList();
qbfl.addField(fieldNum(VendLedger, PostingProfile));
qbfl.addField(fieldNum(VendLedger, Name));
container selectFields = [ tableNum(VendLedger), fieldNum(VendLedger, PostingProfile) ];
SysLookupMultiSelectGrid::lookup(
query,
_postingProfilesControl,
postingProfilesRecIdsControl,
_postingProfilesControl,
selectFields);
}
Если все же нельзя, то может сделать свою лукап-форму ? расширить функционал базового класса, чтобы можно было скрыть контрол с recId ?