Показать сообщение отдельно
Старый 24.05.2013, 17:26   #22  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Если джойнить 2 таблицы - всё замечательно, когда пытаюсь приджойнить третью - qbds валится в null.



X++:
Queryrun main_query(boolean _count_query = false)
{

    Query query   =      new Query();
    QueryBuildDataSource qbds;
   
    ;
    qbds  = query.addDataSource(tablenum(VendInvoiceTrans));
    qbds.addSortField(fieldnum(VendInvoiceTrans,ItemId));
    qbds.addSortField(fieldnum(VendInvoiceTrans,InternalSp));
    qbds.addSelectionField(fieldnum(VendInvoiceTrans,Qty), SelectionField::Sum);
    qbds.orderMode(OrderMode::GroupBy);
    qbds  = qbds.addDataSource(tablenum(VendSpListTrans));
    qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendInvoiceTrans,InternalSp));
    qbds.joinMode(JoinMode::InnerJoin);
    
    qbds = query.dataSourceTable(tableNum(VendSpListJour));
    qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendSpListJour,InternalSP));
    qbds.joinMode(JoinMode::InnerJoin);
    
    if (datefromstr && datetostr)
    {
        qbds.addRange(fieldnum(VendSpListJour,SpDate)).value(SysQuery::range(datefrom.value(),dateto.value()));
    }
    if (vendaccountstr)
    {
        qbds.addRange(fieldnum(VendSpListJour,OrderAccount)).value(SysQuery::value(vendaccountstr));
    }
     //если введён регистранионный номер договора
    if (rcontractaccountstr)
    {
        qbds.addRange(fieldnum(VendSpListJour, RcontractAccount)).value(SysQuery::value(rcontractaccount.value()));
    }
    //если введён Владелец
    if (emplidstr)
    {
        qbds.addRange(fieldnum(VendSpListJour, Emplid)).value(SysQuery::value(emplid.value()));
    }
    switch(spclosedstr)
    {
        case (AllOpenPosted::All):
           qbds.addRange(fieldnum(VendSpListJour,SpClosed));
        break;

        case (AllOpenPosted::Open):
           qbds.addRange(fieldnum(VendSpListJour,SpClosed)).value('1');
        break;

        case (AllOpenPosted::Posted):
           qbds.addRange(fieldnum(VendSpListJour,SpClosed)).value('0');
        break;
        default:
        break;
    }
    qbds = query.dataSourceTable(tablenum(VendInvoiceTrans));
    
    if (_count_query)
    {
        qbds.addSelectionField(fieldnum(VendinvoiceTrans,RecId), SelectionField::Count);
    }
    
    qbds = query.dataSourceTable(tablenum(VendSpListTrans));

    return (new QueryRun(query));
   
}
валится на qbds = query.dataSourceTable(tableNum(VendSpListJour));
qbds.addLink(fieldnum(VendSpListTrans,InternalSp),fieldnum(VendSpListJour,InternalSP));

Если заккоментировать весь кусок от qbds = query.dataSourceTable(tableNum(VendSpListJour));
и до конца switch - всё замечательно работает.

Уважаемый maldini, не знаете, в чём причина?