AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2006, 11:19   #1  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Два 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:51   #3  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от EVGL Посмотреть сообщение
Отрицательные RecId: http://axforum.info/forums/showthread.php?t=6211
там так много всего хотелось бы особенно понять почему один и тот же вопрос отрабатывает в различных ситуациях по разному ???

в моем примере это job и табличный метод! почему в джобе находится запись а в методе таблицы НЕТ ???
Старый 14.12.2006, 12:03   #4  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,501 / 1318 (49) ++++++++
Регистрация: 28.11.2005
Адрес: Московская область
3178071331+1116895965=2^32
__________________
С уважением,
Олег.
Старый 14.12.2006, 12:11   #5  
EVGL is offline
EVGL
Moderator
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,617 / 2145 (79) +++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Зачем задавать философские вопросы? Читайте и решайте проблему.
Старый 14.12.2006, 12:45   #6  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от oip Посмотреть сообщение
3178071331+1116895965=2^32
это уже понял, непонятна двоякая ситуация с различной отработкой одного и того же запроса
Старый 14.12.2006, 13:00   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,555 / 2376 (85) +++++++++
Регистрация: 20.08.2005
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);
Запись находится. Или у вас только в Delete() не отрабатывает?
__________________
Axapta v.3.0 sp5 kr2
Старый 14.12.2006, 13:03   #8  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от 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);
Запись находится. Или у вас только в Delete() не отрабатывает?
в этом то весь и геморой!!! если этот код написать например в отдельном JOb'e , то все находится. А вот в табличном методе delete() на markupTrans'e не хочет искать!!!
пытаюсь как то преобразовать отрицательный рекИд ничего пока не выходит
Старый 14.12.2006, 13:05   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,555 / 2376 (85) +++++++++
Регистрация: 20.08.2005
А не могли бы вы привести код в этом методе?
__________________
Axapta v.3.0 sp5 kr2
Старый 14.12.2006, 13:18   #10  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
А не могли бы вы привести код в этом методе?
пожалуйста мне не жалко :

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;
            ....
        }
        ....
}
this.TransRecId - это и есть этот минусовый recid
Старый 14.12.2006, 13:19   #11  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
вот блин опять код не вставился нормально теги же вроде юзал... ладно это не важно...
Старый 14.12.2006, 13:43   #12  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
сделал преобразование минусового recid (2^32-abs(recId)) получили положительный recId. который если подставить в фильтр в обозревателе таблицы позиционируется на записи с минусовым recid!

Однако в запросах не отрабатывает такое преобразование нигде!!! ни в Job'e, ни в табл. методе. Минусовый хоть в Job'e работает...

Вообщем дилемма, как разрешать - загадка.
Старый 14.12.2006, 13:51   #13  
EVGL is offline
EVGL
Moderator
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,617 / 2145 (79) +++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Нет никакой дилеммы. Запускайте дефрагментрование RecId.
Старый 14.12.2006, 13:57   #14  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от EVGL Посмотреть сообщение
Нет никакой дилеммы. Запускайте дефрагментрование RecId.
для этого дефрагментирования я так понял нужен какой-то мега-скрипт, который предлагали за отдельную плату... Хотелось бы как то все без доп финансовых вливаний разрешить...
Старый 14.12.2006, 14:01   #15  
EVGL is offline
EVGL
Moderator
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,617 / 2145 (79) +++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Вот уже жертвы рекламы пошли. Используйте штатную процедуру проверки RecId. Сидит совершенно бесплатно в форме SQL Administration и исправно работает.
Старый 14.12.2006, 14:26   #16  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от EVGL Посмотреть сообщение
Вот уже жертвы рекламы пошли. Используйте штатную процедуру проверки RecId. Сидит совершенно бесплатно в форме SQL Administration и исправно работает.
у меня таблица MarkupTrans, где TransRecId имеет EDT RecId, а не RefRecId.

Запуск данной процедуры не убьет ли мне ВСЕ ссылки в принципе?
Старый 14.12.2006, 14:36   #17  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
об этом же кстати писал и Mazzy создавая тему, ссылку на которую Вы приводили в своем первом посте в данной теме!

Поможет ли стандартная дефрагментация? вот в чем вопрос... и не поубиваются ли у нас ссылки если EDT-recId (как минимум markuptrans, сопоставления...)
Старый 14.12.2006, 14:51   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,555 / 2376 (85) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от sparur Посмотреть сообщение
сделал преобразование минусового recid (2^32-abs(recId)) получили положительный recId. который если подставить в фильтр в обозревателе таблицы позиционируется на записи с минусовым recid!

Однако в запросах не отрабатывает такое преобразование нигде!!! ни в Job'e, ни в табл. методе. Минусовый хоть в Job'e работает...

Вообщем дилемма, как разрешать - загадка.
Не совсем понимаю смысл этих преобразований. В любом случае в вашей переменной что знаковое, что беззнаковое значение хранятся как один и то-же набор битов (т.е. 0xBD6D8523). Различие лишь в его интрепретации (кстати, можете попробовать подставить шестнадцитиричное значение в вызове). Axapta оперирует лишь знаковыми целыми, по-этому вы всегда получите отрицательное значение для него.
Еще, 2^32 это уже 64-битное число (3.0 с ними не работает) - выше преобразование некорректно.

По существу - попробовал добавить этот метод - запись нормально находится
__________________
Axapta v.3.0 sp5 kr2
Старый 14.12.2006, 15:06   #19  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,831 / 3709 (181) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от EVGL Посмотреть сообщение
Вот уже жертвы рекламы пошли. Используйте штатную процедуру проверки RecId. Сидит совершенно бесплатно в форме SQL Administration и исправно работает.
Вот они - спокойные пользователи международного функционала.
Где тип полей со ссылками на recId унаследованы от типа refRecId...
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 14.12.2006, 15:08   #20  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,831 / 3709 (181) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от sparur Посмотреть сообщение
Запуск данной процедуры не убьет ли мне ВСЕ ссылки в принципе?
ВСЕ - не убьет.
Убьет только те ссылки, которые находятся в полях с типом, не унаследованнsм от recRefId.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Теги
recid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как проверить наличие хотя бы одной записи в подчиненной таблице. demon46 DAX: Программирование 5 07.03.2008 09:41
Как узнать по объекту RecordSortedList, из какой таблицы в нем записи? gl00mie DAX: Программирование 4 20.02.2008 15:39
Как получить записи двух таблиц в виде одной таблицы? chi DAX: Программирование 32 16.12.2004 11:44
Как решить проблему с правами на вновь создаваемые записи таблицы. AY DAX: Прочие вопросы 4 02.10.2003 12:44
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:05.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.