05.11.2009, 10:20 | #1 |
Участник
|
Получить значение qbr ..
Аx4.0
Имеется класс (extends RunBase) который создан для формирования отчета. В методе initParmDefault() X++: query = new Query(""); qbds = query.addDataSource(tableNum(LedgerTrans)); qbrDate = qbds.addRange(fieldNum(LedgerTrans, TransDate)); через qbrDate , qbrDate.value(). Или просто смотрю через дебагер, там пусто. Если делаю так: X++: DateValue = queryrun.query().DatasourceNo(1).range(1).value(); Вопрос как можно получить значение используя qbrDate? |
|
05.11.2009, 10:32 | #2 |
Ищущий знания...
|
все дело в том, что в методе initParmDefault() вы просто инициализируете qbr... значение вводится позже
что бы получить значение нужно в методе run() до того как вы пытаетесь получить значение ещё раз проинициализировать qbrDate из запроса, который уже заполнил пользователь... X++: qbrDate = queryrun.query().DatasourceTable(tableNum(LedgerTrans)).findRange(fieldNum(LedgerTrans, TransDate)).value();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: propeller (1). |
07.11.2009, 00:19 | #3 |
Участник
|
Тот Query, который Вы создаете в методе initParmDefault() и тот Query, который находится внутри объекта QueryRun физически разные объекты. То есть, когда выполняется new QueryRun(query), то QueryRun не использует Ваш созданный Query by reference, а копирует его в новый - точную копию Вашего. Но он уже будет в другой области памяти а переменная qbrDate ссылается на старый range, который уже фактически не используется. Поэтому, если в конце initParmDefaul() стоит queryRun = new QueryRun(query), то присваивание qbrDate нужно делать на основании queryRun.query(). Правда тогда нужно не забыть что queryRun создается как правило еще и в методе unpack(). Так что лучше использовать явное обращение через queryrun.query().DatasourceTable(tableNum(LedgerTrans)).findRange(...)
|
|
|
За это сообщение автора поблагодарили: propeller (1). |