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.

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.

TABLESBSEGBKPF.

TYPE-POOLS SLIS.

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

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

DATAITAB TYPE STANDARD TABLE OF TY_BSEG WITH HEADER LINE.
DATAWA TYPE TY_BSEG.

DATAIT_BSIK TYPE STANDARD TABLE OF BSIK WITH HEADER LINE.
DATAWA_BSIK LIKE LINE OF IT_BSIK.

DATAV_COUNT TYPE I.
DATAX_BUKRS TYPE BSEG-BUKRS.
DATAX_LIFNR TYPE BSEG-LIFNR.
DATAX_GSBER TYPE BSEG-GSBER.
DATAX_SAKNR TYPE BSEG-SAKNR.
DATAX_HKONT TYPE BSEG-HKONT.
DATAX_DMBTR TYPE BSEG-DMBTR.
DATAX_SHKZG TYPE BSEG-SHKZG.

SELECT COUNT(*SUMDMBTR BUKRS GSBER HKONT SHKZG FROM BSIS INTO (V_COUNTX_DMBTRX_BUKRSX_GSBERX_HKONTX_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.

TABLESBSEGBKPF.

TYPE-POOLS SLIS.

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

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

DATAITAB TYPE STANDARD TABLE OF TY_BSEG WITH HEADER LINE.
DATAWA TYPE TY_BSEG.

DATAV_COUNT TYPE I.
DATAX_BUKRS TYPE BSEG-BUKRS.
DATAX_KUNNR TYPE BSEG-KUNNR.
DATAX_GSBER TYPE BSEG-GSBER.
DATAX_SAKNR TYPE BSEG-SAKNR.
DATAX_HKONT TYPE BSEG-HKONT.
DATAX_DMBTR TYPE BSEG-DMBTR.

SELECT COUNT(*SUMDMBTR BUKRS KUNNR GSBER SAKNR HKONT FROM BSID INTO (V_COUNTX_DMBTRX_BUKRSX_KUNNRX_GSBERX_SAKNRX_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