Changing value in Ledger Dimension combination

PHOTO EMBED

Sun Aug 17 2025 06:06:20 GMT+0000 (Coordinated Universal Time)

Saved by @MinaTimo

public LedgerDimensionAccount getLedgerDimensionModified(
    LedgerDimensionAccount _ledgerDimension,
    DimensionValue         _toDimTaxDeductionVal)
{
    LedgerDimensionAccount          ledgerDimension;
    DimensionDefault                defaultDimension;
    LedgerDimensionDefaultAccount   defaultAccount;

    DimensionAttribute                  dimAttr;
    DimensionAttributeValue             dimAttrValue;
    DimensionAttributeValueSetStorage   dimAttrValDimStorage;
    DimensionStorage                    dimAttrStorage;
    int                                 i;

    // Name of dimension attribute to change, example: TaxDeduction
    #define.DimAttrTaxDeductionName('TaxDeduction')
    ;

    dimAttr = DimensionAttribute::findByName(#DimAttrTaxDeductionName);

    if (_toDimTaxDeductionVal != '')
    {
        // convert to Default dimensions
        defaultDimension = DimensionStorage::getDefaultDimensionFromLedgerDimension(_ledgerDimension);
        dimAttrValDimStorage = DimensionAttributeValueSetStorage::find(defaultDimension);

        // find DimensionAttributeValue for specified display value of TaxDeduction dimension
        dimAttrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttr, _toDimTaxDeductionVal);

        // add dimension value to Default dimension
        dimAttrValDimStorage.addItemValues(dimAttr.RecId, dimAttrValue.RecId, dimAttrValue.HashKey);
        defaultDimension = dimAttrValDimStorage.save();

        // combine default dimension with ledger dimension representing main account
        defaultAccount = DimensionStorage::getLedgerDefaultAccountFromLedgerDim(_ledgerDimension);
        ledgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(defaultAccount, defaultDimension);
    }
    // remove dimension from combination
    else
    {
        dimAttrStorage = DimensionStorage::findById(_ledgerDimension);
        for (i = 1; i <= dimAttrStorage.segmentCount(); i++)
        {
            if (dimAttrStorage.getAttributeIdForSegment(i) == dimAttr.RecId)
                dimAttrStorage.clearSegment(i);
        }
        ledgerDimension = dimAttrStorage.save();
    }

    return ledgerDimension;
}

// https://daxtarkowski.wordpress.com/2014/04/16/changing-value-in-ledger-dimension-combination/
content_copyCOPY