Tuesday, February 9, 2016

Function Module for GL Account Balance as on Key Date

FUNCTION ZFI_GET_ACCOUNTS_BALANCE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_BUKRS) TYPE  BUKRS
*"     VALUE(I_BUDAT) TYPE  BUDAT
*"     VALUE(I_HKONT) TYPE  HKONT
*"  EXPORTING
*"     VALUE(BALANCE) TYPE  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  .

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 I_BUKRS.
POSTING_DATE I_BUDAT.

IV_DATE  I_BUDAT.

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 I_BUDAT.
  IF FISCAL_PERIOD 1.
    FISCAL_PERIOD 12              .
    FISCAL_YEAR FISCAL_YEAR 1  .
  ELSE.
    FISCAL_PERIOD =  FISCAL_PERIOD 1.
  ENDIF.
ENDIF.

COMPANYCODE  =  I_BUKRS.
GLACCT  I_HKONT.
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 I_BUDAT.
  SELECT FROM BKPF INTO TABLE IT_BKPF WHERE BUKRS I_BUKRS AND BUDAT >= EV_MONTH_BEGIN_DATE
    AND BUDAT <= I_BUDAT.

    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 I_HKONT AND BUKRS I_BUKRS.
    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.

2 comments: