Showing posts with label GL Account Balance as on Key Date. Show all posts
Showing posts with label GL Account Balance as on Key Date. Show all posts

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  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 = 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.