Цитата:
Сообщение от
Eldar9x
А как же уникальный индекс по RecID (даже в таблицах с SaveDataPerCompany ==no). По-моему, база не даст добавить запись.
Цитата:
Сообщение от
ZVV
Если индекс есть, то не даст, если нет, то даст...
Цитата:
Сообщение от
Logger
В 3.0 все же возможно что то типа
\System Documentation\Classes\systemSequence\suspendRecIds
Правда мы его использовали когда recId задавали сами - если же его оставить нулем, то не проверял что будет.
Вообще не стоит забывать как минимум еще и о том, что AX создает 2 ограничения на поле RecId - NOT NULL и RecId <> 0 (так что если recid не выделять, оставляя пустым или нулевым, то SQL ругнется сначала, как раз на данное ограничение)
Цитата:
Сообщение от
mazzy
в какой версии?
если в 3.0, то невозможно
если в 4.0, то тоже невозможно, но там и не нужно заморачиваться recid, поскольку для каждой таблицы свой диапазон номеров.
Насчет не выделения RecId - вопрос спорный, предлагаю вот такой финт ушами(у меня в AX 4.0 работало нормально, на AX 3.0 проверить не могу), к примеру, есть таблица -
test, у нее есть строковое поле
tst, данное поле добавлено в индекс на таблице(индекс нужен затем, чтобы AX не создала уникальный в разрезе RecId, иначе ничего работать не будет). Затем делаются 2 вещи :
1. Перекрывается initValue() в таблице следующим образом(число любое, кроме 0)
X++:
public void initValue()
{
super();
//srf -->
this.(fieldNum(Test, RecId)) = 1;
//srf <--
}
2. Запускается job :
X++:
static void Test(Args _args)
{
;
new SystemSequence().suspendRecIds(tableNum(test));
}
После этого спокойно открываем таблицу в обозревателе и начинаем создавать записи с recId равным 1, при этом systemSequences не трогается
Но если вы укажите для поля
tst - одно и тоже значение для разных записей, то AX выдаст ошибку, что вставка не возможна, это как раз связано с тем, о чем писал Виталий(
ZVV) :
Цитата:
- наличия в таблице других уникальных индексов (если их нет, то Аксапта добавит recid в какой-нибудь другой индекс и сделает его уникальным)
- наличия индексов в принципе - если их нет вообще, то создаст индекс по RecId независимо от первого пункта
Применительно к
SysDataBaseLog - в стандарте, у нее есть индекс в AOT
(TableId, LogRecId, CreatedDate, CreatedTime) - так вот если эти 4 поля уникальны у Вас в базе, либо если Вы готовы отключать уникальность каждый раз после синхронизации данной таблицы - то в принципе можно отключить заполнение recid для данной таблицы(но если честно, одно дело тестовая база, другое - рабочая
, в промышленной эксплуатации я такого не видел)
P.S. Можно и с RecId = 0 поиграться, убив к примеру, ограничения на таблице, однако в ax 4.0 через обозреватель записи не вставляются, а из кода вставка возможна.