запрос, в котором хотя бы одно из двух полей попадает в диапазон дат (

#axapta #x

#axapta #x

Вопрос:

У меня есть запрос, который выполняется в представлении, содержащем два измененных по датам. Мне нужно вернуть все записи, в которых любая из этих дат попадает в указанный диапазон.

Из всего, что я исследовал, кажется, мне нужно что-то вроде этого:

     qbdsCustTableAddressView
        .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
        .value(
            strFmt("(%1>='%2' AND %1<='%3') || (%4>='%2' AND %4<='%3')",
                fieldstr(TCMCustTableAddressView, CustTableModified),
                DateTimeUtil::toStr(contract.parmFromDateTime()),
                DateTimeUtil::toStr(contract.parmToDateTime()),
                fieldstr(TCMCustTableAddressView, EBillModified),
                0
            )
        );
  

когда я сравниваю результирующий запрос с тем, что создается:

 qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(strFmt("%1..%2", contract.parmFromDateTime(), contract.parmtoDateTime()));
  

Тогда приведенное выше выглядит правильным, поскольку я получаю неспецифическую «Синтаксическую ошибку около 22»

Ответ №1:

У вас есть несколько проблем со скобками, одинарными кавычками и использованием AND вместо amp;amp; .

Это должно сработать:

 qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(
        strFmt("(((%1 >= %2) amp;amp; (%1 <= %3)) || ((%4 >= %2) amp;amp; (%4 <= %3)))",
            fieldstr(TCMCustTableAddressView, CustTableModified),
            DateTimeUtil::toStr(contract.parmFromDateTime()),
            DateTimeUtil::toStr(contract.parmToDateTime()),
            fieldstr(TCMCustTableAddressView, EBillModified),
            0
        )
    );
  

Комментарии:

1. Выражение запроса всегда должно быть окружено набором ()

2. @Jan, я тоже так предполагал, но я тестировал свой код перед публикацией с помощью outer () и без него, и это сработало в обоих случаях, я выбрал меньший фрагмент кода.

Ответ №2:

Попробуйте это:

 qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(SysQuery::range(contract.parmFromDateTime(), contract.parmtoDateTime()));
  

Разница в том, что SysQuery::range(<from>, <to>)

Я не вижу очевидной проблемы, но, возможно, это могло бы устранить ее для вас.