|
02.03.2012, 13:00 | #1 |
Участник
|
SysQuery
DAX 2009 Rollup7
Добрый день! Сталкнулся с такой проблеммой. Если обработать накладную по закупке указав в номере накладной например так (< N123). То после обработки не не получится напечатать накладную. Посмотрел в чем дело, оказывается символ больше или меньше не икранируется когда попадает в SysQuery.Value при создании отчета. И соответственно запрос возвращает неправильные данные. Подскажите может кто то сталкивался с данной проблеммой, и как решали? Можно конечно поправить метод value но я не смотрел на что это ещё может повлиять. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5), samolalex (1). |
02.03.2012, 13:58 | #2 |
Участник
|
Действительно не экранируются! Посмотрел в коде метода SysQuery::Value() экранируются только: пробел, звёздочка, запятая, точка, круглые скобки и обратный слеш.
X++: str quotableStr = ' *",.()\\'; Очень странно. Почему? Исправить можно добавив недостающие спец символы в строку quotableStr. Но перед этим нужно подумать ни повлияет ли это на работу остальных мест системы. Очень странно что это раньше не всплыло. А как с этим дела обстоят в предыдущих версиях? |
|
02.03.2012, 14:15 | #3 |
Участник
|
Интересно. В тройке экранируются лишь следующие символы:
X++: boolean quotable (str 1 s1) { if (s1 == ' ' || s1 == '*' || s1 == '"' || s1 == ',' || s1 == '.') return TRUE; return FALSE; }
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 02.03.2012 в 14:17. |
|
02.03.2012, 14:20 | #4 |
Участник
|
Я думаю что так задумано, так как бывает что в Query надо передать <100 если делат выборку по количеству меньше 100. Если это закрыть то условие неправильно отработает. Может я ошибаюсь?
|
|
02.03.2012, 14:26 | #5 |
Участник
|
Но ведь точно так же в range.value можно передать и "*100", а символ "*" в свою очередь экранируется.
Как я понял, строка quotableStr должна содержать все символы, задействованные как служебные при формировании фильтра запроса, которые должны восприниматься как обычный символ. Но так как эта строка не содержит все символы, а лишь их часть, значит в этом должен быть смысл, хотя... кому должен?)
__________________
С уважением, Александр. |
|
02.03.2012, 14:42 | #6 |
Участник
|
Да я согласен, что передают и * и , и т.д. Возможно что дело именно в использовании SysQuery::value();
Вот если делать так то получатся совсем разные вещи. X++: queryBuildDataSource.addRange(fieldNum(InventTrans,ItemId)).value(SysQuery::value("123,124"); queryBuildDataSource.addRange(fieldNum(InventTrans,ItemId)).value("123,124"); Хотя нет, если сделать так то итог одинаковый будет X++: queryBuildDataSource.addRange(fieldNum(InventTrans,ItemId)).value(SysQuery::value("< 123")); queryBuildDataSource.addRange(fieldNum(InventTrans,ItemId)).value("< 123"); Последний раз редактировалось maldini; 02.03.2012 в 14:53. |
|