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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2011, 14:03   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Отображение связи n:n на форме
Вопрос 1: как правильно сделать отображение связанных n:n таблиц на ОДНОЙ форме?
Вопрос 2: как правильно сделать вызов второй формы, которая содержит таблицу, связанную отношением n:n к первой?
Вопрос 3: есть ли где-нибудь в стандартной аксапте отображение связей n:n, которое можно взять за образец?

================================
Подробнее:

Есть две таблицы, которые связаны отношением n:n (многие-ко-многим) и понятны пользователям
Есть третья служебная таблица, которая физически содержит эти связи

Пользователи "знают" только о двух первых таблицах.
Для пользователей третья таблица не имеет никакого практического смысла. Поэтому не хотелось бы заставлять их открывать какие-то служебные окна и/или служебные фильтры

Название: 1.PNG
Просмотров: 1658

Размер: 12.8 Кб

хотелось бы иметь либо одно окно, в котором показаны строки с отношением n:n
Название: 2.PNG
Просмотров: 1756

Размер: 20.6 Кб Название: 3.PNG
Просмотров: 1769

Размер: 22.0 Кб

либо два отдельных окна: в первом Таблица1, по кнопочке открываем второе окно с таблицей2. А во втором окне видны только связанные с первой записи.

Как такое сделать правильно?
Есть ли уже аналоги/образцы в Аксапте?

Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 14:13   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Можно сделать View = Таблица2 join ТаблицаNN. И тогда рассматривать связь Таблицы1 к View уже как 1:n.
Старый 16.03.2011, 14:33   #3  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
На картинках показана связь 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  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
На вскидку полный аналог - пользователи и группы пользователей. Соответственно две формы для каждого справочника, связанные значения второй таблицы отображаются на отдельной вкладке.

Есть еще примеры, но там обычно одна таблица является "более главной" и связь задается только относительно ее в отдельной форме, хотя в БД полноценный n:n. Например, связь Клиента и Отраслей.
__________________
Ivanhoe as is..
Старый 16.03.2011, 14:39   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
__________________
Axapta v.3.0 sp5 kr2
Старый 16.03.2011, 14:44   #6  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
Согласен, если забыть про стандартные примеры, то так и делаю.
__________________
Ivanhoe as is..
Старый 16.03.2011, 14:47   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
Только наверное наоборот, нужно к ведущей таблице заделайить (LinkType = Delayed) связку из приджойненных таблиц. Ну или как я выше предложил такую связку оформить как View. Иначе в первой таблице мы получим дубликаты записей из-за inner joina

Последний раз редактировалось S.Kuskov; 16.03.2011 в 14:51. Причина: пояснения
За это сообщение автора поблагодарили: AndyD (2).
Старый 16.03.2011, 14:48   #8  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
Такое решение подразумевает, что первая таблица является главной. Соответственно просмотреть все записи в первой таблице, соответствующие какой-либо записи из второй таблицы не получится.
__________________
Dynamics AX Experience
Старый 16.03.2011, 14:52   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от CDR Посмотреть сообщение
Такое решение подразумевает, что первая таблица является главной. Соответственно просмотреть все записи в первой таблице, соответствующие какой-либо записи из второй таблицы не получится.
Ну да. Для обратной задачи нужно делать всё в точности до наоборот . А как вы себе представляете двухстороннее взаимодействие в рамках одной формы? Переключатель режимов? Но всё равно же в каждый конкретный момент какая-то из таблиц должны быть главной. Имхо, две формы - будут понятнее для пользователя.

Последний раз редактировалось S.Kuskov; 16.03.2011 в 14:57.
Старый 16.03.2011, 14:58   #10  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ну да. Для обратной задачи нужно делать всё в точности до наоборот .
Это еще одна форма. Внимательно читаем вопрос Сергея номер 1.

А вообще немного странный вопрос. Если взять пример Ивана с пользователями и группами, то что хочет Сергей увидеть, выведя на ОДНОЙ форме связь n:n? В какие группы входит пользователь? Какие пользователи входят в группу? Или и то, и другое сразу?
__________________
Dynamics AX Experience

Последний раз редактировалось CDR; 16.03.2011 в 15:00.
Старый 16.03.2011, 15:16   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
О, как быстро.
Спасибо.

Цитата:
Сообщение от CDR Посмотреть сообщение
На картинках показана связь 1:n. Следует ли из этого, что есть желание переделать связь n:n на связь 1:n ?
Не, на картинках я чуток не додумал. Действительно пример на картинках дает 1:n.
но в реальности n:n

Цитата:
Сообщение от CDR Посмотреть сообщение
Если связь n:n, то что все-таки отображается в первом гриде?
Отличный вопрос!
Об этом я тоже не подумал.

С точки зрения Аксапты на одной форме есть ведущий датасорс и подчиненные датасорсы.

Если на первом гриде будет Таблица1, то на втором гриде должны отобразиться связанные записи из Таблица2.

Да, в вопросе 2 более понятно, чего хочется.
Пользователь работает с формой1/таблица1 (ведущая форма), жамкает на кнопку, открывается форма2/таблица2 (подчиненная форма) со связанными записями.

Если пользователь работает формой2/таблица2, то уже Форма2 становится ведущей. Пользователь жамкает на кнопку, открывается форма1/таблица1 (подчиненная форма) со связанными записями.

Другими словами, хочется dynalink для связей n:n.

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
На вскидку полный аналог - пользователи и группы пользователей.
Ага. Спасибо.
Но там вручную программисруемые view.
Вопрос скорее о нормальных гридах и о query, нежели о ручной выборке записей.

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Есть еще примеры, но там обычно одна таблица является "более главной" и связь задается только относительно ее в отдельной форме, хотя в БД полноценный n:n. Например, связь Клиента и Отраслей.
Э-э? я торможу. где именно?

Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
в этом случае мы получим одну(!) запись во второй таблице, а не весь набор связанных записей.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ну да. Для обратной задачи нужно делать всё в точности до наоборот
Да-да. Все правильно. Вопрос ведущий-ведомый (master/detail) я не додумал.
Форма не должна быть двухсторонней. Верхний грид ведущий, нижний - ведомый.

Цитата:
Сообщение от CDR Посмотреть сообщение
А вообще немного странный вопрос. Если взять пример Ивана с пользователями и группами, то что хочет Сергей увидеть, выведя на ОДНОЙ форме связь n:n? В какие группы входит пользователь? Какие пользователи входят в группу? Или и то, и другое сразу?
Меня не то, чтобы ОДНА форма интересует.
Меня скорее интересует запрос (query), который позволит связать n:n таблицы.
В одной форме или в разных - не так уж и важно.
Соглашусь, что изначальный вопрос надо было поставить чуть-чуть по-другому.
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 15:31   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
А почему нельзы добавить на форму приджойненный к первой таблице датасорс со связями, а вторую таблицу заделайить к нему?
отвечу более подробно на этот вопрос.
картинкой.

я ж конечно сделал тестовую форму.
слева Таблица1, справа - Таблица2.
посередине техническая таблица со связями n:n.

если использовать обычный delayed.
то справа мы видим ОДНУ запись, а хочется видеть ВСЕ записи, связанные с левой.

что должно быть в запросе?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 489
Размер:	25.1 Кб
ID:	6675  
Изображения
  
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 16.03.2011 в 15:33. Причина: собственно вопрос: что должно быть в запросе?
Старый 16.03.2011, 15:46   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Только наверное наоборот, нужно к ведущей таблице заделайить (LinkType = Delayed) связку из приджойненных таблиц. Ну или как я выше предложил такую связку оформить как View. Иначе в первой таблице мы получим дубликаты записей из-за inner joina
Да, точно

2 mazzy
Я предлагал сделать так

1таблица->иннер джойн->таблица связи->delyed->2таблица
Но в этом случае записи в первой таблице множились бы

По-этому, надо сделать так

1таблица->delyed->таблица связи->иннер джойн->2таблица
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: mazzy (5).
Старый 16.03.2011, 15:46   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Два грида на одной форме, реализующие связь в одну сторону + два грида на другой форме, реализующие связь в обратную сторону, рализовать проще чем две формы по одному гриду на каждой с возможностью перехода друг к дружке.
Во втором случае сложность в том, что нужно обеспечить два режима работы формы: "Отображение связанных данных" и "Отображение всех данных". Из-за того что поле связи находится во внешней промежуточной таблице, для использование dynalink прийдется на форме ведущим делать датасорс с этой самой промежуточной таблицей. Само по себе это не проблема, проблема в том, что при отсутствии dynalink (режим "Отображение всех данных") прийдётся в ручную выключать связь промежуточной таблицы с функциональной, т.е превращать функциональную таблицу из ведомой в ведущую.
Старый 16.03.2011, 15:57   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Есть еще примеры, но там обычно одна таблица является "более главной" и связь задается только относительно ее в отдельной форме, хотя в БД полноценный n:n. Например, связь Клиента и Отраслей.
Ага. Спасибо за наводку.
Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 393
Размер:	68.5 Кб
ID:	6680

Но только не то.
И деловые отношения, и используемые отрасли содержат ссылку на PartyId
Название: 2.PNG
Просмотров: 1538

Размер: 12.6 Кб

а у меня немного другой случай.
обе мои таблицы ничего не знают о технической таблице со связями.
Название: 1.PNG
Просмотров: 1563

Размер: 12.8 Кб
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 16:02   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Кстати, много ко многим, это

PurchTable->VendInvoicePurchLink->VendInvoiceJour

и Заказы тоже
__________________
Axapta v.3.0 sp5 kr2
Старый 16.03.2011, 16:04   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
По-этому, надо сделать так

1таблица->delyed->таблица связи->иннер джойн->2таблица
О! Спасибо, добрый человек.
Чувствовал же, что чуть-чуть осталось. И чуть-чуть чего-то недопонимаю.
Спасибо всем.

чего я не понимал:
во-первых, даже для связи n:n все равно остается ведущий и ведомый грид!
во-вторых, нужно юзать innerJoin вместо Delyed для связи второй таблицы.
Миниатюры
Нажмите на изображение для увеличения
Название: 00.PNG
Просмотров: 490
Размер:	28.7 Кб
ID:	6681  
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 16:06   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
теперь стала понятна и прошлая ветка Отношение many-to-many
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 16:08   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
рализовать проще чем две формы по одному гриду на каждой с возможностью перехода друг к дружке.
Да-да-да!
Теперь это стало понятно. Так и будем делать.
Спасибо.

Цитата:
Сообщение от AndyD Посмотреть сообщение
Кстати, много ко многим, это

PurchTable->VendInvoicePurchLink->VendInvoiceJour

и Заказы тоже
Э-э-э... А где эта связь в рабочем виде в Аксапте?
Хочешь сказать, что если жамкнуть в заказах покупку на запрос \ накладные, то я увижу накладыне по VendInvoicePurchLink?
всю жизнь думал, что увижу накладные по одному заказу.
Щас. проверю. Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2011, 16:11   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Да, накладные по этому заказу будут. Но выбираются они с помощью 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, связи

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отображение таблицы в новой форме форме DAsm DAX: Программирование 23 04.03.2011 21:50
Медленное отображение checkBox на форме Rivez DAX: Программирование 3 11.01.2011 08:50
Отображение AOT_Query на форме часть 2 radya DAX: Программирование 7 05.06.2008 17:33
отображение значений query на форме fialka DAX: Программирование 13 31.07.2007 14:31
Подскажите где настроивается отображение аналитики в печатной форме отгрузочной накла wb DAX: Функционал 7 15.07.2004 09:49

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

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

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