18.12.2010, 14:45 | #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 |
|
18.12.2010, 15:06 | #2 |
Участник
|
Да, так и есть.
Только вместо умножения и сложения можно использовать сдвиг и дизнъюнкцию битов. Например, методы fieldId2Ext и fieldExt2Id класса Global. Последний раз редактировалось Raven Melancholic; 18.12.2010 в 15:21. |
|
18.12.2010, 15:09 | #3 |
Axapta
|
X++: fieldId2Ext(fieldNum(CustTable, Dimension), 2); |
|
18.12.2010, 16:04 | #4 |
Мрачный тип
|
Цитата:
Многие методы, возвращающие код поля таблицы, (на контролах, источниках данных и пр.) и для обычных, "немассивных", полей, да и даже без EDT , возвращают 4-байтовое целое число, старшее слово которого является индексом массива, младшее - ID поля в репозитарии. <ID поля> & 0x0000FFFF = ID поля в репозитарии <ID поля> & 0xFFFF0000 >> 16 = Индекс поля в массиве EDT, для "немассивных" всегда 1
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 18.12.2010 в 16:15. |
|
20.12.2010, 12:44 | #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 |
|
|