Цитата:
Сообщение от
lev
ещё немного подумал, и решил что совсем красиво будет так:
X++:
qbds1.addRange( fieldnum( InventTrans, DatePhysical ) ).value(SysQuery::range(dBgn, dateMax()));
Спасибо за советы . Попробывал такое собрать :
PHP код:
q = element.query();
qr = new QueryRun( q );
qbds1 = query.dataSourceTable( tableNum( InventSum ) );
qrn4 = qbds1.addRange( fieldNum( inventSum, InventLocationId ) );
qrn4.value( cInvLoc );
qbds2 = query.addDataSource( tableNum( InventTrans ), "InventTrans" );
qbds2.joinMode( JoinMode::ExistsJoin );
qbds2.firstOnly( true );
qrn1 = qbds2.addRange( fieldNum( InventTrans, ItemId ) );
qrn1.value( strFmt( 'inventTrans.ItemId == inventSum.ItemId' ) );
qrn2 = qbds2.addRange( fieldNum( InventTrans, InventDimId ) );
qrn2.value( strFmt( 'inventTrans.InventDimId == inventSum.InventDimId' ) );
qrn3 = qbds2.addRange( fieldNum( InventTrans, DatePhysical ) );
qrn3.value( SysQuery::range( dBgn, dateMax() ) );
Ето возвращяет такие селекты :
SELECT * FROM InventSum WHERE InventDim.inventDimId = InventSum.InventDimId AND ((ItemId = 1062A)) AND ((InventLocationId = LS nukain.50)) JOIN * FROM InventTable WHERE InventSum.ItemId = InventTable.ItemId
SELECT FIRSTONLY * FROM InventTrans WHERE ((ItemId = inventTrans.ItemId == inventSum.ItemId)) AND ((inventDimId = inventTrans.InventDimId == inventSum.InventDimId)) AND ((DatePhysical>=2010.01.01 AND DatePhysical<=2153.12.31))
Но - while ( qr.next() ) - пустой ... А по простому селекту ( в первом сообщении while select ... ) - все работает ... Чего ещё нехватает ?