|  | 
|  08.02.2008, 17:41 | #1 | 
| MCTS | SYS_ExpressionQueryBuilder 
			
			Вопрос к belugin А не пополнить ли класс SYS_ExpressionQueryBuilder методом formula(), позволяющим вставлять арифметические выражения в запрос X++: SYS_ExpressionDataSourceBuilder formula(str _formula) { ; dataSource.addRange( fieldname2id(dataSource.table(), "RecId") ).value('('+_formula+'))'); return this; } X++: // Created by GRR on 07.02.2008 for SYS_ExpressionQueryBuilder #localMacro.const strFmt('%1 * RecId/RecId') #endmacro Например X++:     #macrolib.SYS_ExpressionQueryBuilder
    ;
   new DEV_QueryBrowser().run(
       SYS_ExpressionQueryBuilder::construct()
         .dataSource(tableNum(Table1))
             .formula(
                strfmt("%1 + %2*10 - %3 - %4 == %5", //f2 + 10*f4 - f5 - 3 == 0
                    fieldStr(Table1, Field2),
                    fieldStr(Table1, Field4),
                    fieldStr(Table1, Field5),
                    #const(3),
                    #const(0))
             )
   .run()
   .query());
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | |
| За это сообщение автора поблагодарили: belugin (5). | |
|  08.02.2008, 17:54 | #2 | 
| Участник | 
			
			Можно чуть покороче X++: return this.matches(fieldname2id(dataSource.table(), "RecId") ), '('+_formula+'))'); | 
|  | 
|  08.02.2008, 18:02 | #3 | 
| MCTS | 
			
			Очепятка
		 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  08.02.2008, 17:55 | #4 | 
| Участник | 
			
			Поправьте кто-нибудь аксаптапедию на эту тему.
		 | 
|  | 
|  08.02.2008, 18:10 | #5 | 
| Участник | 
			
			еще я бы вынес код из макроса в статический метод, а макрос сделал бы алиасом. еще можно сделать алиас для конструктора (кстати там есть еще фабричный метод для создания сразу датасурса) | 
|  | 
|  08.02.2008, 18:25 | #6 | 
| MCTS | 
			
			Можно было и статическим методом сделать. Просто подумалось, что макросом компактнее код получится. (длинное название у класса) да и для общественности он полезен про алиас можно поподробнее? 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  08.02.2008, 18:47 | #7 | 
| Участник | 
			
			макрос, единственный смысл которого делегировать вызовы статическому методу X++: #localmacro.const SYS_ExpressionQueryBuilder::const(%1) #endmacro #localmacro.newQuery SYS_ExpressionQueryBuilder::datasource(%1) #endmacro X++: #macrolib.SYS_ExpressionQueryBuilder // типа подключаем неймспейс ; new DEV_QueryBrowser().run( #newQuery(tableNum(Table1)) // юзаем штуки из неймспейса по короткому имени (без полной кваличикации типа) .formula( strfmt("%1 + %2*10 - %3 - %4 == %5", //f2 + 10*f4 - f5 - 3 == 0 fieldStr(Table1, Field2), fieldStr(Table1, Field4), fieldStr(Table1, Field5), #const(3), #const(0)) ) .run() .query()); | 
|  | 
|  08.02.2008, 18:48 | #8 | 
| Участник | 
			
			И при этом, если мы заъхотим что-то поменять в реализации const не надо будет перекомпилировать все, где оно исользуется
		 | 
|  | 
|  12.02.2008, 18:06 | #9 | 
| MCTS | 
			
			c #newQuery лихо как-то Компилятору   
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  |