![]() |
#12 |
Участник
|
Сценарий в AX 4.0
Цитата:
Сообщение от AndyD
![]() Хотя, с другой стороны, если не использовать allowCrossCompany() и связь нужна только между двумя компаниями, то можно сделать так
X++: SalesLine SalesLineA; SalesLine SalesLineB; QueryRun qr; ; SalesLineA.company('A'); SalesLineB.company('B'); query = new Query(); qbsSalesLineCentral = query.addDataSource(tablenum(SalesLine), "SalesLineCentral"); qbsSalesLineOrig = qbsSalesLineCentral.addDataSource(tablenum(SalesLine), "SalesLineOrig"); qbsSalesLineOrig.addLink(fieldnum(salesline, recid), fieldnum(salesline, SBA_CentralSalesLine), "SalesLineCentral"); qbsSalesLineOrig.addRange(fieldnum(salesLine, SBA_CentralSalesLine)).value(SysQuery::valueNotEmptyString()); qr = new QueryRun(query); qr.setCursor(SalesLineA, 1); qr.setCursor(SalesLineB, 2); как вариант реализации - использование метода QueryBuildDataSource.company( CompanyId )? Тестировался примерно похожий сценарий на AX 4.0: имеются 2 компании DMO и TST, которые не входят в виртуальную. В справочнике групп складских моделей (InventModelGroup) помимо всего прочего есть группа с кодом 'Основная' (своя в каждой из компаний) и в справочнике номеклатур (InventTable) свой набор позиций с этой группой. В компании TST выполняется выборка данных: X++: select inventTable where inventTable.ItemType == ItemType::BOM join inventModelGroup where inventModelGroup.ModelGroupId == inventTable.ModelGroupId && inventModelGroup.InventModel == InventModel::FIFO X++: static void jbCheckCompany(Args _args) { QueryBuildDataSource qbdsInventTable ; QueryBuildDataSource qbdsInventModelGroup; Query query = new Query() ; void inventTableFromQuery( Query _query ) { InventTable inventTable ; InventModelGroup inventModelGroup ; QueryRun queryRun ; CompanyId companyIdInventTable = _query.dataSourceTable( tableNum( InventTable ) ).company() ; ; setPrefix( strfmt( "Company: %1", companyIdInventTable ? companyIdInventTable : curext() ) ) ; queryRun = new QueryRun( _query ) ; while( queryRun.next() ) { inventTable = queryRun.get( tableNum( InventTable ) ) ; inventModelGroup = queryRun.get( tableNum( InventModelGroup ) ) ; info( strfmt( "InventTable [%1]: %2 - %3 (InventModelGroup [%4]: %5)", inventTable.dataAreaId, inventTable.ItemId, inventTable.ItemName, inventModelGroup.dataAreaId, inventModelGroup.ModelGroupId ) ) ; } } ; qbdsInventTable = query.addDataSource( tableNum( InventTable ) ) ; qbdsInventTable.addSelectionField( fieldNum( InventTable, ItemId ) ) ; qbdsInventTable.addSelectionField( fieldNum( InventTable, ItemName ) ) ; qbdsInventTable.addRange( fieldNum( InventTable, ItemType ) ).value( SysQuery::value( ItemType::BOM ) ) ; qbdsInventModelGroup = qbdsInventTable.addDataSource( tableNum( InventModelGroup ) ) ; qbdsInventModelGroup.fetchMode( QueryFetchMode::One2One ) ; qbdsInventModelGroup.addLink( fieldNum( InventTable, ModelGroupId ), fieldNum( InventModelGroup, ModelGroupId ) ) ; qbdsInventModelGroup.addSelectionField( fieldNum( InventModelGroup, ModelGroupId ) ) ; qbdsInventModelGroup.addRange( fieldNum( InventModelGroup, InventModel ) ).value( SysQuery::value( InventModel::FIFO ) ) ; info( 'InventTable cross company select' ) ; inventTableFromQuery( query ) ; query.dataSourceTable( tableNum( InventTable ) ).company( 'dmo' ) ; inventTableFromQuery( query ) ; } Цитата:
InventTable cross company select
- Company: tst -- InventTable [tst]: P-2000/B - Окрашенная подставка 2000 Черный (InventModelGroup [tst]: Основная) -- InventTable [tst]: P-2000/R - Окрашен. подставка 2000 красный (InventModelGroup [tst]: DEF) -- InventTable [tst]: P-2000/W - Окрашен. подставка 2000 белый (InventModelGroup [tst]: DEF) -- InventTable [tst]: PB-модел_ламп - Включено моделирование лампы (InventModelGroup [tst]: DEF) -- InventTable [tst]: PB-Моделир_абажура - Включено моделирование абажура (InventModelGroup [tst]: DEF) -- InventTable [tst]: А-абажур/R30 - Абажур для лампы, красный, 30 см (InventModelGroup [tst]: DEF) - Company: dmo -- InventTable [dmo]: 1 - Светильник Ramzes (InventModelGroup [tst]: Основная) -- InventTable [dmo]: 2 - Светильник Ramzes (InventModelGroup [tst]: Основная) -- InventTable [dmo]: Лампа - Лампа для светильника (InventModelGroup [tst]: Основная) -- InventTable [dmo]: с1_Кофеварка007 - Кофеварка007 (InventModelGroup [tst]: Основная) -- InventTable [dmo]: Светильник Ramzes - Светильник Ramzes (InventModelGroup [tst]: Основная) -- InventTable [dmo]: Светильник RamzesSup - Светильник RamzesSuper (InventModelGroup [tst]: Основная) Цитата:
SELECT A.ITEMID,A.ITEMNAME,A.RECID,B.MODELGROUPID,101090
FROM INVENTTABLE A,INVENTMODELGROUP B WHERE ((A.DATAAREAID=N'tst') AND (A.ITEMTYPE=1)) AND ((B.DATAAREAID=N'tst') AND ((B.INVENTMODEL=0) AND (A.MODELGROUPID=B.MODELGROUPID))) ORDER BY A.DATAAREAID,A.ITEMTYPE,A.ITEMID Цитата:
SELECT A.ITEMID,A.ITEMNAME,A.RECID,B.MODELGROUPID,101090
FROM INVENTTABLE A,INVENTMODELGROUP B WHERE ((A.DATAAREAID=N'dmo') AND (A.ITEMTYPE=1)) AND ((B.DATAAREAID=N'tst') AND ((B.INVENTMODEL=0) AND (A.MODELGROUPID=B.MODELGROUPID))) ORDER BY A.DATAAREAID,A.ITEMTYPE,A.ITEMID
__________________
Dynamics AX 4.0 SP2 |
|
|
За это сообщение автора поблагодарили: AndyD (5). |