Всем привет!
Когда стал в выборочном режиме строить перекрестные ссылки, полезли ошибки. Поиск корней ошибок привел к такому вот коду, в классе xRefUpdate метод utilElementsToBexRefedInsert. А конкретно sysDictTable = new SysDictTable(tablename2id(_utilElements.Name))
X++:
case UtilElementType::TableInstanceMethod, // table method can be xreffed individually; but skip it, if the complete table are xreffed.
UtilElementType::TableStaticMethod:
sysDictTable = new SysDictTable(tablename2id(_utilElements.Name));
if (sysDictTable)
{
select utilElementsToBexRefed
where utilElementsToBexRefed.RecordType == sysDictTable.utilElementType() &&
utilElementsToBexRefed.Id == tablename2id(_utilElements.Name);
if (!utilElementsToBexRefed)
{
utilElementsToBexRefed.clear();
utilElementsToBexRefed.RecordType = sysDictTable.utilElementType();
utilElementsToBexRefed.ParentId = _utilElements.ParentId;
utilElementsToBexRefed.Name = _utilElements.Name;
utilElementsToBexRefed.insert();
}
break;
}
Кто-то сталкивался с этим? Непонятно, или это ошибка, или какая-то неведомая задумка.
Ведь при таком типе элемента, в поле _utilElements.Name будет имя метода. И тогда теряется какой-либо смысл в выражении tablename2id(_utilElements.Name). Т.е. это поиск кода таблицы через имя ее метода.
Ну ладно когда это не сработало, тогда код просто пропускается. Но хуже когда имя метода совпадает с какой-то таблицей. Например, у меня было так - таблица CustSettlement имеет метод custVendTrans. При обработке в этом участке кода по имени custVendTrans, SysDictTable замечательным образом инициализируется по мапу CustVendTrans. В итоге дальше в utilElementsToBexRefed пишется полная ересь - имя custVendTrans, parentId - от CustSettlement, но тип записи - TableMap.
Пока склоняюсь что это ошибка. Возможно, по логике следовало бы записать: sysDictTable = new SysDictTable(_utilElements.ParentId));
Подскажите, было ли что-то на эту тему? Код давний очень, аж на 4-ке есть. Наверняка за долгое время у кого-то тоже должно было проявиться