Показать сообщение отдельно
Старый 22.01.2018, 21:23   #3  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
class VendAccountQueryBuilder

VendTable что per company join c DirPartyTable что cross-company

X++:
public void initialize()
{
    DataAreaId              company;
    VendAccount             vendAccount;
    DirPartyName            vendName;
    Query                   vendAccountQuery;
    QueryBuildDataSource    vendAccountQbds;
    QueryBuildDataSource    dirPartyTableQbds;

    company = this.getArgs().parmCompany();
    vendAccount = this.getArgs().parmVendAccount();
    vendName = this.getArgs().parmVendName();

    vendAccountQuery = new query();

    if(!company)
    {
        //Company cannot be empty
        throw AifFault::Fault("@SYS4007574", #NoSuchCompany);
    }

    vendAccountQuery.allowCrossCompany(true);
    vendAccountQuery.addCompanyRange(SysQuery::value(company));
    vendAccountQbds = vendAccountQuery.addDataSource(tableNum(VendTable));

    vendAccountQbds.orderMode(OrderMode::OrderBy);
    vendAccountQbds.addSelectionField(fieldNum(VendTable, AccountNum));
    vendAccountQbds.addSortField(fieldNum(VendTable, AccountNum));

    if (vendAccount)
    {
        vendAccountQbds.addRange(fieldNum(VendTable,AccountNum)).value(vendAccount);
    }

    dirPartyTableQbds = vendAccountQbds.addDataSource(tableNum(DirPartyTable));
    dirPartyTableQbds.relations(true);
    dirPartyTableQbds.addSelectionField(fieldNum(DirPartyTable, Name));

    if (vendName)
    {
        dirPartyTableQbds.addRange(fieldNum(DirPartyTable, Name)).value(vendName);
    }

    query = vendAccountQuery;
    queryRun = new QueryRun(query);
}