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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.06.2009, 12:04   #12  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
Сценарий в 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);
Этот код будет работать и в Ax 3.0 тоже

как вариант реализации - использование метода 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
тестовый job:
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
Миниатюры
Нажмите на изображение для увеличения
Название: inventtable_tst.JPG
Просмотров: 338
Размер:	49.4 Кб
ID:	4806   Нажмите на изображение для увеличения
Название: inventtable_dmo.JPG
Просмотров: 370
Размер:	51.3 Кб
ID:	4807  

Нажмите на изображение для увеличения
Название: inventtable_query.JPG
Просмотров: 348
Размер:	78.7 Кб
ID:	4809  
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: AndyD (5).
Теги
ax2009, ax3.0, company, компания

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Холдинг как одна или несколько компаний в Аксапте? skof DAX: Прочие вопросы 27 31.07.2009 09:47
Произвольное объединение компаний для отчетов и операций в них gl00mie DAX: Программирование 11 07.08.2006 14:22
Данный из разных компаний в WebForm kashperuk DAX: Программирование 0 14.06.2006 01:11
Копирование компаний zarik DAX: Прочие вопросы 4 08.06.2006 17:32
Данные из всех компаний zipo DAX: Программирование 18 16.05.2006 23:26

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:19.