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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.10.2005, 12:06   #1  
Deep Dreamer is offline
Deep Dreamer
Участник
 
76 / 24 (1) +++
Регистрация: 05.03.2004
Адрес: Москва
EmplTrans_RU - странный Relations
Может я совсем туплю, но что это:
Изображения
 

Последний раз редактировалось Deep Dreamer; 19.10.2005 в 12:22.
Старый 19.10.2005, 12:20   #2  
mit is offline
mit
Участник
Аватар для mit
 
386 / 36 (2) +++
Регистрация: 15.01.2003
Адрес: Moscow
А это? может тоже самое?
Изображения
 
Старый 19.10.2005, 12:22   #3  
Deep Dreamer is offline
Deep Dreamer
Участник
 
76 / 24 (1) +++
Регистрация: 05.03.2004
Адрес: Москва
А смысл?
Старый 19.10.2005, 12:37   #4  
mit is offline
mit
Участник
Аватар для mit
 
386 / 36 (2) +++
Регистрация: 15.01.2003
Адрес: Moscow
нет, ответил не в тему сразу не заметил что это RecId. действительно непонятно. возможно, ошибка.
Старый 19.10.2005, 12:38   #5  
Modus is offline
Modus
Участник
 
8 / 10 (1) +
Регистрация: 03.10.2005
Ладно бы там был EDT, от которого они поленились что-то унаследовать и перекрыли отношение на таблице...
Старый 20.10.2005, 13:22   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Relation по ItemId на саму таблицу есть в InventSum тоже.

InventSum.ItemId = InventSum.itemId

Так зачем?
Старый 20.10.2005, 13:29   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Не вижу, что Вы такого странного в это ситуации. Что запрещает джойнить таблицу саму к себе? Вот для этого и сделан этот рилэйшн.

С Уважением,
Георгий
Старый 20.10.2005, 13:29   #8  
Modus is offline
Modus
Участник
 
8 / 10 (1) +
Регистрация: 03.10.2005
И что это даст, если у нас одно и то же поле? Типа если это значение встречается несколько раз, то в таблице к ней прицепятся аналогичные? А почему она не может приджойниться так, что совпадет сама с собой?

Последний раз редактировалось Modus; 20.10.2005 в 13:33.
Старый 20.10.2005, 13:46   #9  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Не в первый раз поднимался этот вопрос. Эта relation сделана для того, чтобы Best Practices не ругался. Вот и все. А Best Practices ругается тогда, когда переименование первичного ключа невозможно, т.е. нет уникального индекса. Поэксперементируйте, и все станет понятно.
За это сообщение автора поблагодарили: Proba (1).
Старый 20.10.2005, 13:56   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Насколько я понимаю, эти релэйшны позволяют системе понять, как связать формы при открытии одной формы из другой через menuitem.
Поясняющий пример: если бросить на форму InventSum menuitem, запускающий саму эту форму InventSum, то при наличии вышеприведенного релэйшна при нажатии созданной кнопки записи в открывшейся форме будут отфильтрованы по текущему ItemId, и эта связь будет сохраняться при перемещении по записям первой формы (dynalink).
__________________
Андрей.
Старый 20.10.2005, 13:56   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
А Best Practices ругается тогда, когда переименование первичного ключа невозможно, т.е. нет уникального индекса
А как может быть первичный ключ неуникальным?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.10.2005, 14:08   #12  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
А как может быть первичный ключ неуникальным?
Не понял вопроса. Речь не о том.

Функция такая есть в Аксапте - переименовать первичный ключ. Обычно ссылка на самого себя стоит в EDT. Используется в переименовании из контекстного меню. Раньше Best Practices были слегка параноидальными и ругались на отсутствие ссылки на самого себя.

Последний раз редактировалось EVGL; 20.10.2005 в 14:12.
Старый 20.10.2005, 14:41   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Понял. Спасибо.
__________________
Axapta v.3.0 sp5 kr2
Старый 17.10.2008, 23:13   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от EVGL Посмотреть сообщение
Раньше Best Practices были слегка параноидальными и ругались на отсутствие ссылки на самого себя.
Думаю что не только по этой причине делают в Relation связь таблицы самой на себя.

Тут все хитрее. Дело в том что движок Аксапты может определять связь между таблицами как через связи определенные на EDT, так и через связи определенные на уровне таблиц, причем у последних приоритет выше.

У меня был реальный пример. Есть таблица SalesTable - у неё не определена связь на саму себя через salesId. Если на форме SalesTable нажать Запросы - Итоги - то откроется форма подсчета итогов и сработает Dynalink - будет связь по SalesId. Спрашивается, откуда она взялась ? Судя по всему из расширенного типа данных которые прописан в SalesTable.salesId

Далее, делаем какую-нить кастомизацию - определяем на SalesTable составной relation по 3 новым полям.
SalesTable.CUSTOM_DataAreaId == SalesTable.DataAreaID
SalesTable.CUSTOM_SalesId == SalesTable.SalesId
SalesTable.CUSTOM_SourceType == 0 // поле с типом Енум - неважно какое.
(Это мы цепочки писали - задавали таким образом свои связи между заказами в разных компаниях)

И после этого ломается форма Запросы - Итоги !!! Везде.
Даже на тех заказах, на которых поля
SalesTable.CUSTOM_DataAreaId
SalesTable.CUSTOM_SalesId
SalesTable.CUSTOM_SourceType
пустые !

Оказывается система подхватывал Dynalink уже по новой связке ! Хотя по идее не должна была. Так как значения в полях не подходили. Она взяла кусок Relation-а и стала по нему делать Dynalink !

Т.е. получается что ядро Аксапты видит, что в relation-х таблицы есть связка по SalesId - после этого забивает на связки в расширенных типах которые прописаны в полях. Выкусывает из составного relation по 3-м полям связку по одному полю SalesId.CUSTOM_SalesId == SalesTable.SalesId и использует его в качестве Dynalink при вызове Запросы - Итоги

Пипец.
Но стоило мне определить на таблице отдельный Relation с тавтологической связкой
SalesTable.SalesId == SalesTable.SalesId
как все чудесным образом вылечилось.
Старый 18.10.2008, 09:11   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2Logger:
У Аксапты есть еще одна фича. Если на таблице определено 2 взаимоисключающих релейшна, по которым она строит dynalink-и, лукапы, переходы к основной таблице - то она берет 1-й по алфавиту по названию релейшна.
Т.е. в Вашем случае - Вы скорее всего сделали новый релейшн, который по алфавиту стал раньше стандартного. Если у вас есть возможность проверить - переименуйте Ваш релейшн так, чтобы он по алфавиту стал позже стандартного. Скорее всего у вас будет тот же эффект, что и при удалении релейшна.

Так что, я больше склоняюсь к мысли о Best Practice.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Logger (2).
Старый 18.10.2008, 11:16   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
2Logger:
Т.е. в Вашем случае - Вы скорее всего сделали новый релейшн, который по алфавиту стал раньше стандартного.
Да не было там стандартного
В SalesTable нет стандартных Relation содержащих связку по SalesId
Так что тут другой случай.
Старый 18.10.2008, 17:21   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Перепроверил пример, действительно, все дело было в том какой Relaton раньше стоит в АОТ. Значит система не делает никаких извращений с Relation и по частям их не использует.

sukhanchik - респект.

Что же теперь получается - если хотим своими модификациями по минимуму влиять на стандартное поведение системы, то Relation-ы надо называть так чтобы они в конце списка были? Типа префикс "ZZZ_" использовать?
Старый 18.10.2008, 19:09   #18  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Logger Посмотреть сообщение
Тут все хитрее. Дело в том что движок Аксапты может определять связь между таблицами как через связи определенные на EDT, так и через связи определенные на уровне таблиц, причем у последних приоритет выше.
Вы ошибаетесь. Приоритет связей на уровне расширенного типа на самом деле ВЫШЕ, чем у таблицы, и это полное гадство. Именно поэтому в системе полно расширенных типов вроде XXXBaseXXXid, не имеющих связей. Другими словами, если на типе есть связь, то она имеет наивысший приоритет. Если связи на типе нет, то берется связь из таблицы.
Старый 19.10.2008, 03:09   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
Вы ошибаетесь. Приоритет связей на уровне расширенного типа на самом деле ВЫШЕ, чем у таблицы, и это полное гадство. Именно поэтому в системе полно расширенных типов вроде XXXBaseXXXid, не имеющих связей. Другими словами, если на типе есть связь, то она имеет наивысший приоритет. Если связи на типе нет, то берется связь из таблицы.
На самом деле - странное утверждение, учитывая, что это довольно просто проверить.

Создаем таблицу с 1 полем, тип поля - ItemId.
Создаем на таблице Relation по этому полю на таблицу SalesLine (по ItemId)

Открываем браузер таблиц, создаем запись и открываем лукап - видим записи из SalesLine. Соответственно, relation по таблице имеет приоритет выше, чем relation по EDT

Или я не понял смысла дискуссии?
За это сообщение автора поблагодарили: EVGL (2).
Старый 19.10.2008, 15:09   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Мне тоже кажется что приоритет у relation таблицы выше. Иначе не сработал бы пример Ивана и мой.

Если приоритет связей на EDT выше, то тогда не ломалась бы работа форма "Запросы - Итоги" при добавлении на таблицу других Relation.
Теги
relation, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Two Tables with Two Relations Blog bot DAX Blogs 0 31.03.2008 11:05
Удаление Relations lemchey_white DAX: Программирование 2 06.12.2007 12:42
Странный код в базовом функционале PavelSR DAX: Программирование 6 23.04.2007 16:01
Как не использовать relations на таблицах demetra DAX: Программирование 13 14.07.2006 11:00
Вопрос о корректности Relations Gustav DAX: Программирование 9 11.05.2006 15:30

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:07.