Баг в классе SysTableLookupBase, можно поправить например вот так метод formRun
X++:
queryBuildDataSource = formDataSource.queryBuildDataSource();
if (queryBuildDataSource)
{
// Update the Query's select list.
this.buildSelectionList(queryBuildDataSource);
uniqueId = queryBuildDataSource.uniqueId();
}
queryBuildDataSource = formDataSource.queryRunQueryBuildDataSource();
if (queryBuildDataSource)
{
// Update the QueryRun's select list.
this.buildSelectionList(queryBuildDataSource);
uniqueId = queryBuildDataSource.uniqueId();
}
if(query != null && query.queryType() == QueryType::Union)
{
for(i = 1; i <= query.dataSourceCount(); i++)
{
queryBuildDataSource = query.dataSourceNo(i);
if(queryBuildDataSource.uniqueId() != uniqueId)
{
this.buildSelectionList(queryBuildDataSource);
//simple fix srf
if (formDataSource.queryRun() && formDataSource.queryRun().query().dataSourceUniqueId(queryBuildDataSource.uniqueId()))
{
queryBuildDataSource = formDataSource.queryRun().query().dataSourceUniqueId(queryBuildDataSource.uniqueId());
if (queryBuildDataSource)
{
// Update the QueryRun's select list.
this.buildSelectionList(queryBuildDataSource);
}
}
//simple fix srf
}
}
}
Смысл в том, что поля, которые отображаются в лукапе, добавляются в запрос 2 раза(комменты // Update the Query's select list. и // Update the QueryRun's select list.), а для оставшихся DS в query типа union только 1 раз, поэтому и ошибка про несоответствие числа полей в источниках данных
Но логичнее посмотреть метод this.buildSelectionList и поправить его так, чтобы поля которые уже есть в запросе дополнительно в него не добавлялись, тогда метод formRun править не надо будет.