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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2012, 12:14   #1  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Связь двух таблиц
Дело обстоит так: Из формы заказов открывается сторонняя форма, на форме лежит табличка(S_LogisticsJournal) которая связана с SalesTable по SalesID(связана не в смысле Relation а в смысле логически) причем 1 записи из SalesTable может соответствовать несколько в S_LogisticsJournal. Задача: при открытии формы с табличкой(S_LogisticsJournal) на гриде нужно выводить только те записи которые соот-ют записи в SalesTable причем в сортированном виде. Я делал так: создавал Relation м\у табличками, а в Inite дата соурса(S_LogisticsJournal) писал след код:
X++:
    if (element.args().dataset() == tablenum(SalesTable))
    {  
         qb.relations(true);
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);

    }
Но в таком случае Relation не работал, работала только сортировка, если удалить Relation и написать след.
X++:
    qb  = q.addDataSource(TableNum(S_LogisticsJournal));
    if (element.args().dataset() == tablenum(SalesTable))
    {
         qb.addDynalink( fieldnum(S_LogisticsJournal, Source), element.args().record(),fieldnum(SalesTable, SalesID));
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);

    }
то получим вот такй запрос
X++:
SELECT * FROM S_LogisticsJournal WHERE SalesTable.SalesId=S_LogisticsJournal.Source
А нужен наоборот
X++:
SELECT * FROM S_LogisticsJournal WHERE S_LogisticsJournal.Source=SalesTable.SalesId
Совсем запутался ( помогите разобраться. AX2009
Старый 27.01.2012, 12:24   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Дело обстоит так: Из формы заказов открывается сторонняя форма, на форме лежит табличка(S_LogisticsJournal) которая связана с SalesTable по SalesID(связана не в смысле Relation а в смысле логически) причем 1 записи из SalesTable может соответствовать несколько в S_LogisticsJournal. Задача: при открытии формы с табличкой(S_LogisticsJournal) на гриде нужно выводить только те записи которые соот-ют записи в SalesTable причем в сортированном виде. Я делал так: создавал Relation м\у табличками, а в Inite дата соурса(S_LogisticsJournal) писал след код:
X++:
    if (element.args().dataset() == tablenum(SalesTable))
    {  
         qb.relations(true);
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);

    }
Но в таком случае Relation не работал, работала только сортировка, если удалить Relation и написать след.
X++:
    qb  = q.addDataSource(TableNum(S_LogisticsJournal));
    if (element.args().dataset() == tablenum(SalesTable))
    {
         qb.addDynalink( fieldnum(S_LogisticsJournal, Source), element.args().record(),fieldnum(SalesTable, SalesID));
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);

    }
то получим вот такй запрос
X++:
SELECT * FROM S_LogisticsJournal WHERE SalesTable.SalesId=S_LogisticsJournal.Source
А нужен наоборот
X++:
SELECT * FROM S_LogisticsJournal WHERE S_LogisticsJournal.Source=SalesTable.SalesId
Совсем запутался ( помогите разобраться. AX2009
Есле поле SalesId будет унаследовано от EDT SalesId в таблице S_LogisticsJournal, тогда и никакие Relation's не нужны, потому что система сама определит связь вашей таблицы и таблицы SalesTable по настроенному в EDT SalesId Relation'у к таблице SalesTable.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.01.2012, 12:30   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
+
для примера смотрите открытие формы журнала накладных клиентов по кнопке запросы из заказов на продажу.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.01.2012, 12:34   #4  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Да если EDT настроить работать будет, однако данная форма запускается еще и из формы предложений где нужно связывать с полем QuotationID у которого свой EDT. в таком случае оно не сработает!
Старый 27.01.2012, 12:38   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Да если EDT настроить работать будет, однако данная форма запускается еще и из формы предложений где нужно связывать с полем QuotationID у которого свой EDT. в таком случае оно не сработает!
Так добавьте в вашу таблицу два поля, salesId и QuotationID. По идее тогда будет работать связка и для заказов и для предложений (насчет этого сомневаюсь, надо протестить).

Либо делайте по аналогии реализации ценовых соглашений, которые вызываются как из клиентов, так и из поставщиков, номенклатуры... И там нормально отрабатывают все связи.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.01.2012, 12:41   #6  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
то получим вот такй запрос
X++:
SELECT * FROM S_LogisticsJournal WHERE SalesTable.SalesId=S_LogisticsJournal.Source
А нужен наоборот
X++:
SELECT * FROM S_LogisticsJournal WHERE S_LogisticsJournal.Source=SalesTable.SalesId
Совсем запутался ( помогите разобраться. AX2009
Эти две записи абсолютно идентичны с точки зрения выполнения. Только сравнение пишется двойным равно.
Такой джойн не пробовали?

X++:
         qb.addLink( fieldnum(S_LogisticsJournal, Source), fieldnum(SalesTable, SalesID));
	 qb.joinMode(JoinMode::InnerJoin);
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);

Последний раз редактировалось Krasher; 27.01.2012 в 12:44.
За это сообщение автора поблагодарили: AngelDominantes (1).
Старый 27.01.2012, 12:47   #7  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от Krasher Посмотреть сообщение
Эти две записи абсолютно идентичны с точки зрения выполнения. Такой джойн не пробовали?

X++:
         qb.addLink( fieldnum(S_LogisticsJournal, Source), fieldnum(SalesTable, SalesID));
	 qb.joinMode(JoinMode::InnerJoin);
         qb.addSortField(fieldnum(S_LogisticsJournal, DocumentNum), SortOrder::Descending);
Если они идентичны видимо загвоздка в чем то другом, значит буду искать. Спасибо за ответ.
Старый 27.01.2012, 18:53   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Прислушайтесь к советам участников. Не нужно ничего дополнительно программировать. То что вы хотите реализовать решается в несколько щелчков мыши. Читайте про Dynalink.

Как настроить DynaLink или фильтр в форме
Как подключить датасоурсы на два вторичных ключа одинакового типа на форме

Последний раз редактировалось S.Kuskov; 27.01.2012 в 18:57.
За это сообщение автора поблагодарили: Pustik (2), lev (7).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связь двух разных кубов в OLAP? Hidden DAX: Функционал 5 09.06.2006 15:27
Связь таблиц CustPackingSlipTrans и SalesLine Ruff DAX: Программирование 4 06.09.2005 16:09
Невидимая связь двух таблиц в формах ArturK DAX: Программирование 11 11.03.2004 18:18
Связь двух таблиц daemon DAX: Программирование 10 20.11.2003 16:32
Связь таблиц по RecId и отображение строки renat DAX: Программирование 16 14.03.2003 18:32
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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