2016-10-11 9 views
1

私はクエリの最初の部分にGeneralJournalEntryGeneralJournalAccountEntryを参加させています。私はDimensionProviderクラスを正しく使用する方法がわからないので、現在はMainAccountをハードコーディングしています。addAttributeRangeToQueryは結果にレコードを複製します

query = new Query(); 

qbdsGeneralJournalAccountEntry = query.addDataSource(tableNum(GeneralJournalAccountEntry)); 
qbr1 = qbdsGeneralJournalAccountEntry.addRange(fieldNum(GeneralJournalAccountEntry, LedgerAccount)); 
qbr1.value(queryValue('111111') + '*'); 

qbdsGeneralJournalEntry = qbdsGeneralJournalAccountEntry.addDataSource(tableNum(GeneralJournalEntry)); 
qbdsGeneralJournalEntry.relations(true); 
qbdsGeneralJournalEntry.joinMode(JoinMode::InnerJoin); 


if (_fromDate || _toDate) 
{ 
    qbdsGeneralJournalEntry.addRange(fieldnum(GeneralJournalEntry, AccountingDate)).value(queryRange(_fromDate, _toDate)); 
    qbdsGeneralJournalEntry.addSortIndex(indexNum(GeneralJournalEntry, LedgerAccountingDateIdx)); 
    qbdsGeneralJournalEntry.indexIsHint(true); 
} 



dimensionProvider = new DimensionProvider(); 
dimensionProvider.addAttributeRangeToQuery(
        query 
        , qbdsGeneralJournalAccountEntry.name() 
        , fieldStr(GeneralJournalAccountEntr, LedgerDimension) 
        , DimensionComponent::DimensionAttribute 
        , _costCenterNumber 
        , "CostCenter"); 

私のすべての行が重複している..私は私が再びGeneralJournalAccountEntryデータソースを追加していだと思うし、私はこの動作を持っている理由です。

while qr.nextセクション内のコストセンター値を確認できますが、上記の方法を使用して正しく行う方法はありますか:addAttributeRangeToQuery

答えて

1

[OK]を、しようと検索して、もう一度試みて、多くの後、私はこれになった:それが動作するようになりまし

select firstOnly dimAttr where dimAttr.BackingEntityType == tableNum(DimAttributeOMCostCenter); 
dimAttrNameCostCenter = dimAttr.Name; 

query = new Query(); 


qbdsGeneralJournalEntry = query.addDataSource(tableNum(GeneralJournalEntry)); 

qbdsGeneralJournalAccountEntry = qbdsGeneralJournalEntry.addDataSource(tableNum(GeneralJournalAccountEntry)); 
qbdsGeneralJournalAccountEntry.relations(true); 
qbdsGeneralJournalAccountEntry.joinMode(JoinMode::InnerJoin); 

qbr1 = qbdsGeneralJournalAccountEntry.addRange(fieldNum(GeneralJournalAccountEntry, LedgerAccount)); 
qbr1.value(queryValue('111111') + '*'); 


if (_fromDate || _toDate) 
{ 
    qbdsGeneralJournalEntry.addRange(fieldnum(GeneralJournalEntry, AccountingDate)).value(queryRange(_fromDate, _toDate)); 
    qbdsGeneralJournalEntry.addSortIndex(indexNum(GeneralJournalEntry, LedgerAccountingDateIdx)); 
    qbdsGeneralJournalEntry.indexIsHint(true); 
} 


dimensionProvider = new DimensionProvider(); 

dimensionProvider.addAttributeRangeToQuery(query 
             , qbdsGeneralJournalAccountEntry.name() 
             , fieldStr(GeneralJournalAccountEntry, LedgerDimension) 
             , DimensionComponent::DimensionAttribute 
             , _costCenterNumber 
             , dimAttrNameCostCenter 
             , false); 

!!私はただのデータソースを切り替えた:

  1. まずGeneralJournalEntry
  2. GeneralJournalAccountEntryを追加し、その「母/父/ヘッダー」テーブルまたはものは何でも、それは:)、つまりqbdsGeneralJournalEntryあり、それに参加を追加します。

これ以上双子はなく、重複はありません。私はまだ内部結合がこのように動作しているのだろうかと疑問に思っています。

明日私はMainAccountにaddAttributeRangeToQueryを使用して、LedgerAccountのかなり醜い範囲を取り除こうとします。

関連する問題