Показать сообщение отдельно
Старый 25.05.2017, 15:50   #1  
Oz is offline
Oz
Участник
Аватар для Oz
 
293 / 51 (2) ++++
Регистрация: 22.08.2002
Адрес: Москва
Ошибка запроса типа Union в лукапе
DAX 2012 R3
версия приложения 6.3.5000.133
версия ядра 6.3.5000.138

Ошибка проявилась в стандартном функционале: при создании нового ресурса (Управление и учет по проектам/Обычный/Ресурсы проекта/Ресурсы). Если в форме создания в поле Рабочий ввести предварительный фильтр с использованием символа *, то при срабатывании лукапа возникает ошибка "Несоответствие числа полей в запросе типа UNION. Номер поля HcmWorkerCubeDimension_1 отличается от номера поля HcmWorkerCubeDimension_2". При этом вызов того же лукапа из поля, не содержащего *, проходит штатно. При попытке отфильтровать появившийся список, используя этот же текст с *, ничего предосудительного не происходит.
Как выяснилось в ходе экспериментов, чтобы воспроизвести такое поведение, достаточно на пустую форму добавить StringEdit, перекрыть у него lookup примерно таким образом:
X++:
public void lookup()
{
    Query query = new Query();
    QueryBuildDataSource qbds_1;
    QueryBuildDataSource qbds_2;

    SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(ProjTable), this);

    query.queryType(QueryType::Union);

    qbds_1 = query.addDataSource(tableNum(ProjTable));
    
    qbds_2 = query.addDataSource(tableNum(ProjTable));
    qbds_2.unionType(UnionType::Union);
    
    sysTableLookup.parmQuery(query);

    sysTableLookup.addLookupField(fieldNum(ProjTable, ProjId), true);
    sysTableLookup.addLookupField(fieldNum(ProjTable, Name));

    sysTableLookup.performFormLookup();
}
Таблица ProjTable взята для примера, на её месте по всей видимости может быть использована любая.
В таком примере ошибочное поведение лукапа воспроизводится чуть более, чем полностью.
Ещё нюанс, трассировка запросов показывает, что в ошибочной ситуации запрос на SQL не отправляется. Ядро само видимо решает, что что то не так и генерирует ошибку.

Хочу спросить у уважаемого сообщества, сталкивался ли кто нибудь с подобным?
Есть ли сборки DAX 2012, на которых описанная ситуация не происходит? И есть ли у кого нибудь мысли, что же тут может происходить, и как с этим жить бороться?
__________________
Здесь могла быть Ваша реклама!