20.05.2022, 12:10 | #1 |
Участник
|
двойная идентификация нового поля в таблице по fieldid (2 разных fieldid)
Привет.
Никак не могу понять что у определенного поля у таблицы может быть два fieldid. И под обоими оно находится через: X++: new DictField(_tableId, _fieldId).dictField.name()
fieldId2name(_tableId, _fieldId) Вот код: X++: int id; str name; str _fieldName(tableId _tableId, fieldId _fieldId) { DictField dictField = new DictField(_tableId, _fieldId); str ret; ; if (dictField) ret = dictField.name(); return ret; } ; id = fieldNum(smmActivities, NewField); info(strFmt("field name (%1) = %2", id, fieldId2name(tableNum(smmActivities), id))); info(strFmt("field name (%1) = %2", 115539, fieldId2name(tableNum(smmActivities), 115539))); info(strFmt("field name (%1) = %2", 115539, _fieldName(tableNum(smmActivities), 115539))); Его выполнение дает результат: Цитата:
field name (50003) = NewField
field name (115539) = NewField field name (115539) = NewField которое одинакого находится под id 50003 и 115539. Посмотрел в таблице SqlDictinary в SQL под данным именем существует только запись с id 50003. Вопрос, что за виртуальный номер 115539 ? Кто нибуль сталкивался с таким? Последний раз редактировалось oleggy; 20.05.2022 в 12:15. |
|
20.05.2022, 12:17 | #2 |
Участник
|
см.
global::fieldExt2Id global::fieldExt2Idx а также global::fieldId2Ext полный код поля - это long где младший int - это номер поля, который виден в свойствах АОТ а старший int - это индекс, если тип поля является массивом если в старшем int находится 0, то аксапта все равно работает с первым элементом в массиве. т.е. это не баг, а фича. согласен, что достаточно неприятная, если нужно работать с уникальными идентификаторами. всегда работайте с массивами отдельно. |
|
|
За это сообщение автора поблагодарили: oleggy (2). |
20.05.2022, 14:15 | #3 |
Участник
|
Это иногда можно использовать в свою пользу
как на одно поле наложить два условия со значениями типа Range по И |
|
|
За это сообщение автора поблагодарили: mazzy (5). |