|
![]() |
#1 |
Участник
|
Хорошая ветка.Борьбу с recId вели долгую и упорную.В итоге дефрагментировали все-таки дефрагментировали компанию(база ~500Гб)...
1. Хорошая ветка почитать Assegnare Recid a una Tabella manualmente 2. Решали подобную задачу - правда, "Писатель" данных был 1.В коде явно прописывали генерацию max+1, max вычислялся 1 раз при инициализации класса-генератора.Класс прописывался в appl (хотя это не хорошо), и кажды раз X++: if( appl.parmRecId_engine( this.TableId ) )
this.RecId = appl.parmRecId_engine().getRecId( this.TableId ); |
|
![]() |
#2 |
Участник
|
Цитата:
Цитата:
Цитата:
1. Перекрывается initValue() в таблице следующим образом(число любое, кроме 0) X++: public void initValue() { super(); //srf --> this.(fieldNum(Test, RecId)) = 1; //srf <-- } X++: static void Test(Args _args) { ; new SystemSequence().suspendRecIds(tableNum(test)); } ![]() Но если вы укажите для поля tst - одно и тоже значение для разных записей, то AX выдаст ошибку, что вставка не возможна, это как раз связано с тем, о чем писал Виталий(ZVV) : Цитата:
- наличия в таблице других уникальных индексов (если их нет, то Аксапта добавит recid в какой-нибудь другой индекс и сделает его уникальным)
- наличия индексов в принципе - если их нет вообще, то создаст индекс по RecId независимо от первого пункта ![]() P.S. Можно и с RecId = 0 поиграться, убив к примеру, ограничения на таблице, однако в ax 4.0 через обозреватель записи не вставляются, а из кода вставка возможна. Последний раз редактировалось SRF; 22.06.2009 в 13:14. Причина: Дополнение |
|
|
За это сообщение автора поблагодарили: Eldar9x (2). |
![]() |
#3 |
Участник
|
Не надо так играться.
По всем соглашениям, принятым в Аксапте, recId == 0 означает, что запись либо не найдена, либо только что-создана (отсутствует на SQL-сервере). |
|