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.

Get Last Date of Previous Month

Execute this function module to get the Last Day of Previous Month

Function Module - OIL_LAST_DAY_OF_PREVIOUS_MONTH

List of GL Open Items

*&---------------------------------------------------------------------*
*& Report  ZVENDOR_OP_SUMMARY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZGL_OP_SUMMARY.

TABLES: BSEG, BKPF.

TYPE-POOLS : SLIS.

DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID,
      GT_EVENTS     TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS TYPE SLIS_PRINT_ALV.

DATA: V_BELNR TYPE BSEG-BELNR.

SELECT-OPTIONS  : V_HKONT FOR BSEG-HKONT.
SELECT-OPTIONS  : V_GSBER FOR BSEG-GSBER.

TYPES : BEGIN OF TY_BSEG,
        BUKRS TYPE BSEG-BUKRS,
        HKONT TYPE BSEG-HKONT,
        GSBER TYPE BSEG-GSBER,
        COUNT TYPE I,
        DMBTR TYPE BSEG-DMBTR,
        SHKZG TYPE SHKZG,
        SGTXT TYPE SGTXT,
       END OF TY_BSEG.

DATA: ITAB TYPE STANDARD TABLE OF TY_BSEG WITH HEADER LINE.
DATA: WA TYPE TY_BSEG.

DATA: IT_BSIK TYPE STANDARD TABLE OF BSIK WITH HEADER LINE.
DATA: WA_BSIK LIKE LINE OF IT_BSIK.

DATA: V_COUNT TYPE I.
DATA: X_BUKRS TYPE BSEG-BUKRS.
DATA: X_LIFNR TYPE BSEG-LIFNR.
DATA: X_GSBER TYPE BSEG-GSBER.
DATA: X_SAKNR TYPE BSEG-SAKNR.
DATA: X_HKONT TYPE BSEG-HKONT.
DATA: X_DMBTR TYPE BSEG-DMBTR.
DATA: X_SHKZG TYPE BSEG-SHKZG.

SELECT COUNT(*) SUM( DMBTR ) BUKRS GSBER HKONT SHKZG FROM BSIS INTO (V_COUNT, X_DMBTR, X_BUKRS, X_GSBER, X_HKONT, X_SHKZG)
WHERE BUKRS = 'RCFL' AND
  HKONT IN V_HKONT AND
  GSBER IN V_GSBER
  GROUP BY BUKRS GSBER HKONT SHKZG
  ORDER BY GSBER.
  WA-BUKRS = X_BUKRS.
  WA-GSBER = X_GSBER.
  WA-HKONT = X_HKONT.
  WA-COUNT = V_COUNT.
  WA-DMBTR = X_DMBTR.
  WA-SHKZG = X_SHKZG.
  IF X_SHKZG EQ 'H'.
    WA-SGTXT = 'Credit'.
  ENDIF.
  IF X_SHKZG EQ 'S'.
    WA-SGTXT = 'Debit'.
  ENDIF.
  APPEND WA TO ITAB.
ENDSELECT.

PERFORM BUILD_FIELDCATALOG.
PERFORM BUILD_LAYOUT.
PERFORM DISPLAY_ALV_REPORT.

FORM BUILD_FIELDCATALOG .
  FIELDCATALOG-FIELDNAME   = 'BUKRS'.
  FIELDCATALOG-SELTEXT_M   = 'Company Code'.
  FIELDCATALOG-COL_POS     = 1.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'GSBER'.
  FIELDCATALOG-SELTEXT_M   = 'Business Area'.
  FIELDCATALOG-COL_POS     = 2.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'HKONT'.
  FIELDCATALOG-SELTEXT_M   = 'GL Account'.
  FIELDCATALOG-COL_POS     = 3.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'COUNT'.
  FIELDCATALOG-SELTEXT_M   = 'Open Item'.
  FIELDCATALOG-COL_POS     = 4.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'DMBTR'.
  FIELDCATALOG-SELTEXT_M   = 'Total Amount'.
  FIELDCATALOG-COL_POS     = 5.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'SGTXT'.
  FIELDCATALOG-SELTEXT_M   = 'Credit/Debit'.
  FIELDCATALOG-COL_POS     = 6.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

ENDFORM.                    " BUILD_FIELDCATALOG

FORM BUILD_LAYOUT .
GD_LAYOUT-NO_INPUT          = 'X'.
  GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GD_LAYOUT-TOTALS_TEXT       = 'TOTALS'(201).
ENDFORM.                    " BUILD_LAYOUT

FORM DISPLAY_ALV_REPORT .
GD_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM      = GD_REPID
*            I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'  "SEE FORM
            I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*            I_GRID_TITLE           = OUTTEXT
            IS_LAYOUT               = GD_LAYOUT
            IT_FIELDCAT             = FIELDCATALOG[]
*            IT_SPECIAL_GROUPS       = GD_TABGROUP
            IT_EVENTS               = GT_EVENTS
            IS_PRINT                = GD_PRNTPARAMS
            I_SAVE                  = 'X'
*            IS_VARIANT              = Z_TEMPLATE
       TABLES
            T_OUTTAB                = ITAB

       EXCEPTIONS
            PROGRAM_ERROR           = 1
            OTHERS                  = 2.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " DISPLAY_ALV_REPORT

List of Customer Open Items

*&---------------------------------------------------------------------*
*& Report  ZCUSTOMER_OP_SUMMARY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZCUSTOMER_OP_SUMMARY.

TABLES: BSEG, BKPF.

TYPE-POOLS : SLIS.

DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID,
      GT_EVENTS     TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS TYPE SLIS_PRINT_ALV.

DATA: V_BELNR TYPE BSEG-BELNR.

SELECT-OPTIONS  : V_SAKNR FOR BSEG-SAKNR.
SELECT-OPTIONS  : V_GSBER FOR BSEG-GSBER.
SELECT-OPTIONS  : V_KUNNR FOR BSEG-KUNNR.

TYPES : BEGIN OF TY_BSEG,
        BUKRS TYPE BSEG-BUKRS,
        KUNNR TYPE BSEG-KUNNR,
        SAKNR TYPE BSEG-SAKNR,
        HKONT TYPE BSEG-HKONT,
        GSBER TYPE BSEG-GSBER,
        COUNT TYPE I,
        DMBTR TYPE BSEG-DMBTR,
       END OF TY_BSEG.

DATA: ITAB TYPE STANDARD TABLE OF TY_BSEG WITH HEADER LINE.
DATA: WA TYPE TY_BSEG.

DATA: V_COUNT TYPE I.
DATA: X_BUKRS TYPE BSEG-BUKRS.
DATA: X_KUNNR TYPE BSEG-KUNNR.
DATA: X_GSBER TYPE BSEG-GSBER.
DATA: X_SAKNR TYPE BSEG-SAKNR.
DATA: X_HKONT TYPE BSEG-HKONT.
DATA: X_DMBTR TYPE BSEG-DMBTR.

SELECT COUNT(*) SUM( DMBTR ) BUKRS KUNNR GSBER SAKNR HKONT FROM BSID INTO (V_COUNT, X_DMBTR, X_BUKRS, X_KUNNR, X_GSBER, X_SAKNR, X_HKONT)
WHERE BUKRS = 'RCFL' AND
  SAKNR IN V_SAKNR AND
  KUNNR IN V_KUNNR AND
  GSBER IN V_GSBER
  GROUP BY BUKRS KUNNR GSBER SAKNR HKONT
  ORDER BY GSBER.
  WA-BUKRS = X_BUKRS.
  WA-KUNNR = X_KUNNR.
  WA-GSBER = X_GSBER.
  WA-SAKNR = X_SAKNR.
  WA-HKONT = X_HKONT.
  WA-COUNT = V_COUNT.
  WA-DMBTR = X_DMBTR.
  APPEND WA TO ITAB.
ENDSELECT.

PERFORM BUILD_FIELDCATALOG.
PERFORM BUILD_LAYOUT.
PERFORM DISPLAY_ALV_REPORT.

FORM BUILD_FIELDCATALOG .
  FIELDCATALOG-FIELDNAME   = 'BUKRS'.
  FIELDCATALOG-SELTEXT_M   = 'Company Code'.
  FIELDCATALOG-COL_POS     = 1.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'KUNNR'.
  FIELDCATALOG-SELTEXT_M   = 'Customer'.
  FIELDCATALOG-COL_POS     = 2.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'GSBER'.
  FIELDCATALOG-SELTEXT_M   = 'Business Area'.
  FIELDCATALOG-COL_POS     = 3.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'SAKNR'.
  FIELDCATALOG-SELTEXT_M   = 'GL Account'.
  FIELDCATALOG-COL_POS     = 4.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'HKONT'.
  FIELDCATALOG-SELTEXT_M   = 'Sub-GL Account'.
  FIELDCATALOG-COL_POS     = 5.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'COUNT'.
  FIELDCATALOG-SELTEXT_M   = 'Open Item'.
  FIELDCATALOG-COL_POS     = 6.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'DMBTR'.
  FIELDCATALOG-SELTEXT_M   = 'Total Amount'.
  FIELDCATALOG-COL_POS     = 7.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

ENDFORM.                    " BUILD_FIELDCATALOG

FORM BUILD_LAYOUT .
GD_LAYOUT-NO_INPUT          = 'X'.
  GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GD_LAYOUT-TOTALS_TEXT       = 'TOTALS'(201).
ENDFORM.                    " BUILD_LAYOUT

FORM DISPLAY_ALV_REPORT .
GD_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM      = GD_REPID
*            I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'  "SEE FORM
            I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*            I_GRID_TITLE           = OUTTEXT
            IS_LAYOUT               = GD_LAYOUT
            IT_FIELDCAT             = FIELDCATALOG[]
*            IT_SPECIAL_GROUPS       = GD_TABGROUP
            IT_EVENTS               = GT_EVENTS
            IS_PRINT                = GD_PRNTPARAMS
            I_SAVE                  = 'X'
*            IS_VARIANT              = Z_TEMPLATE
       TABLES
            T_OUTTAB                = ITAB

       EXCEPTIONS
            PROGRAM_ERROR           = 1
            OTHERS                  = 2.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " DISPLAY_ALV_REPORT