| 
			
			 | 
		#1 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
			
			
			Изменение пользовательского QueryRun в RunBaseBatch
			 
			
			Здравствуйте. 
		
		
		
		
		
		
		
	Есть обычный класс с полем даты на диалоге и еще пользовательский запрос на этом же диалоге (кнопка Выбрать). В run() происходит пробежка по пользовательскому QueryRun. Необходимо, когда пользователь нажмет ok, то для этого queryRun добавить еще условие по полю даты с диалога. Как это сделать правильно?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			в tutorial объектах есть пример. 
		
		
		
		
		
		
			
		
		
		
		
	суть: после super в init изменить queryRun.query()  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#4 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ax 2009. Чет не нашел в тюториалах ничего похожего... В init опять же я не могу менять ничего. Потому что init() вызывается сразу же после new() и до promt(). Да и готовый пользовательский queryRun будет, наверное, как раз в getFromDialog после super(). То есть получается, самый правильный вариант - пропихивать пользовательские значения с полей в диалоге в пользовательский queryRun в методе getFromDialog()? Но опять же queryRun ведь придется заново создавать...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вообщем, getFromDialog() тоже не подойдет, потому что не факт, что класс будет вызываться вручную, а не из кода. К тому же я его делаю под пакетник, там вроде тоже getFromDialog не работает.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: AClass aClass = new AClass();
aClass.parmTransDate( transDate );
aClass.run(); | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#9 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну да, все правильно. Вот нашел вроде, наконец-то, класс на системном слое ProjControlPosting, там именно так и делается. Спасибо всем за помощь!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Player1 (2). | |