Вообщем посмотрел я немного как это работает.
1. Источник ошибки. БП проверяет для каджого элемента с id (SysTreeNode::hasID) наличие записей с таким же id или name в таблице UtilIdElementsOld. Если там есть запись с таким же id, но другим именем, выдается ошибка что элемент переименован по сравнению с предыдущим релизом, если же находится элемент с тем же именем, но с другим id, то ошибка, что элемент изменил свой id.
2. Насколько я понимаю (не проверял) таблица UtilIdElementsOld заполняется по приложению, расположенному в каталоге old проложения. Так что, например, если держать этот каталог пустым, то таких ошибок не будет в принципе.
3. Так как я это каталог использую для возможность срванения с кодом предыдущего релиза, причем в слое usr производится текущая разработка, в слой cus обновляется при релизе, то чтобы избежать такой ошибки необходимо:
а. Не переименовывать объекты на слое выше текущего слоя разработки (например на cus слое) или переименовывать их в DEL_<исходное имя> (Что в принципе логично).
б. Не держать в папке old слой разработки (usr)
Тогда получится такая ситуация: пока разработка ведется в usr изменение id не проверяется, т.к. в old нет этого слоя и не с чем сравнивать. Когда же разработка перенслась в cus, то в этом слое уже не происходит удалений (поэтому новая таблица не может встать не id старой (удаленной)) и объекты не переименовываются. Если какое-либо из этих условий не выполняется - выводится ошибка БП, что вообщем совершенно логично и будет предупреждением разработчику, что при синхронизации данный объектов с БД, могут быть проблемы.
|