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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2008, 14:47   #1  
Proid is offline
Proid
Участник
 
5 / 10 (1) +
Регистрация: 26.05.2008
Связь таблиц
Здравствуйте!
у меня не большой вопрос:
мне надо получить записи из InventTable связанного с VendContractItem и вывести в грид.
Перекрыв метод executeQuery - он ни в какую не хочешь проводить выборку

вот текст запроса:

X++:
public void executeQuery()
{
    Query               q_Items;
    ;
    q_Items = this.query();
    q_Items.dataSourceTable(TableNum(InventTable));
    q_Items.dataSourceTable(TableNum(InventTable)).addDataSource(TableNum(VendContractItem));
    q_Items.dataSourceTable(TableNum(VendContractItem)).addLink(FieldNum(InventTable,ItemId),FieldNum(VendContractItem,ItemId));
    q_Items.dataSourceTable(TableNum(VendContractItem)).joinMode(JoinMode::InnerJoin);
    q_Items.dataSourceTable(TableNum(VendContractItem)).addRange(FieldNum(VendContractItem,RContractAccount)).value(sysQuery::value(RContractTable_RContractAccount.valueStr()));

    super();
}
Может подскажете чего нибудь ?
спасибо за ранее
Старый 26.05.2008, 15:29   #2  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Попробуйте что-то вроде этого:
X++:
    QueryBuildDataSource    qbds;
;
    qbds = this.query().dataSourceTable(TableNum(InventTable));
    qbds = qbds.addDataSource(TableNum(VendContractItem));
    qbds.addLink(FieldNum(InventTable,ItemId),FieldNum(VendContractItem,ItemId));
    qbds.joinMode(JoinMode::InnerJoin);
    qbds.addRange(FieldNum(VendContractItem,RContractAccount)).value(sysQuery::value(RContractTable_RContractAccount.valueStr()));

    super();
Старый 26.05.2008, 15:34   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Это одно и то же.
Учтите, что этот код будет вызываться каждый раз при выполнении считывания данных (executeQuery), а значит будет добавляться все больше и больше источников.

А почему вы не хотите добавить источник еще один на форму?
Если таки хотите это сделать из кода, может перенесите весь этот код (за исключением фильтрации) в метод init источника InventTable. И перед фильтрацией ищите сперва существующий фильтра, а только если не найден создавайте новый.
За это сообщение автора поблагодарили: Proid (1).
Старый 26.05.2008, 15:45   #4  
Proid is offline
Proid
Участник
 
5 / 10 (1) +
Регистрация: 26.05.2008
в init() нет необходимости добавлять, так же как и добавление dataSource на форму - там возникают не понятные "глючи". На форме связано и так много dataSource'ов, и все привязаны к InventTable. пробовал не в executeQuery создавать - результата ноль. Если явно задать для примера номенклатуру - отрабатывает нормально, но вот джойнить VendContractItem ни в какую не хочет
Старый 27.05.2008, 07:38   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Proid Посмотреть сообщение
пробовал не в executeQuery создавать - результата ноль.
Не понятно.... Т.е. прописываешь на форме датасорс, джойнишь, а он всё равно не привязывается? Смотрел, что получается в запросе к БД? Хоть что-то же там должно появится... Приведи сюда, какой SQL получается.

ЗЫ имхо,слишком мало информации, чтоб понять в чём дело...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Proid (1).
Старый 27.05.2008, 07:48   #6  
ViV is offline
ViV
Axapta Retail User
Самостоятельные клиенты AX
Axapta Retail User
 
200 / 79 (3) ++++
Регистрация: 14.09.2005
У меня ваш код чудесно работает. (Хотя конечно в идеале его нужно в init() или все-таки на форму - что у вас там за глюки?).
Возможно у вас значение RContractTable_RContractAccount.valueStr() не корректно - поэтому вы записи не видите?
Ну и советую войти в группу пользователей Axapta Retail
За это сообщение автора поблагодарили: Proid (1).
Старый 27.05.2008, 09:20   #7  
Proid is offline
Proid
Участник
 
5 / 10 (1) +
Регистрация: 26.05.2008
SELECT FIRSTFAST * FROM InventTable WHERE VendContractItem.ItemId=InventTable.ItemId EXISTS JOIN FIRSTFAST * FROM InventItemRangeRef WHERE InventTable.ItemRangeIdRef = InventItemRangeRef.RangeIdRef

Странно, но почему этот запрос формируется Аксаптой ... Связь InventTable с InventItemRangeRef и то через другую таблицу только на датасорсах. Вообще задача такая - переделать добавление из классификатора с фильтрацие по договорам. Если делать через добавления датасорса и установкой связи inner join - отрабатывает нормально, но уже существующий функциал дает сбой с первой записью. Ковыряться довольно муторно, вот и решил может программно выбирать записи в inventTable. Но чувствую, придется ковыряться именно в работе фунционала классификатора.
Теги
executequery, select, запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связь таблиц CustPackingSlipTrans и SalesLine Ruff DAX: Программирование 4 06.09.2005 16:09
Связь таблиц InventTrans и PurchLine Pustik DAX: Программирование 2 25.11.2004 12:23
Невидимая связь двух таблиц в формах 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, время: 21:02.