Merhaba
Önceki yazımda tarih kontrollü yapının nasıl kurulacağını anlatmıştım. Bu yazımda framework ile gelen sorgu özelliklerinden bahsedeceğim. Resimdeki gibi bir örnek verimiz olsun.

Birinci örneğimiz bu gün için geçerli olan sözleşme kaydını bize verir.
Select ile;
static void FD_ValidTimeState1(Args _args)
{
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
;
while select validTimeState(contractStartDate) FDcontractTable
where FDcontractTable.ContractId == 'CNRT_004'
{
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
Query ile;
static void FD_ValidTimeState3(Args _args)
{
Query query;
QueryRun queryRun;
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
;
query = new Query();
query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
ContractId)).value(queryValue('CNRT_004'));
query.validTimeStateAsOfDate(contractStartDate);
queryRun = new QueryRun(query);
if(queryRun.prompt())
{
while(queryRun.next())
{
FDcontractTable = queryRun.getNo(1);
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
}

İkinci örnekte ise 30 günlük aralıkta kalan bütün sözleşmeleri verir.
Select ile;
static void FD_ValidTimeState2(Args _args)
{
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
TransDate contractEndDate = systemDateGet() + 30;
;
while select validTimeState(contractStartDate , contractEndDate)
FDcontractTable
where FDcontractTable.ContractId == 'CNRT_004'
{
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
Query ile;
static void FD_ValidTimeState4(Args _args)
{
Query query;
QueryRun queryRun;
FDcontractTable FDcontractTable;
TransDate contractStartDate = systemDateGet() ;
TransDate contractEndDate = systemDateGet() + 30;
query = new Query();
query.addDataSource(tableNum(FDcontractTable)).addRange(fieldNum(FDcontractTable,
ContractId)).value(queryValue('CNRT_004'));
query.validTimeStateDateRange(contractStartDate, contractEndDate);
queryRun = new QueryRun(query);
if(queryRun.prompt())
{
while(queryRun.next())
{
FDcontractTable = queryRun.getNo(1);
info(strFmt("%1: %2 - %3",
FDcontractTable.ContractId,
FDcontractTable.ValidFrom,
FDcontractTable.ValidTo));
}
}
}

4. örneği çalıştırdığınızda Query ekranında yeni bir özellik olan Date options ile karşılaşacaksınız. Bu sekmeden 3 tip var. İsimlerinden de anlaşılacağı üzere birincisi şu andaki aktif kaydı verir. İkincisi girilen tarihteki aktif kaydı verir. Üçüncüsü ise aralıktaki aktif kayıtları verir.

Kodda kullanımı gayet güzel olmuş.
Selamlar.