Цитата:
Сообщение от
DreamCreator
Доброе утро!
Вчера на рабочей базе появились отрицательные RecId -620715238, хотя за день до этого RecId был в районе 1367137064.
Хотелось бы узнать - есть ли способы узнать на какие таблицы были сгенерированы RecId?
Также интересуют особенности работы с отрицательными RecId. Про кратность 256 прочитал.
Спасибо!
Ax 3.0 SP3
В третьей версии аксапты у нас неоднократно, самопроизвольно RecId перескакивали на несколько млн или уходили в "минус". Закономерности определить не удалось. При этом никаких "внешних" обращений к БД, минуя ядро Аксапты, не производилось.
"Возвращать" recId на "место" можно и нужно.
Так как с отрицательными recId будет масса глюков в российском функционале (ЗП кадры и так далее - неоднократно обсуждалось на форуме) Либо исправлять все эти модули, (и не только Российские кстати, но там ошибок больше всего)
Использовали такой джоб для перевода счетчика:
X++:
static void Job9(Args _args)
{
SystemSequences SystemSequences;
Connection con = new Connection();
Statement stmt;
;
con.ttsbegin();
stmt = con.createStatement();
stmt.executeUpdate('UPDATE SystemSequences SET nextVal=456400000 WHERE (id=-1) and (DATAAREAID=\''+ "dat" +'\')'); // впишите тут вашу компанию
con.ttscommit();
select SystemSequences
where (SystemSequences.id == -1) && (SystemSequences.dataAreaId == 'dat');
info(chi_str(SystemSequences.nextVal)); // возвращает текущее значение счетчика
}
Дефрагментацию делать не стоит, пока есть большие свободные диапазоны RecId
Нужно лишь найти диапазоны не используемых recId.
Собрать свободные диапазоны RecId можно джобом, который может собрать статистику используемых recId по наиболее активным и крупным таблицам. Могу привести пример если нужно будет...