#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>)
Я не вижу очевидной проблемы, но, возможно, это могло бы устранить ее для вас.