Принцип именования объектов БД (таблицы, поля, views) следующий. Если аксаптовское имя имеет длину менее 30 символов, то <имя объекта в БД> = <имя объекта в Аксапте>. Если более, то <имя объекта в БД> = strLeft(<имя объекта в Аксапте>, 25) + <id объекта>.
В случае с индексом к имени еще добавляется префикс "I_<id таблицы>", т.е. <имя индекса в БД> = strLeft("I_<id таблицы>" + <имя объекта в Аксапте>, 25) + <id объекта>.
Проще всего узнать физическое имя объекта использовать соответствующие методы класса DictTable:
name() - для имени таблицы
fieldname() - для имени поля
indexname() - для имени индекса
Все эти методы могут возвращать как аксаптовское имя, так и физическое имя объекта в БД. В последнем случае им надо в качестве параметра передать DbBackend::SQL.
Например, для индекса это можно сделать так:
X++:
new DictTable(tablenum(MyTable)).indexName(indexnum(MyTable, MyIndex), DbBackend::SQL);