6

Group Reporting: BAdI for Currency Translation Deviating Rates

 1 year ago
source link: https://blogs.sap.com/2023/06/26/group-reporting-badi-for-currency-translation-deviating-rates/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
June 26, 2023 3 minute read

Group Reporting: BAdI for Currency Translation Deviating Rates

Introduction

In this article, I would like to show an example of implementing Currency Translation enhancement spot BADI_FINCS_CTR_EXCHANGE_RATES which enable users to select deviating Exchange Rates than the one determined by the standard Currency Translation task in Group Reporting.

Validity

This BAdi is shipped with OP release 2023 and available for OP releases 2021, 2022 via SAP note 3299211. It is also available for Cloud Developer Extensibility in 3 System Landscape.

Exemplified Use Case

The rule definition of the standard Currency Translation does not allow using selections objects that contain anything other than Chart of Accounts, Financial Statement items, Subitems, and Document types.

In my use case, balance sheet FS items with transaction type 901 “Incoming units” are translated using Translation Method S0903 in rule nr. 035. The Exchange Rate determined by the system is /1.47060.

However, I want to use a deviating Exchange Rate /1.39170 for postings between cons. unit AM03 and its partner unit AM02.

Exemplified Custom Configurations

For this use case, I defined a new customizing DB table called ZCTR_PARTNR_RATE where I can store the Year/Period dependent combination of cons. unit and partner unit and their assigned exchange rate type and date.

The table script for this example is as below:

@EndUserText.label : 'Rate by Partner'
@AbapCatalog.enhancement.category : #EXTENSIBLE_CHARACTER
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zctr_partnr_rate {

  key mandt          : mandt not null;
  key cons_unit      : fincs_rbunit not null;
  key partner_unit   : fincs_rbunit not null;
  key fiscal_year    : fc_ryear not null;
  key fiscal_period  : fc_perid not null;
  exchange_rate_type : fc_exrtyp;
  rate_valid_from    : datum;

}

Cloud Customers can create their Business Configurations as described here or as shown in this torturial. They also need to use publically released data elements.

BAdi Implementation

You can check this tutorial on how to implement a BAdi in Cloud.

In my example, I implemented enhancement spot BADI_FINCS_CTR_EXCHANGE_RATES and copied the example class.

I also created a constructor method to get required customizing into buffer.

The example class that I copied is created privately so I changed that to public.

In the BAdi method implementation, I simply check if the is an entry for the current executed cons. unit, partner unit, fiscal year, and fiscal period. If the business user assigned a certain Exchange Rate Type and a validity date, the method try to fetch the relevant ER. if the ER was not found, it raises an exception, otherwise, it returns the ER.

You don’t have to buffer the result from the database. This is already done by the standard development.

The class syntax is illustrated below:

class zcl_rate_by_parnter definition
  public
  final
  create public.

  public section.
    interfaces if_badi_interface.
    interfaces if_badi_fincs_ctr_get_ex_rate.

    methods: constructor.
     private section.
     data: mt_fsitems type sorted table of I_CNSLDTNFSITEMBYTIMEVERSION with unique key
                                                                        ConsolidationChartOfAccounts
                                                                        CnsldtnFinancialStatementItem
                                                                        ConsolidationVersion
                                                                        ToFiscalYearPeriod.

     data: mt_rate_by_partner type sorted table of ZCTR_PARTNR_RATE with unique key cons_unit 
                                                       partner_unit fiscal_year fiscal_period.
ENDCLASS.



CLASS ZCL_RATE_BY_PARNTER IMPLEMENTATION.

  METHOD CONSTRUCTOR.

      select * from ZCTR_PARTNR_RATE into table @mt_rate_by_partner.

  ENDMETHOD.

  method if_badi_fincs_ctr_get_ex_rate~get_exchange_rate.

    read table mt_rate_by_partner with table key cons_unit = is_lookup_parameters-consolidationunit
                                           partner_unit = is_lookup_parameters-partnerconsolidationunit
                                           fiscal_year  = is_lookup_parameters-fiscalyear
                                           fiscal_period = is_lookup_parameters-fiscalperiod
                                  into data(ls_partner_rate).

    if sy-subrc is initial.

      select single * from I_EXCHANGERATERAWDATA where 
                                     SourceCurrency = @is_lookup_parameters-consolidationcurrencysource
                                     and TargetCurrency = @is_lookup_parameters-groupcurrency
                                     and ExchangeRateType = @ls_partner_rate-exchange_rate_type
                                     and ValidityStartDate = @ls_partner_rate-rate_valid_from
                                     into @data(ls_rate).

      if sy-subrc is initial.
        ev_exchange_rate = ls_rate-ExchangeRate.
      else.
        raise exception type cx_exchange_rates message id 'ZCTR' type 'E' number '001' 
                                                 with  is_lookup_parameters-consolidationcurrencysource                     
                                                       is_lookup_parameters-groupcurrency
                                                       ls_partner_rate-exchange_rate_type
                                                       ls_partner_rate-rate_valid_from .
      endif.

    endif.

  endmethod.


ENDCLASS.

The public interface of this BAdi provides the below runtime parameters:

  • ConsolidationVersion : The current version processed. Either the one visible on the selection screen of currency translation or an extension version of it.
  • ConsolidationChartOfAccounts : As on the selection screen of currency translation.
  • FiscalYear and FiscalPeriod : As on the selection screen of currency translation.
  • FiscalYearVariant : The fiscal year variant assigned to the unit or to the version
  • ConsolidationUnit : As on the selection screen of currency translation or the a from Group Structure.
  • FinancialStatementItem : The current processed financial statement item.
  • SubItem : The current processed SubItem.
  • ConsolidationDocumentType : The current processed document type.
  • PartnerConsolidationUnit : The current processed partner unit.
  • CnsldtnCrcyTranslationMethod : The assigned currency translation method of the processed cons. unit
  • CnsldtnCrcyTransMethodStep : The current applied translation method step.
  • CurrencyTranslationKey : The assigned Currency Translation Key to the method step.
  • ExchangeRateType : The applicable Exchange rate type to the currency translation method step.
  • CurrencyTranslationDate : The applicable date of the exchange rate for the current processed line
  • ConsolidationCurrencySource : This can be either the Local Currency or Transaction Currency.
  • GroupCurrency : The target currency conversion.

Best Regards / Viele Gruesse /Mnoho pozdravů /Amicalement /Distinti Saluti /Cumprimentos /Abraço /Saludos / 敬具 / 此致 /  تحياتي

Mazen Abbas


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK