Тема: Filter
Показать сообщение отдельно
Старый 13.09.2011, 13:02   #11  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
?
Владимир, спасибо.
Это были попытки.. видимо уже не совсем удачные от замыленности..
На самом деле форма изначльно не имеет этот датасорс, я его убрала и пытаюсь навесить программно.
Навесить фильтр пытаюсь кнопкой, считывая значение дисплэя для range
Суть проблемы, что в гриде остаются строки не отфильтрованные
Написала джоб, который интерпретирует запрос кверика, вывела строки в инфолог - все как надо, - остаются только строки, которые нужны по фильтру...
Аналайзер и студия не доступны для использования

код кнопки:
X++:
void clicked()
{
    str         strSetText = 'PC.Номер счета поставщика';
    str         strUnSetText = 'Снять "PC.Номер счета поставщика"';
    IT_VendInvoice4PaymId            invoice4PaymId;
    ;
    invoice4PaymId = custConfirmTrans.IT_invoice4PaymFromInvoiceReg();
    super();
    info(invoice4PaymId);
    if(!bInvoice4PaymFromInvoiceRegFilterSet)
    {
        if (!Invoice4PaymFromInvoiceRegFilter)
            element.setInvoice4PaymFromInvoiceRegFilter();
        Invoice4PaymFromInvoiceRegFilter.value(SysQuery::value(invoice4PaymId));
        custConfirmTrans_ds.query().recordLevelSecurity(false);
        bInvoice4PaymFromInvoiceRegFilterSet = true;
        Invoice4PaymFromInvoiceReg.text(strUnSetText);
    }
    else
    {
        Invoice4PaymFromInvoiceRegFilter.value(SysQuery::valueUnlimited());
        custConfirmTrans_ds.query().recordLevelSecurity(true);
        bInvoice4PaymFromInvoiceRegFilterSet = false;
        Invoice4PaymFromInvoiceReg.text(strSetText);
    }
    custConfirmTrans_ds.executeQuery();
//    custConfirmTrans_ds.first();
//    while (custConfirmTrans_ds.next())
//    {
//        info (custConfirmTrans.IT_invoice4PaymFromInvoiceReg());
//    }
}
код метода создающего фильтр:
X++:
void setInvoice4PaymFromInvoiceRegFilter()
{
    QueryBuildDataSource        queryCustConfirmTrans;
    QueryBuildDataSource        queryInvoiceRegLine;
    QueryBuildDataSource        queryInvoiceReg;
    Query                       q = new Query(custConfirmTrans_ds.queryRun().query());
    QueryRun                    queryRun;

    ;
    queryCustConfirmTrans            = q.dataSourceTable(tablenum(custConfirmTrans));

    q.dataSourceTable(tablenum(custConfirmTrans)).fetchMode(QueryFetchMode::One2One);
    q.dataSourceTable(tablenum(InventTable)).fetchMode(QueryFetchMode::One2One);
    q.dataSourceTable(tablenum(CustConfirmJour)).fetchMode(QueryFetchMode::One2One);
    q.dataSourceTable(tablenum(RContractTable)).fetchMode(QueryFetchMode::One2One);

    queryInvoiceRegLine              = queryCustConfirmTrans.addDataSource(tablenum(IT_InvoiceRegLine));
    queryInvoiceRegLine.fetchMode(QueryFetchMode::One2One);
    queryInvoiceRegLine.addLink(fieldnum(custConfirmTrans, IT_PurchInventTransId), fieldnum(IT_InvoiceRegLine, InventTransId));
    queryInvoiceRegLine.joinMode(joinMode::ExistsJoin);

    queryInvoiceReg                  = queryInvoiceRegLine.addDataSource(tablenum(IT_InvoiceRegJour));
    queryInvoiceReg.fetchMode(QueryFetchMode::One2One);
    queryInvoiceReg.addLink(fieldnum(IT_InvoiceRegLine, InvoiceRegId), fieldnum(IT_InvoiceRegJour, InvoiceRegId));
    queryInvoiceReg.joinMode(joinMode::ExistsJoin);

//    queryInvoiceReg = queryCustConfirmTrans.addDataSource(tablenum(IT_InvoiceRegJour));
//    queryInvoiceReg.fetchMode(QueryFetchMode::One2One);
//    queryInvoiceReg.addLink(fieldnum(custConfirmTrans, IT_PurchId), fieldnum(IT_InvoiceRegJour, PurchId));
//    queryInvoiceReg.joinMode(joinMode::ExistsJoin);

    Invoice4PaymFromInvoiceRegFilter = queryInvoiceReg.addRange(fieldNum(IT_InvoiceRegJour, Invoice4PaymId));

//    queryRun = new QueryRun(q);
//
//    custConfirmTrans_ds.queryRun(queryRun);

    custConfirmTrans_ds.query(q);
}
текст запроса, уходящего на сервер, до наложения фильтра:
PHP код:
SELECT FROM CustConfirmTrans 

JOIN SPIInventProducerId FROM InventTable 
    WHERE CustConfirmTrans
.ItemId InventTable.ItemId 

JOIN 
FROM CustConfirmJour 
    WHERE CustConfirmTrans
.SalesId CustConfirmJour.SalesId 
    
AND CustConfirmTrans.ConfirmId CustConfirmJour.ConfirmId 
    
AND CustConfirmTrans.ConfirmDate CustConfirmJour.ConfirmDate 

JOIN 
FROM RContractTable 
    WHERE CustConfirmJour
.InvoiceAccount RContractTable.RContractPartnerCode 
    
AND CustConfirmJour.IT_RContractCode RContractTable.RContractCode 
    
AND CustConfirmJour.IT_RContractAccount RContractTable.RContractAccount 
    
AND ((RContractPartnerType 0)) 
текст запроса после наложения фильтра:
PHP код:
SELECT FROM CustConfirmTrans 
JOIN SPIInventProducerId FROM InventTable 
    WHERE CustConfirmTrans
.ItemId InventTable.ItemId 
JOIN 
FROM CustConfirmJour 
    WHERE CustConfirmTrans
.SalesId CustConfirmJour.SalesId 
    
AND CustConfirmTrans.ConfirmId CustConfirmJour.ConfirmId 
    
AND CustConfirmTrans.ConfirmDate CustConfirmJour.ConfirmDate 
JOIN 
FROM RContractTable 
    WHERE CustConfirmJour
.InvoiceAccount RContractTable.RContractPartnerCode 
    
AND CustConfirmJour.IT_RContractCode RContractTable.RContractCode 
    
AND CustConfirmJour.IT_RContractAccount RContractTable.RContractAccount 
    
AND ((RContractPartnerType 0)) 
EXISTS JOIN FROM IT_InvoiceRegLine 
    WHERE CustConfirmTrans
.IT_PurchInventTransId IT_InvoiceRegLine.InventTransId 
EXISTS JOIN 
FROM IT_InvoiceRegJour 
    WHERE IT_InvoiceRegLine
.InvoiceRegId IT_InvoiceRegJour.InvoiceRegId 
    
AND ((Invoice4PaymId N'drgd')) 
аналайзер нет возможности использовать..
код моего проверочного джоба (правильно отфильтровывает):
X++:
static void Job338(Args _args)
{
    custConfirmTrans        custConfirmTrans;
    InventTable             InventTable;
    CustConfirmJour         CustConfirmJour;
    RContractTable          RContractTable;
    IT_InvoiceRegLine       IT_InvoiceRegLine;
    IT_InvoiceRegJour       IT_InvoiceRegJour;
    ;

    while SELECT CustConfirmTrans
    JOIN SPIInventProducerId FROM InventTable
        WHERE CustConfirmTrans.ItemId == InventTable.ItemId

    JOIN CustConfirmJour
        WHERE CustConfirmTrans.SalesId      == CustConfirmJour.SalesId
        && CustConfirmTrans.ConfirmId       == CustConfirmJour.ConfirmId
        && CustConfirmTrans.ConfirmDate     == CustConfirmJour.ConfirmDate

    JOIN RContractTable
        WHERE CustConfirmJour.InvoiceAccount        == RContractTable.RContractPartnerCode
        && CustConfirmJour.IT_RContractCode         == RContractTable.RContractCode
        && CustConfirmJour.IT_RContractAccount      == RContractTable.RContractAccount
        && ((RContractTable.RContractPartnerType    == 0))

    EXISTS JOIN IT_InvoiceRegLine
           WHERE CustConfirmTrans.IT_PurchInventTransId == IT_InvoiceRegLine.InventTransId

    EXISTS JOIN IT_InvoiceRegJour
           WHERE IT_InvoiceRegLine.InvoiceRegId     == IT_InvoiceRegJour.InvoiceRegId
           &&    ((IT_InvoiceRegJour.Invoice4PaymId == 'drgd'))
    {
        info (custConfirmTrans.IT_invoice4PaymFromInvoiceReg());
    }

//    select count(RecId) from custConfirmTrans;
//    info(strfmt('итого %1', custConfirmTrans.RecId));
}
upd: вложила форму
Вложения
Тип файла: xpo Form_IT_PurchRequestLine130911.xpo (75.3 Кб, 380 просмотров)
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.

Последний раз редактировалось jeky; 13.09.2011 в 13:55. Причина: добавила вложение