|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от yahenz
![]() Всем привет!
Пытаюсь написать что-то подобное в АХ 3.0: X++: QueryRun qr; Query query = new Query(); QueryBuildDataSource dsTable2 = query.addDataSource(tableNum(Table2)); QueryBuildRange qbr; Table2 t2; ; qbr = dsTable2.addRange(fieldNum(Table2, DataAreaId)); qbr.value(strfmt('((%1 + %2) > 0)', fieldStr(Table2, Field1), fieldStr(Table2, Field2))); qr = new QueryRun(query); while(qr.next()) { t2 = qr.get(tablenum(Table2)); info(int2str(t2.Field1) + "+" + int2str(t2.Field2)); } Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '='. Оператор SQL: SELECT A.FIELD1,A.FIELD2,A.RECVERSION,A.RECID FROM TABLE2 A WHERE ((DATAAREAID=?) AND ((FIELD1+FIELD2)>1=?)) ORDER BY A.DATAAREAID,A.RECID OPTION(FAST 45) В АХ 5.0 все работает. Неужели в 3.0 ничего не получится? В качестве workaround для Axapta 3.0 могу предложить на рассмотрение следующий подход - необходимо постараться избавиться от числовой константной составляющей в правой части неравенства заменив ее выражением (с использованием некоторого числового поля). К примеру для этого можно воспользоваться нехитрым тождеством N = N * RecId / RecId. В частном случе '0' можно представить как 0*RecId или привести Ваше выражение вида (a+b)>0 к тождественному виду a > -1*b X++: qbr.value(strfmt('((%1 + %2) > 0*%3)', fieldStr(Table2, Field1), fieldStr(Table2, Field2), fieldStr(Table2, RecId))); P.S. Тестировалось на версии ядра 1951.7609 (Axapta 3.0 SP3 KR3)
__________________
Dynamics AX 4.0 SP2 |
|
|
За это сообщение автора поблагодарили: yahenz (1). |