Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Scenario: Step-by-step creation of a FM to Get Opening/Closing Balance of G/L as on Key Date.

As we have Standard FM in SAP For G/L Balances: -

BAPI_GL_GETGLACCBALANCE:- closing balance of G/L account for a year.

BAPI_GL_GETGLACCCURRENTBALANCE: - closing balance of G/L account for the current year

BAPI_GL_GETGLACCPERIODBALANCES:- Posting period balances for each G/L account.

And

BAPI_AP_ACC_GETKEYDATEBALANCE:- Opening Vendor balance

BAPI_AR_ACC_GETKEYDATEBALANCE:- Opening Customer Balance

But we don’t have any standard FM to get Opening/Closing G/L Account Balance As on key date.

This Document specifies Step by Step how to create a FM for getting Opening/Closing G/L Account Balance with code.

    1.  Create FM in SE37:- ZGL_OPENING_CLOSING_BAL_KEYDAT.

     2.  Maintain Parameters in Import and Export as shown below.

             

              

      3.  Source code:-

             

Code:-

FUNCTION ZGL_OPENING_CLOSING_BAL_KEYDAT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(COMP) TYPE  BKPF-BUKRS
*"     REFERENCE(DATE) TYPE  BKPF-BUDAT
*"     REFERENCE(ACCT) TYPE  BSEG-HKONT
*"  EXPORTING
*"     REFERENCE(BALANCE) TYPE  BSEG-DMBTR
*"----------------------------------------------------------------------
DATA : COMPANYCODEID  LIKE  BAPI0002_2-COMP_CODE     ,
POSTING_DATE  
LIKE  BAPI0002_4-POSTING_DATE  ,
FISCAL_YEAR   
LIKE  BAPI0002_4-FISCAL_YEAR   ,
FISCAL_PERIOD 
LIKE  BAPI0002_4-FISCAL_PERIOD .

DATA : ACCOUNT_BALANCES  TYPE TABLE OF BAPI3006_4 WITH HEADER LINE.
DATA : BAL TYPE BSEG-DMBTR.

DATA : IV_DATE  TYPE  D   ,
EV_MONTH_BEGIN_DATE 
TYPE  D,
EV_MONTH_END_DATE 
TYPE  D .

DATA : COMPANYCODE  LIKE  BAPI3006_0-COMP_CODE,
GLACCT 
LIKE  BAPI3006_0-GL_ACCOUNT ,
FISCALYEAR 
LIKE  BAPI3006_4-FISC_YEAR,
CURRENCYTYPE 
LIKE  BAPI3006_5-CURR_TYPE VALUE 10.

DATA : IT_BKPF TYPE TABLE OF BKPF WITH HEADER LINE.

DATA : BEGIN OF IT_BSEG OCCURS 0,
BELNR
TYPE BSEG-BELNR,
GJAHR
TYPE BSEG-GJAHR,
SHKZG
TYPE BSEG-SHKZG  ,
DMBTR
TYPE BSEG-DMBTR,
END OF IT_BSEG.

COMPANYCODEID = COMP.
POSTING_DATE = DATE.

IV_DATE  = DATE.

CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'
EXPORTING
IV_DATE             = IV_DATE
IMPORTING
EV_MONTH_BEGIN_DATE = EV_MONTH_BEGIN_DATE
EV_MONTH_END_DATE   = EV_MONTH_END_DATE.

CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = COMPANYCODEID
POSTING_DATE  = POSTING_DATE
IMPORTING
FISCAL_YEAR   = FISCAL_YEAR
FISCAL_PERIOD = FISCAL_PERIOD.

IF EV_MONTH_END_DATE NE DATE.

IF FISCAL_PERIOD = 1.
FISCAL_PERIOD =
12              .
FISCAL_YEAR = FISCAL_YEAR -
.
ELSE.
FISCAL_PERIOD =  FISCAL_PERIOD -
1.
ENDIF.

ENDIF.

COMPANYCODE  =  COMP.
GLACCT  = ACCT.
FISCALYEAR  = FISCAL_YEAR.

CALL FUNCTION 'BAPI_GL_ACC_GETPERIODBALANCES'
EXPORTING
COMPANYCODE      = COMPANYCODE
GLACCT           = GLACCT
FISCALYEAR       = FISCALYEAR
CURRENCYTYPE     = CURRENCYTYPE
TABLES
ACCOUNT_BALANCES = ACCOUNT_BALANCES.

READ TABLE ACCOUNT_BALANCES  WITH KEY FISC_YEAR = FISCALYEAR FIS_PERIOD = FISCAL_PERIOD.
IF SY-SUBRC = 0.
BALANCE =  ACCOUNT_BALANCES-BALANCE.
ENDIF.


IF EV_MONTH_END_DATE NE DATE.

SELECT * FROM BKPF INTO TABLE IT_BKPF WHERE BUKRS = COMP AND BUDAT >= EV_MONTH_BEGIN_DATE
AND BUDAT <= DATE.

IF IT_BKPF[] IS NOT INITIAL.

SELECT BELNR GJAHR SHKZG DMBTR
FROM BSEG INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
FOR ALL ENTRIES IN IT_BKPF
WHERE BELNR = IT_BKPF-BELNR AND GJAHR = IT_BKPF-GJAHR AND HKONT = ACCT AND BUKRS = COMP.

ENDIF.

LOOP AT IT_BSEG.
IF IT_BSEG-SHKZG = 'H'.
BAL = BAL - IT_BSEG-DMBTR.
ELSEIF IT_BSEG-SHKZG = 'S'.
BAL = BAL + IT_BSEG-DMBTR.
ENDIF.
ENDLOOP.

BALANCE = BALANCE + BAL.

ENDIF.

ENDFUNCTION.

Output:-

            

             

2 Comments