16.03.2011, 14:03 | #1 |
Участник
|
Отображение связи n:n на форме
Вопрос 1: как правильно сделать отображение связанных n:n таблиц на ОДНОЙ форме?
Вопрос 2: как правильно сделать вызов второй формы, которая содержит таблицу, связанную отношением n:n к первой? Вопрос 3: есть ли где-нибудь в стандартной аксапте отображение связей n:n, которое можно взять за образец? ================================ Подробнее: Есть две таблицы, которые связаны отношением n:n (многие-ко-многим) и понятны пользователям Есть третья служебная таблица, которая физически содержит эти связи Пользователи "знают" только о двух первых таблицах. Для пользователей третья таблица не имеет никакого практического смысла. Поэтому не хотелось бы заставлять их открывать какие-то служебные окна и/или служебные фильтры хотелось бы иметь либо одно окно, в котором показаны строки с отношением n:n либо два отдельных окна: в первом Таблица1, по кнопочке открываем второе окно с таблицей2. А во втором окне видны только связанные с первой записи. Как такое сделать правильно? Есть ли уже аналоги/образцы в Аксапте? Спасибо. |
|
16.03.2011, 14:13 | #2 |
Участник
|
Можно сделать View = Таблица2 join ТаблицаNN. И тогда рассматривать связь Таблицы1 к View уже как 1:n.
|
|
16.03.2011, 14:33 | #3 |
MCTS
|
На картинках показана связь 1:n. Следует ли из этого, что есть желание переделать связь n:n на связь 1:n ?
Если связь n:n, то что все-таки отображается в первом гриде? Просто все записи из Таблицы 1? Или все записи из Таблицы 1 на каждую связь с Таблицей 2 (в этом случае будут отображаться дубликаты)? Является ли какая-то из таблиц "более главной"?
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 16.03.2011 в 14:46. |
|
16.03.2011, 14:34 | #4 |
Участник
|
На вскидку полный аналог - пользователи и группы пользователей. Соответственно две формы для каждого справочника, связанные значения второй таблицы отображаются на отдельной вкладке.
Есть еще примеры, но там обычно одна таблица является "более главной" и связь задается только относительно ее в отдельной форме, хотя в БД полноценный n:n. Например, связь Клиента и Отраслей.
__________________
Ivanhoe as is.. |
|
16.03.2011, 14:39 | #5 |
Участник
|
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
__________________
Axapta v.3.0 sp5 kr2 |
|
16.03.2011, 14:44 | #6 |
Участник
|
Согласен, если забыть про стандартные примеры, то так и делаю.
__________________
Ivanhoe as is.. |
|
16.03.2011, 14:47 | #7 |
Участник
|
Только наверное наоборот, нужно к ведущей таблице заделайить (LinkType = Delayed) связку из приджойненных таблиц. Ну или как я выше предложил такую связку оформить как View. Иначе в первой таблице мы получим дубликаты записей из-за inner joina
Последний раз редактировалось S.Kuskov; 16.03.2011 в 14:51. Причина: пояснения |
|
|
За это сообщение автора поблагодарили: AndyD (2). |
16.03.2011, 14:48 | #8 |
MCTS
|
Такое решение подразумевает, что первая таблица является главной. Соответственно просмотреть все записи в первой таблице, соответствующие какой-либо записи из второй таблицы не получится.
__________________
Dynamics AX Experience |
|
16.03.2011, 14:52 | #9 |
Участник
|
Ну да. Для обратной задачи нужно делать всё в точности до наоборот . А как вы себе представляете двухстороннее взаимодействие в рамках одной формы? Переключатель режимов? Но всё равно же в каждый конкретный момент какая-то из таблиц должны быть главной. Имхо, две формы - будут понятнее для пользователя.
Последний раз редактировалось S.Kuskov; 16.03.2011 в 14:57. |
|
16.03.2011, 14:58 | #10 |
MCTS
|
Это еще одна форма. Внимательно читаем вопрос Сергея номер 1.
А вообще немного странный вопрос. Если взять пример Ивана с пользователями и группами, то что хочет Сергей увидеть, выведя на ОДНОЙ форме связь n:n? В какие группы входит пользователь? Какие пользователи входят в группу? Или и то, и другое сразу?
__________________
Dynamics AX Experience Последний раз редактировалось CDR; 16.03.2011 в 15:00. |
|
16.03.2011, 15:16 | #11 |
Участник
|
О, как быстро.
Спасибо. Цитата:
но в реальности n:n Отличный вопрос! Об этом я тоже не подумал. С точки зрения Аксапты на одной форме есть ведущий датасорс и подчиненные датасорсы. Если на первом гриде будет Таблица1, то на втором гриде должны отобразиться связанные записи из Таблица2. Да, в вопросе 2 более понятно, чего хочется. Пользователь работает с формой1/таблица1 (ведущая форма), жамкает на кнопку, открывается форма2/таблица2 (подчиненная форма) со связанными записями. Если пользователь работает формой2/таблица2, то уже Форма2 становится ведущей. Пользователь жамкает на кнопку, открывается форма1/таблица1 (подчиненная форма) со связанными записями. Другими словами, хочется dynalink для связей n:n. Ага. Спасибо. Но там вручную программисруемые view. Вопрос скорее о нормальных гридах и о query, нежели о ручной выборке записей. Цитата:
Цитата:
Да-да. Все правильно. Вопрос ведущий-ведомый (master/detail) я не додумал. Форма не должна быть двухсторонней. Верхний грид ведущий, нижний - ведомый. Цитата:
Меня скорее интересует запрос (query), который позволит связать n:n таблицы. В одной форме или в разных - не так уж и важно. Соглашусь, что изначальный вопрос надо было поставить чуть-чуть по-другому. |
|
16.03.2011, 15:31 | #12 |
Участник
|
Цитата:
картинкой. я ж конечно сделал тестовую форму. слева Таблица1, справа - Таблица2. посередине техническая таблица со связями n:n. если использовать обычный delayed. то справа мы видим ОДНУ запись, а хочется видеть ВСЕ записи, связанные с левой. что должно быть в запросе? Последний раз редактировалось mazzy; 16.03.2011 в 15:33. Причина: собственно вопрос: что должно быть в запросе? |
|
16.03.2011, 15:46 | #13 |
Участник
|
Цитата:
2 mazzy Я предлагал сделать так 1таблица->иннер джойн->таблица связи->delyed->2таблица Но в этом случае записи в первой таблице множились бы По-этому, надо сделать так 1таблица->delyed->таблица связи->иннер джойн->2таблица
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
16.03.2011, 15:46 | #14 |
Участник
|
Два грида на одной форме, реализующие связь в одну сторону + два грида на другой форме, реализующие связь в обратную сторону, рализовать проще чем две формы по одному гриду на каждой с возможностью перехода друг к дружке.
Во втором случае сложность в том, что нужно обеспечить два режима работы формы: "Отображение связанных данных" и "Отображение всех данных". Из-за того что поле связи находится во внешней промежуточной таблице, для использование dynalink прийдется на форме ведущим делать датасорс с этой самой промежуточной таблицей. Само по себе это не проблема, проблема в том, что при отсутствии dynalink (режим "Отображение всех данных") прийдётся в ручную выключать связь промежуточной таблицы с функциональной, т.е превращать функциональную таблицу из ведомой в ведущую. |
|
16.03.2011, 15:57 | #15 |
Участник
|
Цитата:
Но только не то. И деловые отношения, и используемые отрасли содержат ссылку на PartyId а у меня немного другой случай. обе мои таблицы ничего не знают о технической таблице со связями. |
|
16.03.2011, 16:02 | #16 |
Участник
|
Кстати, много ко многим, это
PurchTable->VendInvoicePurchLink->VendInvoiceJour и Заказы тоже
__________________
Axapta v.3.0 sp5 kr2 |
|
16.03.2011, 16:04 | #17 |
Участник
|
Цитата:
Чувствовал же, что чуть-чуть осталось. И чуть-чуть чего-то недопонимаю. Спасибо всем. чего я не понимал: во-первых, даже для связи n:n все равно остается ведущий и ведомый грид! во-вторых, нужно юзать innerJoin вместо Delyed для связи второй таблицы. |
|
16.03.2011, 16:06 | #18 |
Участник
|
теперь стала понятна и прошлая ветка Отношение many-to-many
|
|
16.03.2011, 16:08 | #19 |
Участник
|
Цитата:
Теперь это стало понятно. Так и будем делать. Спасибо. Цитата:
Хочешь сказать, что если жамкнуть в заказах покупку на запрос \ накладные, то я увижу накладыне по VendInvoicePurchLink? всю жизнь думал, что увижу накладные по одному заказу. Щас. проверю. Спасибо. |
|
16.03.2011, 16:11 | #20 |
Участник
|
Да, накладные по этому заказу будут. Но выбираются они с помощью VendInvoicePurchLink.
Смотри метод Init() на датасорсе vendInvoiceJour в форме VendInvoiceJour PS VendInvoiceJournal, конечно же
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 16.03.2011 в 16:14. |
|
|
За это сообщение автора поблагодарили: mazzy (5), S.Kuskov (2). |
Теги |
как правильно, связь таблиц, связь n:n, связи |
|
|