19.01.2013, 10:50 | #1 |
Иван Захаров
|
AX 2009 Ошибка запроса с условием по полю Dimension[x]
Возможно здесь где-то уже пролетала такая ошибка ...
К сожалению, результат выполнения двух этих циклов разный. Первый выдает инфолог, второй - нет. Отличаются только указанием условия inventTable.Dimension[12]: X++: VendInvoiceTrans vendInvoiceTrans; InventTable inventTable; ; while select forceliterals vendinvoiceTrans group by TableId where vendinvoiceTrans.Voucher == "Ю3РПН00710274" join inventTable group by Dimension[12] where inventTable.ItemId == vendinvoiceTrans.ItemId && inventTable.Dimension[12] != '' { info("1 - OK"); } while select forceliterals vendinvoiceTrans group by TableId where vendinvoiceTrans.Voucher == "Ю3РПН00710274" join inventTable group by Dimension[12] where inventTable.ItemId == vendinvoiceTrans.ItemId && inventTable.Dimension[12] { info("2 - OK"); } В первом цикле - вполне корректный: SELECT B.DIMENSION12_ FROM VENDINVOICETRANS A,INVENTTABLE B WHERE ((A.DATAAREAID=N'y31i') AND (A.VOUCHER=N'Ю3РПН00710274')) AND ((B.DATAAREAID=N'y31i') AND ((B.ITEMID=A.ITEMID) AND (B.DIMENSION12_<>' '))) GROUP BY B.DIMENSION12_ ORDER BY B.DIMENSION12_ А во втором - WTF?! SELECT B.DIMENSION12_ FROM VENDINVOICETRANS A,INVENTTABLE B WHERE ((A.DATAAREAID=N'y31i') AND (A.VOUCHER=N'Ю3РПН00710274')) AND ((B.DATAAREAID=N'y31i') AND ((B.ITEMID=A.ITEMID) AND ((((((((((((((((((B.DIMENSION>' ') AND (B.DIMENSION2_>' ')) AND (B.DIMENSION3_>' ')) AND (B.DIMENSION4_>' ')) AND (B.DIMENSION5_>' ')) AND (B.DIMENSION6_>' ')) AND (B.DIMENSION7_>' ')) AND (B.DIMENSION8_>' ')) AND (B.DIMENSION9_>' ')) AND (B.DIMENSION10_>' ')) AND (B.DIMENSION11_>' ')) AND (B.DIMENSION12_>' ')) AND (B.DIMENSION13_>' ')) AND (B.DIMENSION14_>' ')) AND (B.DIMENSION15_>' ')) AND (B.DIMENSION16_>' ')) AND (B.DIMENSION17_>' ')) AND (B.DIMENSION18_>' ')))) GROUP BY B.DIMENSION12_ ORDER BY B.DIMENSION12_ |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
19.01.2013, 12:27 | #2 |
Участник
|
Т.е. компилятор не видит, что в условии указан отдельный элемент масива и проверяет на непустоту весь масив? Интересно! А не поможет заключение условия в обычные круглые скобки, вот так (inventTable.Dimension[12]) ?
offtop: А для чего вы делаете групировку по TableId? |
|
19.01.2013, 21:07 | #3 |
Administrator
|
Группировка нужна, чтобы выборка из первой таблицы не воспринималась бы как SELECT *, т.к. * несовместима с group by
__________________
Возможно сделать все. Вопрос времени |
|
19.01.2013, 21:14 | #4 |
Иван Захаров
|
Цитата:
Проверил: X++: while select forceliterals vendinvoiceTrans where vendinvoiceTrans.Voucher == "Ю3РПН00710274" join inventTable group by Dimension[12] where inventTable.ItemId == vendinvoiceTrans.ItemId && (inventTable.Dimension[12]) SELECT B.DIMENSION12_ FROM VENDINVOICETRANS A,INVENTTABLE B WHERE ((A.DATAAREAID=N'3r') AND (A.VOUCHER=N'Ю3РПН00710274')) AND ((B.DATAAREAID=N'edat') AND ((B.ITEMID=A.ITEMID) AND ((((((((((((((((((B.DIMENSION>' ') AND (B.DIMENSION2_>' ')) AND (B.DIMENSION3_>' ')) AND (B.DIMENSION4_>' ')) AND (B.DIMENSION5_>' ')) AND (B.DIMENSION6_>' ')) AND (B.DIMENSION7_>' ')) AND (B.DIMENSION8_>' ')) AND (B.DIMENSION9_>' ')) AND (B.DIMENSION10_>' ')) AND (B.DIMENSION11_>' ')) AND (B.DIMENSION12_>' ')) AND (B.DIMENSION13_>' ')) AND (B.DIMENSION14_>' ')) AND (B.DIMENSION15_>' ')) AND (B.DIMENSION16_>' ')) AND (B.DIMENSION17_>' ')) AND (B.DIMENSION18_>' ')))) GROUP BY B.DIMENSION12_ ORDER BY B.DIMENSION12_ Так что, скобочки не помогли |
|
20.01.2013, 20:33 | #5 |
NavAx
|
Туда же - не так давно обнаружил, что конструкции типа:
where ljt.Dimension[1] == xxx и ljt.Dimension[0] = xxx эквивалентны. Нашел при анализе кода, в котором номер аналитики передавался в запрос переменной. Как-то никогда не задумывался и не пробовал, что в запросе работает по-другому, чем в выражении присваивания типа ljt.Dimension[0] = "". Более того, компилируются даже конструкции типа where ljt.Dimension[-5], и запрос падает уже на SQL сервере (даже не на AOS) с ошибкой. Вообще, это можно списать на лень разработчиков компилятора - отдельно проверять номер аналитики при его задании константой было в облом... "И так упадет".
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
|
|