Джойним датасорс:
X++:
childQBDS = qbds.addDataSource(tableNum(AS_ComVehicleLink), "AS_ComVehicleLink"); // здесь разные ошибки в зависимости от того, указываем или нет имя
childQBDS.addLink(fieldNum(RWPreliminaryRepair, VehicleId), fieldNum(AS_ComVehicleLink, VehicleId));
Генерим строку для фильтрации:
X++:
str makerFilterStr(Set _filterSet = filterSet)
{
SetEnumerator se;
str filterStr;
;
fldStr = fieldStr(AS_ComVehicleLink, Node);
se = _filterSet.getEnumerator();
while (se.moveNext())
{
if (!se.current())
{
continue;
}
if (filterStr)
{
filterStr += "||";
}
filterStr += (strFmt(' (%1.%2 like ("%3")) ', childQBDS.name(), fldStr, se.current())); // фильтр по ноде вешаем на подчинённый датасорс
}
fldStr = fieldStr(RWPreliminaryRepair, AutoParkId);
se = autoParkFilterSet.getEnumerator();
while (se.moveNext())
{
if (!se.current())
{
continue;
}
if (filterStr)
{
filterStr += "||";
}
filterStr += (strFmt(' (%1.%2 like ("%3")) ', qbds.name(), fldStr, se.current())); // фильтр по площадке на главный
}
this.parmQBDS(childQBDS);
//return filterStr;
return strFmt("(%1)",filterStr);
}
filterStr в этом месте равно
X++:
"( (AS_ComVehicleLink.Node like ('val')) || (RWPreliminaryRepair.AutoParkId like ('val2')) )"
Накладываем фильтр:
X++:
qbr = childQBDS.addRange(fieldId);
qbr.value(filterStr)
Текст qbds в этом месте:
X++:
"SELECT FIRSTFAST * FROM RWPreliminaryRepair JOIN FIRSTFAST * FROM AS_ComVehicleLink WHERE RWPreliminaryRepair.VehicleId = AS_ComVehicleLink.VehicleId AND ((( (AS_ComVehicleLink.Node like ('val1')) || (RWPreliminaryRepair.AutoParkId like ('val2')) )))"