2016-10-11 6 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

좋아, 시도 및 검색하고 다시 시도를 많이 후 나는이에 도착 : 그것은 지금 작동

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에서 그 꽤 못생긴 범위를 없애려고합니다.