İki Query ile fatch örneği

Bir fatch örneği paylaşıyorum.

FDInventTransDim tablosu datasourcta group by yapılmış şekilde mevcut

Fatch metodumuza bakalım 

public boolean fetch()
{
    boolean                                        ret;
    Query                                            q;
    QueryRun                                    qRun;
    FDInventTransDim                 fDInventTransDim;
    FDInventTransDim                 tmpFDInventTransDim;
    QueryBuildDataSource          qBd,qbdsTmp;
    QueryBuildRange                     qBr,qbrTmp;
    Query                                            qTmp;
    QueryRun                                    qRunTmp;

    ;

    ret = true;  //super();

    q = element.query();

    qTmp = new Query(q);

    qbdsTmp = qTmp.dataSourceTable(tablenum(FDInventTransDim));
    qbdsTmp.addSelectionField(fieldnum(FDInventTransDim,Qty),SelectionField::Sum);

//ikinci bir qyery oluşturuyoruz çünki datasourctan gelen kriterleri ona atamak istiyoruz

    qbd = q.dataSourceTable(tablenum(FDInventTransDim));
    qBr = qBd.addRange(fieldnum(FDInventTransDim,DatePhysical));
    qBr.value(queryRange(startDate,endDate));

// başlangıç ve bitiş tarihlerine göre kriter veriyoruz

    qRun = new QueryRun(q);

    while(qRun.next())
    {
        FDInventTransDim = qRun.get(tablenum(FDInventTransDim));

//  findOrCreateRange ile birinci quetydeki 4 alanın değeri ikinci query e atıyoruz

        SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,ItemId)).value(SysQuery::value(FDInventTransDim.ItemId));
        SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventSiteId)).value(SysQuery::value(FDInventTransDim.InventSiteId));
        SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventBatchId)).value(SysQuery::value(FDInventTransDim.InventBatchId));
        SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,InventLocationId)).value(SysQuery::value(FDInventTransDim.InventLocationId));

        qbrTmp = SysQuery::findOrCreateRange(qbdsTmp,fieldnum(FDInventTransDim,DatePhysical));

// tarihten önceki toplamı buluyoruz

        qbrTmp.value(SysQuery::valueUnlimited());
        qbrTmp.value(strfmt(‘(DatePhysical < %1)’ , Date2StrXpp(FDInventTransDim.DatePhysical)));
        qRunTmp = new QueryRun(qTmp);
        onhand = 0;
        while(qRunTmp.next())
        {
           tmpFDInventTransDim = qruntmp.get(tablenum(FDInventTransDim));
           onhand +=tmpFDInventTransDim.Qty;
        }

/ tarihteki toplamı buluyoruz

        qbrTmp.value(SysQuery::valueUnlimited());
        qbrTmp.value(queryValue(FDInventTransDim.DatePhysical));
        qRunTmp = new QueryRun(qTmp);
        outputQty = 0;
        inputQty = 0;
        while(qRunTmp.next())
        {
           tmpFDInventTransDim = qruntmp.get(tablenum(FDInventTransDim));
           if(tmpFDInventTransDim.Qty <0)
                outputQty +=tmpFDInventTransDim.Qty;
           else
                inputqty = tmpFDInventTransDim.Qty;
        }

// Genel toplamı buluyoruz

        total = onhand + inputqty + outputQty;

//En son satırımızı yazdırıyoruz.

        element.send(FDInventTransDim);
    }

    return ret;
}

biraz karışık ancak çok  işe yarayabilecek bir örnek olduğunu düşünüyorum.

Selamlar.

 
Comment are closed.