| 
	 | 
| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Info: ID полей таблицы типа EDT массив (array elements)
			 
			
			Возможно будет полезно (для DAX 3.0 kr3): 
		
		
		
		
		
		
			Значение ID для элементов массива поля типа EDT массив находятся в диапазоне выше 65535 (word). Механика ID следующая: 1. ID поля таблицы типа EDT массив имеет значение ID в соответствующем слою диапазоне (в пределах значений типа unsigned word). 2. Элементы массива такого поля (например dimension[1]) тоже имеют свой ID который формируется следующим образом: <№ измерения>*65536+<ID поля> и, который можно узнать с помощью функции FieldName2ID. Другими словами ID полей таблицы имеют как минимум 3х байтовую структуру (а скорее всего dword), где старший байт является номером элемента массива, а младший – ID поля (без индекса) Пример: id измерения dimension[2] в custTable = 2*65536+ fieldNum(custTable,dimension) = FieldName2ID( tableNum(custTable),"dimension[2]") 
				__________________ 
		
		
		
		
	--- SHiSHok  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, так и есть.  
		
		
		
		
		
		
		
		
			![]() Только вместо умножения и сложения можно использовать сдвиг и дизнъюнкцию битов. Например, методы fieldId2Ext и fieldExt2Id класса Global. Последний раз редактировалось Raven Melancholic; 18.12.2010 в 15:21.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 X++: fieldId2Ext(fieldNum(CustTable, Dimension), 2); | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Мрачный тип 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Многие методы, возвращающие код поля таблицы, (на контролах, источниках данных и пр.) и для обычных, "немассивных", полей, да и даже без EDT , возвращают 4-байтовое целое число, старшее слово которого является индексом массива, младшее - ID поля в репозитарии. <ID поля> & 0x0000FFFF = ID поля в репозитарии <ID поля> & 0xFFFF0000 >> 16 = Индекс поля в массиве EDT, для "немассивных" всегда 1 
				__________________ 
		
		
		
		
		
			Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 18.12.2010 в 16:15.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			спасибо за информацию о существующих методах. Нашел 3 метода в классе Global: 
		
		
		
		
		
		
			X++: static fieldId fieldId2Ext (fieldId fieldId, ArrayIdx arrayIndex) // Returns an extended FieldId, based on the fieldId and the Array index static int fieldExt2Idx (fieldId fieldExtId) // Returns the Array index part of an extended FieldId static fieldId fieldExt2Id (fieldId fieldExtId) // Returns the fieldId part of an extended FieldId 
				__________________ 
		
		
		
		
		
			--- SHiSHok Последний раз редактировалось SHiSHok; 20.12.2010 в 12:58.  | 
| 
	
 | 
| Теги | 
| array, fieldid, table | 
| 
	
	 | 
	
		
  |