20.10.2011, 09:34 | #1 |
MCTS
|
Изменение пользовательского QueryRun в RunBaseBatch
Здравствуйте.
Есть обычный класс с полем даты на диалоге и еще пользовательский запрос на этом же диалоге (кнопка Выбрать). В run() происходит пробежка по пользовательскому QueryRun. Необходимо, когда пользователь нажмет ok, то для этого queryRun добавить еще условие по полю даты с диалога. Как это сделать правильно? |
|
20.10.2011, 09:44 | #2 |
Участник
|
в tutorial объектах есть пример.
суть: после super в init изменить queryRun.query() |
|
20.10.2011, 09:44 | #3 |
HAI; CAN HAS STDIO?
|
немного неясен вопрос. но если ситуация такая, как я думаю, то в getFromDialog() забираем дату, и добавляем в виде условия в query перед тем, как её запускать:
X++: QueryBuildDataSource qbd; QueryBuildRange qbr; ; qbd = this.query().getDataSource(tablenum(< >)); qbr = SysQuery::findOrCreateRange(qbd, fieldnum(< >, < >)); qbr.value(queryValue(< >)); P.S. да, в классе tutorial_RunbaseReport
__________________
our sharp bitter vitriol is not that of the vulgar. Последний раз редактировалось offenmeier; 20.10.2011 в 09:47. |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
20.10.2011, 09:56 | #4 |
MCTS
|
Ax 2009. Чет не нашел в тюториалах ничего похожего... В init опять же я не могу менять ничего. Потому что init() вызывается сразу же после new() и до promt(). Да и готовый пользовательский queryRun будет, наверное, как раз в getFromDialog после super(). То есть получается, самый правильный вариант - пропихивать пользовательские значения с полей в диалоге в пользовательский queryRun в методе getFromDialog()? Но опять же queryRun ведь придется заново создавать...
|
|
20.10.2011, 10:11 | #5 |
MCTS
|
Вообщем, getFromDialog() тоже не подойдет, потому что не факт, что класс будет вызываться вручную, а не из кода. К тому же я его делаю под пакетник, там вроде тоже getFromDialog не работает.
|
|
20.10.2011, 10:16 | #6 |
HAI; CAN HAS STDIO?
|
не нужно queryRun заново создавать. главное чтобы у вас переменная с датой была готова на момент запуска query. queryRun содержит объект запроса.
кодом, который я привёл (только вместо this.query нужно queryRun.query) вставляете свою дату и должно сработать, пакетная обработка или не пакетная. интерактивно - забираете дату из getFromDialog, пакетно - используете pack/unpack. а вообще в любом случае pack/unpack, чтобы ранее введённая дата сохранялась для текущего пользователя. best practice
__________________
our sharp bitter vitriol is not that of the vulgar. |
|
20.10.2011, 10:30 | #7 |
MCTS
|
Цитата:
X++: AClass aClass = new AClass();
aClass.parmTransDate( transDate );
aClass.run(); |
|
20.10.2011, 10:33 | #8 |
Молодой, подающий надежды
|
Цитата:
Тогда почему бы не создать метод, типа: X++: protected void updateQuery() { QueryBuildDataSource qbds; QueryBuildRange qbr; ; if (! queryRun) { this.initQuery(); } qbds = queryRun.query().dataSourceTable(tablenum(<>)); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(<>, <>)); qbr.value(queryValue(<>)); } |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
20.10.2011, 10:38 | #9 |
MCTS
|
Ну да, все правильно. Вот нашел вроде, наконец-то, класс на системном слое ProjControlPosting, там именно так и делается. Спасибо всем за помощь!
|
|
|
За это сообщение автора поблагодарили: Player1 (2). |