Tuesday, 13 January 2015

Segments of ledger dimensions

static void SR_Extract_SegmentName_values(Args _args)
{
    #define.CostCenter("CostCenter")
    Query                                   query;
    QueryRun                                queryRun;
    QueryBuildDataSource                    qbds,qbdsDate;
    GeneralJournalAccountEntry              generalJournalAccountEntry;
    GeneralJournalEntry                     generalJournalEntry;
    container                               value = conNull();
    OMOperatingUnit                         omou;

    // Dimension
    DimensionStorage        dimensionStorage;

    // Segment
    int                     segmentCount, segmentIndex;
    DimensionStorageSegment segment;
    str 100                 segmentName, MainAccount, segmentValue;
    container               segments;
    query                   = new Query();
    qbds                    = query.addDataSource(tableNum(GeneralJournalAccountEntry));

    // Sum functional and transaction amounts

    qbds.addSelectionField(fieldNum(GeneralJournalAccountEntry, AccountingCurrencyAmount), SelectionField::Sum);
    qbds.addSelectionField(fieldNum(GeneralJournalAccountEntry, TransactionCurrencyAmount), SelectionField::Sum);
    qbds.addGroupByField(fieldNum(GeneralJournalAccountEntry, LedgerDimension));
    qbdsDate = qbds.addDataSource(tableNum(GeneralJournalEntry));
    qbdsDate.joinMode(JoinMode::InnerJoin);
    qbdsDate.fetchMode(QueryFetchMode::One2One);
    qbdsDate.addLink(fieldNum(GeneralJournalAccountEntry, GeneralJournalEntry), fieldNum(GeneralJournalEntry, RecId));
    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        generalJournalAccountEntry = queryRun.get(tableNum(generalJournalAccountEntry));
        // Get dimension storage
        dimensionStorage = DimensionStorage::findById(GeneralJournalAccountEntry.LedgerDimension);
        if (dimensionStorage == null)
        {
            throw error("@SYS83964");
        }
        // Add segments for all hierarchies
        segments = conNull();
        // Get segments
        segmentCount = dimensionStorage.segmentCountForHierarchy(1);
        for (segmentIndex = 1; segmentIndex <= segmentCount; segmentIndex++)
        {
            // Get segment
            segment = dimensionStorage.getSegmentForHierarchy(1, segmentIndex);
            if (segment.parmDimensionAttributeValueId() != 0)
            {
                // Get segment name
                segmentName = DimensionAttribute::find(DimensionAttributeValue::find(segment.parmDimensionAttributeValueId        ()).DimensionAttribute).Name;

                // Add segment value
                segmentValue = segment.parmDisplayValue();

                if (segmentIndex == 1)
                {
                    MainAccount = segmentValue;
                }

                if (segmentName == #CostCenter)
                {
                   info("Main account – " +  MainAccount);
                   info("Segment Name – " + segmentName);
                   info("Cost center – "  + segmentValue);
                   info(strFmt(‘Total TransactionCurrency amount – %1′,generalJournalAccountEntry.TransactionCurrencyAmount));
                   info(strFmt(‘Total AccountingCurrency amount – %1′, generalJournalAccountEntry.AccountingCurrencyAmount));
                   info("______________________________________");
                }
            }
        }
    }
}

No comments:

Post a Comment