|  14.12.2006, 11:19 | #1 | 
| Участник | Два RecId у одной записи таблицы 
			
			Здравствуй Коллективный Разум. И снова требуется твоя помощь. Столкнулся с совершенно аномальной для меня ситуацией при работе со строками закупок (purchLine). Ничего не остается как спросить объяснения у всезнающих гуру. Вообщем , ситуация следующая: есть строка в закупке, пытаюсь найти на нее ссылку в табличном методе delete таблицы MarkupTrans по ее recId хранящейся в поле transRecId. Никак не получается этот фокус у меня. В ходе танцев с бубном выяснилось следующее: имеем запрос вида: select firstonly purchLine where purchLine.RecId == -1116895965; где цифры это собственно сам recId строки закупки и есть либо можно использовать стандартный метод на таблицы purchLine под названием findRecId, куда передать эту же циффру. пытаемся использовать этот запрос в 2-х случаях: 1) в табличном методе markupTrans'a результат - ничего не найдено 2) в отдельном Job'e результат ЕСТЬ!!! однако несколько странный, а именно: смотрим в отладчике и имеем после выполнения select'a запись в purchLine находится, НО в окне просмотра переменных recId отображается СОВСЕМ другой в угловых скобках, точнее так: purchLine: <3178071331> далее если раскрыть переменную то увидим список всех полей, идем на recID b видим цифру, переданную в качестве параметра в запрос, т.е. -1116895965. Как такое возможно? плюс ко всему если в обозревателе таблицы поискать запись по recId, то по обоим этим цифрам (3178071331 и -1116895965) мы попадаем на одну запись. Кто может объяснить сие явление буду очень благодарен! Интерес вызывает как сама ситуация с 2-мя recId, так и вопрос почему запрос отрабатывает по-разному в разных ситуациях (см. выше) Получилось длинно, зато надеюся информативно   | 
|  | 
|  14.12.2006, 11:31 | #2 | 
| Banned | 
			
			Отрицательные RecId: http://axforum.info/forums/showthread.php?t=6211
		 | 
|  | 
|  14.12.2006, 11:51 | #3 | 
| Участник | Цитата: 
		
			Сообщение от EVGL
			   Отрицательные RecId: http://axforum.info/forums/showthread.php?t=6211  хотелось бы особенно понять почему один и тот же вопрос отрабатывает в различных ситуациях по разному ??? в моем примере это job и табличный метод! почему в джобе находится запись а в методе таблицы НЕТ ??? | 
|  | 
|  14.12.2006, 12:03 | #4 | 
| Axapta | 
			
			3178071331+1116895965=2^32    | 
|  | 
|  14.12.2006, 12:11 | #5 | 
| Banned | 
			
			Зачем задавать философские вопросы? Читайте и решайте проблему.
		 | 
|  | 
|  14.12.2006, 12:45 | #6 | 
| Участник | |
|  | 
|  14.12.2006, 13:00 | #7 | 
| Участник | 
			
			2 oip Я бы сказал так 1116895965 == ~((unsigned int)3178071331) + 1; 3178071331 + ~((unsigned int)3178071331) = 2^32-1; а в общем (int)-1116895965 == (unsigned int)3178071331 2 sparur У меня такой код отрабатывает нормально X++:     PurchLine   purchLine;
    ;
    purchLine = purchLine::findRecId(-1116895965);
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  14.12.2006, 13:03 | #8 | 
| Участник | Цитата: 
		
			Сообщение от AndyD
			   2 oip Я бы сказал так 1116895965 == ~((unsigned int)3178071331) + 1; 3178071331 + ~((unsigned int)3178071331) = 2^32-1; а в общем (int)-1116895965 == (unsigned int)3178071331 2 sparur У меня такой код отрабатывает нормально X++:     PurchLine   purchLine;
    ;
    purchLine = purchLine::findRecId(-1116895965);пытаюсь как то преобразовать отрицательный рекИд ничего пока не выходит   | 
|  | 
|  14.12.2006, 13:05 | #9 | 
| Участник | 
			
			А не могли бы вы привести код в этом методе?
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  14.12.2006, 13:18 | #10 | 
| Участник | 
			
			пожалуйста  мне не жалко  : X++: public void delete() { TGP_SyncUz2Buh sync; MarkupTrans markupTrans; Common refTable; PurchLine purchLine; super(); //ищем запись таблицы, для которой создается строка накл. расходов switch (this.TransTableId) { ...... case tablenum(PurchLine): refTable = PurchLine::findRecId(this.TransRecId); break; .... } .... } | 
|  | 
|  14.12.2006, 13:19 | #11 | 
| Участник | 
			
			вот блин опять код не вставился нормально   теги же вроде юзал... ладно это не важно... | 
|  | 
|  14.12.2006, 13:43 | #12 | 
| Участник | 
			
			сделал преобразование минусового recid (2^32-abs(recId)) получили положительный recId. который если подставить в фильтр в обозревателе таблицы позиционируется на записи с минусовым recid! Однако в запросах не отрабатывает такое преобразование нигде!!! ни в Job'e, ни в табл. методе. Минусовый хоть в Job'e работает... Вообщем дилемма, как разрешать - загадка. | 
|  | 
|  14.12.2006, 13:51 | #13 | 
| Banned | 
			
			Нет никакой дилеммы. Запускайте дефрагментрование RecId.
		 | 
|  | 
|  14.12.2006, 13:57 | #14 | 
| Участник | |
|  | 
|  14.12.2006, 14:01 | #15 | 
| Banned | 
			
			Вот уже жертвы рекламы пошли. Используйте штатную процедуру проверки RecId. Сидит совершенно бесплатно в форме SQL Administration и исправно работает.
		 | 
|  | 
|  14.12.2006, 14:26 | #16 | 
| Участник | Цитата: Запуск данной процедуры не убьет ли мне ВСЕ ссылки в принципе? | 
|  | 
|  14.12.2006, 14:36 | #17 | 
| Участник | 
			
			об этом же кстати писал и Mazzy создавая тему, ссылку на которую Вы приводили в своем первом посте в данной теме!  Поможет ли стандартная дефрагментация? вот в чем вопрос... и не поубиваются ли у нас ссылки если EDT-recId (как минимум markuptrans, сопоставления...) | 
|  | 
|  14.12.2006, 14:51 | #18 | 
| Участник | Цитата: 
		
			Сообщение от sparur
			   сделал преобразование минусового recid (2^32-abs(recId)) получили положительный recId. который если подставить в фильтр в обозревателе таблицы позиционируется на записи с минусовым recid! Однако в запросах не отрабатывает такое преобразование нигде!!! ни в Job'e, ни в табл. методе. Минусовый хоть в Job'e работает... Вообщем дилемма, как разрешать - загадка. Еще, 2^32 это уже 64-битное число (3.0 с ними не работает) - выше преобразование некорректно. По существу - попробовал добавить этот метод - запись нормально находится 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  14.12.2006, 15:06 | #19 | 
| Участник | Цитата: Где тип полей со ссылками на recId унаследованы от типа refRecId...   | 
|  | 
|  14.12.2006, 15:08 | #20 | 
| Участник | 
			
			ВСЕ - не убьет. Убьет только те ссылки, которые находятся в полях с типом, не унаследованнsм от recRefId. | 
|  | 
| Теги | 
| recid | 
|  | 
| 
 |