| 
			
			 | 
		#1 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
			
			
			Не выделять RecId
			 
			
			Подозреваю, что не возможно, но вдруг... Как для определенной таблицы заставить не выделять новые RecId? Например, для логов мне абсолютно не нужно тратить номера.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			в какой версии? 
		
		
		
		
		
		
			
		
		
		
		
	если в 3.0, то невозможно если в 4.0, то тоже невозможно, но там и не нужно заморачиваться recid, поскольку для каждой таблицы свой диапазон номеров. еще тема для размышления: для временных таблиц recid не выделяется (вроде бы).  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			на сколько я знаю, выделением RecId занимается ядро... едвали можно это как то обойти.  
		
		
		
		
		
		
			да и как то это дико\непривычно выглядит  
		
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В 3.0 все же возможно что то типа 
		
		
		
		
		
		
		
	\System Documentation\Classes\systemSequence\suspendRecIds Правда мы его использовали когда recId задавали сами - если же его оставить нулем, то не проверял что будет.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (5), gl00mie (10), SRF (2). | |
| 
			
			 | 
		#5 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А как же уникальный индекс по RecID (даже в таблицах с SaveDataPerCompany ==no). По-моему, база не даст добавить запись. Его можно как-нибудь удалить, при этом, чтобы синхронизация не вернула его обратно? 
		
		
		
		
		
		
		
		
			А еще выделение RecId в рамках таблиц, где это можно прочитать? (3,0) Последний раз редактировалось Eldar9x; 19.06.2009 в 14:33.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
![]() Наличие индекса по RecId не является обязательным, а зависит от - соответсвующего свойства на таблице (CreateRecIdIndex) - наличия в таблице других уникальных индексов (если их нет, то Аксапта добавит recid в какой-нибудь другой индекс и сделает его уникальным) - наличия индексов в принципе - если их нет вообще, то создаст индекс по RecId независимо от первого пункта Для тройки это не возможно, обсуждалось: Включение потабличного RecID в 3-ке Для четвёрки и выше - это по умолчанию, ничего настраивать не надо. 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хорошая ветка.Борьбу с 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 ); | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Цитата: 
	
Цитата: 
	
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). | |
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не надо так играться. 
		
		
		
		
		
		
			
		
		
		
		
	По всем соглашениям, принятым в Аксапте, recId == 0 означает, что запись либо не найдена, либо только что-создана (отсутствует на SQL-сервере).  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			вот такой финт ушами
		
	 
Вобщем меня интересует, как долго будет длится действие suspendRecIds. Зы, а зачем через id поля? [XPP]this.(fieldNum(Test, RecId)) = 1;/XPP] почему не так? X++: this.RecId = 1; Последний раз редактировалось Eldar9x; 25.06.2009 в 08:55.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			RecId, равно как и createdBy/createdDate/modifiedBy/etc, - это системное поле, поэтому присваивать ему значение напрямую запрещено, а использование идентификатора позволяет этот запрет обойти.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Eldar9x
			 
 
			Спасибо за идею. Подскажите еще, suspendRecIds работает как? В рамках сессии, в рамках запущенного кода, или можно один раз запустить и recId для таблиц генериться не будет? В какой момент таблица снова станет генерировать RecId? После синхронизации таблиц, перезапуска АОС...? Или нужно вызвать removeRecIdSuspensin?  
		
	Вобщем меня интересует, как долго будет длится действие suspendRecIds. Зы, а зачем через id поля? [XPP]this.(fieldNum(Test, RecId)) = 1;/XPP] почему не так? X++: this.RecId = 1; Цитата: 
	
![]() По поводу suspendRecIds - могу только сказать, что прерывает генерацию как минимум в рамках сессии(разумеется без вызова removeRecIdSuspenson), синхронизация никак не влияет.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Применительно к SysDataBaseLog - в стандарте, у нее есть индекс в AOT (TableId, LogRecId, CreatedDate, CreatedTime) - так вот если эти 4 поля уникальны у Вас в базе, либо если Вы готовы отключать уникальность каждый раз после синхронизации данной таблицы - то в принципе можно отключить заполнение recid для данной таблицы(но если честно, одно дело тестовая база, другое - рабочая , в промышленной эксплуатации я такого не видел)
		
	 
 | 
| 
	
 |