| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Dict and Dimension
			 
			
			Как сделать так , чтобы можно было поставить условие на значение одной из аналитик 
		
		
		
		
		
		
		
		
			X++: static void Arahnid(Args _args) { Dictionary dict = new Dictionary(); DictTable dictTable; DictField dictField; int i, k; str 300 names; extendedTypeId _type; common common; Dimension dim; ; dim[2] = '0200'; for (i=1; i<=dict.tableCnt(); i++) { dictTable = new DictTable(dict.tableCnt2Id(i)); names = dictTable.name(); for (k=1; k<=dictTable.fieldCnt(); k++) { dictField = new DictField(dictTable.id(),dictTable.fieldCnt2Id(k)); _type = dictField.typeid(); if (_type == 132) { common = dictTable.makeRecord(); info (names+' Это таблица!'); // info(extendedTypeId2name(_type)); ttsbegin; while select forupdate common //вот так не работает where (common.(dictField.id()) == dim) { info(common.(dictField.id()) ); } ttscommit; } } } } X++:               common      = dictTable.makeRecord();
             //   info (names+' Это таблица!');
             //   info(extendedTypeId2name(_type));
                ttsbegin;
                while select forupdate  common
               // where (_dim[2] == dim[2])
                {
                    _dim = common.(dictField.id());
                    if (_dim[2] == dim [2])
                    info(_dim[2]  );
                }
                ttscommit;
            }Последний раз редактировалось Arahnid; 11.10.2007 в 14:51.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			where ( common.(dictField.id()+idx) == dim) 
		
		
		
		
		
		
			где idx - индекс аналитики 
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кстати, что вы там ваяете 
		
		
		
		
		
		
			Не проще ли X++:     SalesTable  salesTable;
    ;
    while select salesTable
        where salesTable.Dimension[2] == '00001'
    {
        info(strFmt("%1", salesTable.Dimension[2]));
    }
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			не вышло 
		
		
		
		
		
		
		
	X++: ttsbegin; while select forupdate common where (common.(dictField.id()+2) == dim[2]) { /* _dim = common.(dictField.id()); if (_dim[2] == dim [2])*/ info(_dim[2] ); } ttscommit;  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Фигня какаято то...Используйте FieldId2Ext для работы с полями типа массив 
		
		
		
		
		
		
		
		
			/* Returns an extended FieldId, based on the fieldId and the Array index (an extended FieldId is a fieldId including the array index) */ static fieldId fieldId2Ext(fieldId fieldId, ArrayIdx arrayIndex ) Последний раз редактировалось Sada; 11.10.2007 в 15:10.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Используйте функцию fieldId2Ext: 
		
		
		
		
		
		
		
		
			X++: while select forupdate common where (common.(fieldId2Ext(dictField.id()), 2) == dim[2]) { info(_dim[2] ); } ttscommit; X++: if (_type == 132)X++: if (_type == extendedTypeNum(Dimension)) Последний раз редактировалось Peter Savintsev; 11.10.2007 в 15:18.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 спасибо  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Дело даже и не в том, что индекс явно числом указан. А если его индекс изменится когда нить потом, то что делать? + соглашусь с Петром.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: int idx = SysDimension::Center + 1; while select forupdate common where (common.(fieldId2Ext(dictField.id(), idx)) == dim[idx]) { info(_dim[idx] ); }  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Можно посмотреть вот это 
		
		
		
		
		
		
		
	http://blogs.msdn.com/palle_agermark...imensions.aspx  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: #localmacro.dimNo (SysDimension::%1 + 1) #endmacro while select forupdate common where (common.(fieldId2Ext(dictField.id(), #dimNo(Center))) == dim[#dimNo(Center)])  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В Ax40 на таблице Dimensions реализован статический метод code2arrayIdx(). 
		
		
		
		
		
		
		
	В Ax30 такого стандартного метода нет. Вместо макроса лучше наверное все-таки использовать то, что уже есть. Ну, а если таки токого метода нет, то его можно написать. PHP код: 
	
			
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: lev (2). | |
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: Dimensions::code2ArrayIdx(SysDimension::Division) X++: #dimNo(Division)  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нет, ну я совсем не против. 
		
		
		
		
		
		
		
	Это кому как удобнее  
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			#dimNo(Division)
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			не знаю, наверное, да - вроде перекрестные ссылки юзают ScannerClass - а он автоматически разворачивает макросы
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Потом попробую - напишу. 
		
		
		
		
		
		
		
	Но мне все равно конструкция Код: #dimNo(Division) В конструкции Код: Dimensions::code2ArrayIdx(SysDimension::Division) Но у каждого, конечно, свои предпочтения  
		 | 
| 
	
 |