İ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.

Türkiye'nin en doğru, dolu dolu ve hatasız anlatımları ile teknik yazılarına, makalelerine, video'larına, seminerlerine, forum sayfasına ve sektörün önde gelenlerine ulaşabileceğiniz teknik topluluğu, MSHOWTO