Friday 15 September 2023

Create financial dimension with costcenter(Department, unit…etc):

 Create financial dimension with costcenter(Department, unit…etc): 

Ex: Costcenter financial dimension creation 

public static DimensionDefault createDerivedDimension(String20 _costCenter)

    {

        DimensionAttributeValue dimAttrValue;

        DimensionAttribute      dimAttr;

        str                     dimAttrCCValue;

        DimensionDefault        result;

        boolean                 isDerivedDimension;

                            

        dimAttrCCValue          = _costCenter;

        

        dimAttr                 = DimensionAttribute::findByName("@CCB:Costcenter");

        dimAttrValue            = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttr, dimAttrCCValue, false, true);

                        

        DimensionAttributeValueDerivedDimensions    derivedDim = DimensionAttributeValueDerivedDimensions::findByDimensionAttributeValue(dimAttrValue.DimensionAttribute, dimAttrValue.RecId);

        DimensionAttributeValueSetStorage           defaultDimStorage = new DimensionAttributeValueSetStorage();

        DimensionHierarchy                          dimHierarchy = DimensionAttributeDerivedDimensions::findDimensionHierarchyForDrivingDimension(DimensionAttribute::find(derivedDim.DimensionAttribute));

        DimensionHierarchyLevel                     dimHierarchyLevel;

        DimensionAttributeDerivedDimensions         derivedDimensions;


        while select RecId, DimensionAttribute from dimHierarchyLevel

                                where dimHierarchyLevel.DimensionHierarchy == dimHierarchy.RecId

                                    join DerivedDimensionFieldNum from derivedDimensions

                                        where derivedDimensions.DimensionHierarchyLevel == dimHierarchyLevel.RecId

        {

            DimensionAttributeValueRecId    davRecId = derivedDim.(derivedDimensions.DerivedDimensionFieldNum);

            DimensionAttributeValue         dav = DimensionAttributeValue::find(davRecId);


            defaultDimStorage.addItemValues(dimHierarchyLevel.DimensionAttribute, dav.RecId, dav.HashKey);

            isDerivedDimension = true;

        }


        // If there is no derived dimension available then at-least create the default dimension with Cost Centre Value only.

        if (!isDerivedDimension)

        {

            defaultDimStorage.addItem(dimAttrValue);

        }


        result = defaultDimStorage.save();

        return result;

    }


Get default ledger dimension from posting profile:

Get default ledger dimension from posting profile: 
 


public static LedgerDimensionAccount getDefaultLedgerDimensionFromPostingProfile(PurchLine _purchLine)

    {

        InventPostingAccountItemLedgerDimensionParameters   inventPostingAccountItemLedgerDimensionParameters;


        inventPostingAccountItemLedgerDimensionParameters =

            InventPostingAccountItemLedgerDimensionParameters::newFromParameters(

                InventAccountType::PurchConsump,

                _purchLine.ItemId,

                _purchLine.inventTable().itemGroupId(),

                _purchLine.ProcurementCategory,

                _purchLine.VendAccount,

                VendTable::find(_purchLine.VendAccount).VendGroup,

                _purchLine.TaxGroup);


        return InventPosting::accountItemLedgerDimensionFromParameters(inventPostingAccountItemLedgerDimensionParameters);

    }


}

Merging ledger dimension and financial dimension with main account id in x++:

 

Merging ledger dimension and financial dimension with main account id  in x++: 

     /// <summary>

    /// To update mainAccounting financial and accounting distribution dimension

    /// </summary>

    public void updateMainAccountinFinancialandAccountingDistributionDimension()

    {

        PurchReqBusinessJustificationCodes reasonCodes;

        LedgerDimensionDefaultAccount      newLedgerDimension;

        LedgerDimensionBase                mergedLedgerDimension;

        DimensionAttributeValueSetStorage  dimStorage;

        DimensionAttribute                 dimAttribute;

        DimensionAttributeValue            dimAttributeValue;

        AccountingDistribution    accDistribution;

        RefRecId                           mainAccountRecId;


        ttsbegin;

        select firstonly reasonCodes

            where reasonCodes.RecId == this.BusinessJustification;


        select firstonly forupdate accDistribution

            where accDistribution.SourceDocumentLine == this.SourceDocumentLine;

        //Get the main accoubt recid

        mainAccountRecId                = MainAccount::findByMainAccountId(reasonCodes.CCBMainAccountId).RecId;

        // Create new ledger dimension with only main account id and other dimensions are empty

        newLedgerDimension              = LedgerDefaultAccountHelper::getDefaultAccountFromMainAccountRecId(mainAccountRecId);

        // Merging new ledger dimension with old ledger dimension 

        mergedLedgerDimension           = LedgerDimensionFacade::serviceMergeLedgerDimensions(newLedgerDimension,accDistribution.LedgerDimension);

        // Update the mrgde ledger dimnesion to table

        accDistribution.LedgerDimension = mergedLedgerDimension;

        accDistribution.update();


        // Merge main account in financial dimension  

        dimStorage                      = DimensionAttributeValueSetStorage::find(this.DefaultDimension);

        dimAttribute                    = DimensionAttribute::findByName('MainAccount');

        dimAttributeValue               = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, reasonCodes.CCBMainAccountId, true, true);


        dimStorage.addItem(dimAttributeValue);

        if(dimStorage != null)

        {

            this.selectForUpdate(true);

            this.CCBLineToBeExpense = NoYes::Yes;

            this.DefaultDimension   = dimStorage.save();

            this.doUpdate();

        }

        ttscommit;

    }



// Get the main account from ledger dimension:

MainAccount                     mainAccount = LedgerDimensionFacade::getMainAccountFromLedgerDimension(projPosting.LedgerDimension);


Get the default dimension(financial dimension) from ledger dimension: 

DimensionDefault defaultDimension = DimensionAttributeValueSetStorage::getDefaultDimensionFromDimensionCombination(_accDistribution.LedgerDimension);


Get the dimension value from default dimension recid :

(Ex: get Cost center value from default dimension)

public static str getEquipmentCostCenter(DimensionDefault _defaultDimension)

    {

        DimensionAttributeValueSetStorage   dimensionAttributeValueSetStorage ;

        DimensionAttribute                  dimensionAttribute;

        DimensionValue                      dimensionValue;

        #define.DimensionName("@CCB:Costcenter")


        dimensionAttributeValueSetStorage   = dimensionAttributeValueSetStorage::find(_defaultDimension);

        dimensionAttribute                  = dimensionAttribute::findbyname(#DimensionName);

        dimensionValue                      = dimensionAttributeValueSetStorage.getDisplayValueByDimensionAttribute(dimensionAttribute.recId);


        return dimensionValue;

    }