|
|
|
|
#1 |
|
Moderator
|
В общем, вроде нашел решение.
Вот джоб, которым тестировал: Код: static void Tutorial_ChangeFieldId(Args _args)
{
UtilIdElements uie;
SQLDictionary dict;
;
ttsbegin;
select forupdate uie
where uie.name == "Field2" &&
uie.parentId == tableNum(Tutorial_ChangeFieldId);
if (!uie)
warning("Запись в UtilIdElements не найдена");
else
{
uie.id = 50005;
uie.update();
}
// appl.dbSynchronize(tableNum(Tutorial_ChangeFieldId), false);
// select forUpdate dict
// where dict.tabId == tableNum(Tutorial_ChangeFieldId) && dict.fieldId == fieldNum(Tutorial_ChangeFieldId, Field2);
// if (!uie)
// warning("Запись в SQLDictionary не найдена");
// else
// {
// dict.fieldId = 50005;
// dict.update();
// }
ttscommit;
}НО: если тупо после этого сделать синхронизацию таблицы - о чудо, все восстановилось! Id поменялся, данные в таблице остались. Абсолютно интуитивно непонятный механизм - смотрим на какую-то фигню (UNKNOWN), после синхронизации получаем конфетку ![]() То, что закомментировал, оказалось ненужным. Программная синхронизация таблицы не помогает, нужно почему-то обязательно через АОТ делать. Так что решение таково: программно изменяем IDшники полей в UtilIdElements и делаем синхронизацию таблицы. Вуаля! Спасибо всем, принявшим участие в эксперименте.
__________________
Андрей. |
|
|