Показать сообщение отдельно
Старый 16.07.2019, 10:01   #1  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
? ax 2009. Вопрос. При открытии формы фильтр AND + OR
Вначале при открытии формы надо было сделать фильтр по нескольким условиям с И. Сделал так:
X++:
void init()
{;
    super();

    qbds = this.query().dataSourceTable(tablenum(SalesQuotationLine));

    findOrCreateRange_W(qbds, fieldnum(SalesQuotationLine,Status)).value('<11');
    findOrCreateRange_W(qbds, fieldnum(SalesQuotationLine,IncludeIn)).value(SysQuery::value(1));
    findOrCreateRange_W(qbds, fieldnum(SalesQuotationLine,TypeOfLineSales)).value('05, 10, 15, 20, 25, 30');
}
Теперь надо добавить ещё одно условие, но через ИЛИ (то что вверху или SalesQuotationLine.Checked == Yes)

Сделал так, но не работает:
X++:
    str getTypeOfLineSalesRange(str _tableN, container _con)
    {
        int cnt, conLength;
        str ret;
        ;
        conLength = conLen(_con);
        for (cnt = 1; cnt <= conLength; cnt++)
        {
            if(ret != "")
            {
                ret += " || ";
            }
            ret += strFmt("(%1.TypeOfLineSales == %2)", _tableN, conPeek(_con, cnt));
        }

        return ret;
    }
    ;
    typeOfLineSales = [05, 10, 15, 20, 25, 30];

    qbr = qbds.addRange(fieldNum(SalesQuotationLine, DataAreaId));
    qbr.value(strFmt('(((%1.Status < %2) && (%3) && (%1.IncludeIn == %4)) || (%1.Checked == %5))',
              qbds.name(),
              queryValue('11'),
              getTypeOfLineSalesRange(qbds.name(), typeOfLineSales),
              queryValue(1),
              queryValue(1)
              ));
Как правильно?