Показать сообщение отдельно
Старый 31.01.2020, 16:50   #7  
Vlad_ is offline
Vlad_
Участник
 
11 / 10 (1) +
Регистрация: 24.09.2019
Адрес: Санкт-Петербург
Джойним датасорс:
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')) )))"

Последний раз редактировалось Vlad_; 31.01.2020 в 16:57.