Показать сообщение отдельно
Старый 08.09.2005, 17:46   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Зачем перебор в цикле?

PHP код:
table1      tbl;
query       q = new Query();
QueryRun    qr;
;

Q.addDataSource(tablenum(Table1));
Q.dataSourceTable(tablenum(Table1)).addDataSource(tablenum(Table2));
Q.dataSourceTable(tablenum(Table2)).joinMode(JoinMode::InnerJoin);
Q.dataSourceTable(tablenum(Table2)).addLink(fieldnum(table1ItemId), fieldnum(table2ItemId));

Q.addDataSource(tablenum(Table1));

Q.dataSourceTable(tablenum(Table1), 2).addDataSource(tablenum(Table3));
Q.dataSourceTable(tablenum(Table3)).joinMode(JoinMode::InnerJoin);
Q.dataSourceTable(tablenum(Table3)).addLink(fieldnum(table1ItemId), fieldnum(table3ItemId));

Q.dataSourceTable(tablenum(Table3)).addDataSource(tablenum(Table2));
Q.dataSourceTable(tablenum(Table2), 2).joinMode(JoinMode::NoExistsJoin);
Q.dataSourceTable(tablenum(Table2), 2).addLink(fieldnum(table3ItemId), fieldnum(table2ItemId));

qr = new QueryRun(q);
while (
qr.next())
{
    
tbl qr.getNo(1);
    if (!
tbltbl qr.getNo(3);
    
info(tbl.ItemId);

В принципе можно разбить на два отдельных запроса. Минусы - записи отсортированы сначала по table2.itemId, а затем по table3.itemId. И для просмотра неудобно.

По повод view - каким образом объединять ее с table1? Ведь в результате получим соответствующие увеличение кол-ва записей для датасорса.

Единственное верное решение в данном случае - использование UNION. Как грязный xак - можно подправить view на сервере
__________________
Axapta v.3.0 sp5 kr2