Показать сообщение отдельно
Старый 06.03.2007, 12:01   #40  
VAlek is offline
VAlek
Участник
 
12 / 10 (1) +
Регистрация: 13.06.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Если условия OR накладываются на значания только одного поля, то можно обойтись без расширенных запросов
X++:
qbd.addRange(fieldid2ext(fieldnum(LedgerTrans, Dimension), 2)).value("0234");
qbd.addRange(fieldid2ext(fieldnum(LedgerTrans, Dimension), 2)).value("34");
qbd.addRange(fieldid2ext(fieldnum(LedgerTrans, Dimension), 1)).value("4");
Спасибо. Но дело в том, что задача не в реализации конкретного случая, а в возможности реализации именно расширенного запроса использующего EDT массив. Я понимаю есть альтернативное решение (и мне его продемонстрировали), но есть желание получить запрос именно вида

X++:
value(strfmt("(%1.Dimension[2] == 0234)",qbd.name()
поясню почему, может возникнуть запрос,связывающий несколько таблиц и в котором участвует оператор "OR", и реализовать этот запрос в расширенном виде было бы удобнее. Например (взято из головы, не пеняте на логику, просто возможность реализации):

X++:
    qbds = q.addDataSource(tableNum(EmplTrans_RU));
    qbds2 = qbds.addDataSource(tableNum(LedgerTrans));
    qbds2.addLink(fieldnum(EmplTrans_RU,TransDate),fieldnum(LedgerTrans,TransDate));
    qbds2.addLink(fieldnum(EmplTrans_RU,Voucher),fieldnum(LedgerTrans,Voucher));
    qbds2.addLink(fieldnum(EmplTrans_RU,LedgerAccount),fieldnum(LedgerTrans,AccountNum));
    qbr = qbd2.addRange(fieldnum(LedgerTrans,RecId));
 
    qbr.value( strfmt(
            "(((%1.AmountMST > 0) && (%2.Dimension[1] == 11)) ||"+
            " ((%1.AmountMST < 0) && (%2.Dimension[2] == 21)) ||"+
            " ((%1.Dimension[3] == 6) && (%2.Dimension[3] == 51)) )"
            ,qbd.name(),qbd2.name() ) );