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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.11.2003, 09:48   #1  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Связь двух таблиц
Доброго времени суток!
Может я задам вопрос который уже обсуждался, тогда киньте в меня ссылкой (а то в поиске ничего не находит). Задача следующая:
Имеются две таблицы:
1. BankAccountTable
2. BankBalanceTable состоящая из сл. полей: bankAccount, TransDate и Amount /
Связь: BankAccountTable.AccountID <=> BankBalanceTable.bankAccount.
Нужно в grid`е формы нужно вывести сл. поля:
1. BankAccountTable.Name - readonly
2. BankAccountTable.AccountNum - readonly
3. BankBalanceTable.TransDate - read/write
4. BankBalanceTable.Amount - read/write

И вот тут начинается самое интересное - а именно связь здесь должна быть очень интересная:
из таблицы BankAccountTable должны выводится все записи не зависимо есть ли запись в BankBalanceTable удовлетворяющая условию или нет. Если такой записи нет, то grid должен позволять добавлять такую запись.
И еще, в BankBalanceTable должны выводится отфильтровынный записи - BankBalanceTable.TransDate = today().
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 10:18   #2  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Часть проблемы решена
Часть проблемы я решил сам:
1. Создаем новый тип MyBankAccount и в нем укахываем Reletions MyBankAccount => BankAccountTable.AccountId
2. В форме два DataSource: BankAccountTable_DS и BankBalanceTable_DS:
3. Создаем GRID с нужными полями
4. В BankBalanceTable_DS указываем:
JoinSource = BankAccountTable
LinkType = OnnerJoin
5. Перекрываем метод write в BankBalanceTable_DS:

PHP код:
public void write()
{
    if (!
BankBalanceTable.BankAccount) {
        
BankBalanceTable.BankAccount BankAccountTable.AccountID;
    }
    
super();

Только теперь другая проблема: в gride появились пустые строки.К тому же фильтр не работает:
PHP код:
public void executeQuery()
{
    
Query                   Query;
    
QueryBuildDataSource    QueryDataSource;
    
QueryBuildRange         QueryRange;
    ;

    
query this.query();
    if (!
query) {
        
query = new Query();
        
QueryDataSource query.adddataSourcetableNum(BankBalanceTable) );
    }
    else {
        
QueryDataSource query.dataSourceTabletableNum(BankBalanceTable) );
    }

    
QueryRange QueryDataSource.findRangefieldNum(BankBalanceTableTransDate) );
    if (!
QueryRange) {
        
QueryRange QueryDataSource.addRangefieldNum(BankBalanceTableTransDate) );
    }
    if (
QueryRange) {
        
QueryRange.valueQueryValue(today()) );
    }

    
this.queryquery );

    
super();

__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 14:58   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Re: Часть проблемы решена
Да нет, все работает.

Давайте по порядку.

Цитата:
Изначально опубликовано daemon
1. Создаем новый тип MyBankAccount и в нем укахываем Reletions MyBankAccount => BankAccountTable.AccountId
Зачем? Есть уже такой тип. Называется он CompanyBankAccountId.
Relations в Вашей таблице BankBalanceTable, таким образом, указывать не надо. Просто укажите, что тип поля BankAccount в BankBalanceTable - CompanyBankAccountId.

Цитата:
Изначально опубликовано daemon
2. В форме два DataSource: BankAccountTable_DS и BankBalanceTable_DS:
3. Создаем GRID с нужными полями
4. В BankBalanceTable_DS указываем:
JoinSource = BankAccountTable
LinkType = OnnerJoin
Пока все правильно.
Цитата:
Изначально опубликовано daemon
5. Перекрываем метод write в BankBalanceTable_DS:
Стоп. Во-первых, определитесь, в какую таблицу Вы хотите добавлять запись. Если в BankBalanceTable (что, по моему, более вероятно), проверьте, что свойство DataSource у Grid равно BankBalanceTable. В противном случае будет добавляться запись в таблицу банковских счетов.
Цитата:
Изначально опубликовано daemon
Только теперь другая проблема: в gride появились пустые строки.
А без фильтра они тоже есть?
Цитата:
Изначально опубликовано daemon
К тому же фильтр не работает:
public void executeQuery()
А у какого DataSource вы перекрываете executeQuery?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.11.2003, 15:11   #4  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Re: Re: Часть проблемы решена
Цитата:
Изначально опубликовано Maxim Gorbunov
Стоп. Во-первых, определитесь, в какую таблицу Вы хотите добавлять запись. Если в BankBalanceTable (что, по моему, более вероятно), проверьте, что свойство DataSource у Grid равно BankBalanceTable. В противном случае будет добавляться запись в таблицу банковских счетов.
Информация должна добавляться в таблицу BankBalanceTable. Все корректно работает. Уже проверено.

Цитата:
Изначально опубликовано Maxim Gorbunov
А без фильтра они тоже есть?
Да. Даже без фильтра появляются пустые строки.

Цитата:
Изначально опубликовано Maxim Gorbunov
А у какого DataSource вы перекрываете executeQuery?
Эта пробела решина. Достаточно было в ClassDeclaration добавить:
PHP код:
public class FormRun extends ObjectRun

 
TransDate   AmountBalanceDate;

А в методе executeQuery у BankBalanceTable записать:
PHP код:
public void executeQuery() 
{
    
Query                   Query;
    
QueryBuildDataSource    QueryDataSource;
    
QueryBuildRange         QueryRange;
    ;

    
QueryDataSource this.query().dataSourceTabletableNum(COR_BankBalanceTable) );
    
QueryRange QueryDataSource.findRangefieldNum(COR_BankBalanceTableTransDate) );
    if (!
QueryRange) {
        
QueryRange QueryDataSource.addRangefieldNum(COR_BankBalanceTableTransDate) );
    }

    
QueryRange.valueQueryValue(AmountBalanceDate /* today() */ ) );

    
super();

И все заработало. Естественно нужно указать значение в AmountBalanceDate.
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 15:29   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Все-таки, какой Data Source у Grid'а?

В любом случае, боюсь, что условия "из таблицы BankAccountTable должны выводится все записи не зависимо есть ли запись в BankBalanceTable удовлетворяющая условию или нет" и "Если такой записи нет, то grid должен позволять добавлять такую запись" взаимоисключающие. Получить такое стандартными средствами тяжело.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.11.2003, 15:34   #6  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Цитата:
Изначально опубликовано Maxim Gorbunov
Все-таки, какой Data Source у Grid'а?
BankBalanceTable
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 15:39   #7  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Цитата:
Изначально опубликовано Maxim Gorbunov
В любом случае, боюсь, что условия "из таблицы BankAccountTable должны выводится все записи не зависимо есть ли запись в BankBalanceTable удовлетворяющая условию или нет" и "Если такой записи нет, то grid должен позволять добавлять такую запись" взаимоисключающие. Получить такое стандартными средствами тяжело.
Да не... не все так страшно как казалось. нужно было просто в одном гриде связать две таблицы по LEFT OUTER JOIN. Поля из первой таблицы (BankAccountTable) закрыты для редактирования. При этом, если редактируешь поля второй таблицы (BankBalanceTable.TransDate и BankBalanceTable.Amount), то автоматичеки в таблицу BankBalanceTable добавляется запись (конечно же, если ее не было)

Я это реализовал. Единственное что осталось - удалить пустые строки в grid`е
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 15:51   #8  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано daemon
BankBalanceTable
В таком случае, боюсь, что все строки в BankBalanceTable, которые Вы создаете через эту форму, принадлежат одному и тому же BankAccount (скорее всего первому). Я прав?

Да, кстати, а executeQuery на каком DataSource? BankAccountTable?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.11.2003, 16:13   #9  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Цитата:
Изначально опубликовано Maxim Gorbunov

В таком случае, боюсь, что все строки в BankBalanceTable, которые Вы создаете через эту форму, принадлежат одному и тому же BankAccount (скорее всего первому). Я прав?
Нет, не прав. Для этого я и перекрывал метот write в BankBalanceTable чтобы в случае добавления новой записи указать BankAccount
Цитата:
Изначально опубликовано Maxim Gorbunov
Да, кстати, а executeQuery на каком DataSource? BankAccountTable?
в BankBalanceTable
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
Старый 20.11.2003, 16:28   #10  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Шайтан!

А можно на Вашу форму посмотреть?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.11.2003, 16:32   #11  
daemon is offline
daemon
Участник
 
20 / 10 (1) +
Регистрация: 13.03.2003
Адрес: Москва, Россия
Цитата:
Изначально опубликовано Maxim Gorbunov
Шайтан!

А можно на Вашу форму посмотреть?
Можно. XPO-шник я тебе на мыло сброшу... посмотришь и решишь, стоит ли его сюда кидать или нет
__________________
Roman "Daemon" Krivov
Specialist of “CORUS Group” IT department
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
отчёт из двух таблиц на двух листах с группировкой fialka DAX: Программирование 4 19.03.2007 13:49
LookUp из двух таблиц ... Rimantas DAX: Программирование 16 14.11.2006 17:27
Связь двух разных кубов в OLAP? Hidden DAX: Функционал 5 09.06.2006 15:27
Невидимая связь двух таблиц в формах ArturK DAX: Программирование 11 11.03.2004 18:18
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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