AR detail balance report

REPORT  ZRFI0052.

INCLUDE ZRFI0052_ALV.
TABLES:KNA1,KNB1,BSID,VBRP,KSSK,KLAH,VBFA,VBRK.

DATA: BEGIN OF ITAB OCCURS 0,
      KUNNR LIKE KNB1-KUNNR,               "CUSTOMER CODE
      BUKRS LIKE BSID-BUKRS,               "Company Code
      KUNAG LIKE VBRK-KUNAG,               "SO TO PARTY
      NAME1 LIKE KNA1-NAME1,               "Customer Name
      WAERS LIKE BSID-WAERS,               "Currency Key
      BLDAT LIKE BSID-BLDAT,               "Document Date
      BELNR LIKE BSID-BELNR,               "Document Number
      ZUONR LIKE BSID-ZUONR,               "Assignment Number
      MATNR LIKE VBRP-MATNR,               "Material Number
      ARKTX LIKE VBRP-ARKTX,               "Material description
      BLART LIKE BSID-BLART,               "Document Type
      ZTERM LIKE BSID-ZTERM,               "Terms of payment key
      AUBEL LIKE VBRP-AUBEL,               "Sales Document
      AUPOS LIKE VBRP-AUPOS,               "sales item
      POSNR LIKE VBRP-POSNR,               "Billing item
      CLINT LIKE KSSK-CLINT,               "Internal Class Number
      OBJEK LIKE KSSK-OBJEK,
      KLART LIKE KSSK-KLART,               "Class Type
      CLASS LIKE KLAH-CLASS,               "Class Number
      VBELN LIKE VBRP-VBELN,               "Comercial invoice
      VGBEL LIKE VBRP-VGBEL,               "Delivery note
      NETWR LIKE VBRP-NETWR,               "Amount
      WRBTR LIKE BSID-WRBTR,
      STWAE LIKE VBRK-STWAE,               "Currency
      DMBTR LIKE BSID-DMBTR,            "Amount in local currency
*      WRBTR LIKE BSID-WRBTR,
      LOC_CURRENCY(3) TYPE C,
      SHKZG LIKE BSID-SHKZG,
      FKART LIKE VBRK-FKART,
      WAERK LIKE VBRK-WAERK,
      KURRF LIKE VBRK-KURRF,
      END OF ITAB.

DATA: BEGIN OF DTAB OCCURS 0,
      BUKRS LIKE BSID-BUKRS,               "Company Code
      KUNAG LIKE VBRK-KUNAG,               "SO TO PARTY
      NAME1 LIKE KNA1-NAME1,               "Customer Name
      BLDAT LIKE BSID-BLDAT,               "Document Date
      BELNR LIKE BSID-BELNR,               "Document Number
      ZUONR LIKE BSID-ZUONR,               "Assignment Number
      MATNR LIKE VBRP-MATNR,               "Material Number
      ARKTX LIKE VBRP-ARKTX,               "Material description
      VBELN LIKE VBRP-VBELN,               "Comercial invoice
      VGBEL LIKE VBRP-VGBEL,               "Delivery note
      CLASS LIKE KLAH-CLASS,               "Class Number
      NET_DUE_DATE LIKE BSID-BLDAT,        "Net due date
*      AMOUNT(13) TYPE C,
      AMOUNT LIKE VBRP-NETWR,
      CURRENCY(5) TYPE C,
      DMBTR LIKE BSID-DMBTR,            "Amount in local currency
      LOC_CURRENCY(5) TYPE C,
      ZTERM LIKE BSID-ZTERM,               "Terms of payment key
      KUNNR LIKE BSID-KUNNR,
      END OF DTAB.


SELECT-OPTIONS:   S_KUNNR FOR KNB1-KUNNR OBLIGATORY.
SELECT-OPTIONS:   S_BELNR FOR BSID-BELNR.
SELECT-OPTIONS:   S_BLDAT FOR BSID-BLDAT.
PARAMETER:        P_BUKRS LIKE BSID-BUKRS DEFAULT '3100'.

*----------------------------------------------------------------------*
*        INITIALIZATION                                                *
*----------------------------------------------------------------------*

INITIALIZATION.
  PERFORM ALV_INIT.
*----------------------------------------------------------------------*
*        START-OF-SELECTION                                            *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM GET_DATA.

END-OF-SELECTION.

  PERFORM SUB_OUTPUT_TO_ALV .

*&--------------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM GET_DATA.

  PERFORM GET_RV_BILLING.
  PERFORM GET_OTHER_DOCUMENT.

ENDFORM.                    "GET_DATA

*&---------------------------------------------------------------------*
*&      Form  GET_RV_BILLING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_RV_BILLING .
  DATA: L_ZTERM(4) TYPE C.
  DATA: L_DAY TYPE I.
  DATA: L_KURRF(20).
  SELECT BSID~BLDAT BSID~BELNR BSID~ZUONR BSID~BLART BSID~ZTERM
         BSID~WAERS BSID~XBLNR BSID~WRBTR BSID~KUNNR VBRK~STWAE
         VBRP~VGBEL VBRP~MATNR VBRP~ARKTX VBRP~NETWR VBRP~AUBEL
         BSID~BUKRS VBRK~FKART VBRK~WAERK VBRK~KURRF
        INTO CORRESPONDING FIELDS OF TABLE ITAB
         FROM BSID INNER JOIN VBRK ON BSID~BELNR = VBRK~VBELN
         INNER JOIN VBRP
         ON VBRP~VBELN = VBRK~VBELN
         WHERE BSID~KUNNR IN S_KUNNR
           AND BSID~BLDAT IN S_BLDAT
           AND BSID~BELNR IN S_BELNR
           AND BSID~BLART = 'RV'
           AND BSID~BUKRS = P_BUKRS.

  LOOP AT ITAB.

    SELECT SINGLE KLAH~CLASS
          INTO ITAB-CLASS
          FROM KLAH
          INNER JOIN KSSK ON KLAH~CLINT = KSSK~CLINT
          WHERE KSSK~OBJEK = ITAB-MATNR
          AND   KSSK~KLART = '001'.

    DTAB-BUKRS = ITAB-BUKRS.
    DTAB-VGBEL = ITAB-VGBEL.
    DTAB-BLDAT = ITAB-BLDAT.
    DTAB-CLASS = ITAB-CLASS.
    DTAB-KUNNR = ITAB-KUNNR.
    DTAB-BELNR = ITAB-BELNR.
    DTAB-ZUONR = ITAB-ZUONR.
    DTAB-MATNR = ITAB-MATNR.
    DTAB-ARKTX = ITAB-ARKTX.
    DTAB-ZTERM = ITAB-ZTERM.

    SELECT SINGLE NAME1 INTO DTAB-NAME1 FROM KNA1
            WHERE KUNNR = DTAB-KUNNR.

*Start vista "DEVK924313 [S0803008]
    IF DTAB-VGBEL IS NOT INITIAL.
      SELECT SINGLE VBRP~VBELN INTO DTAB-VBELN
        FROM VBRP INNER JOIN VBRK
        ON VBRP~VBELN = VBRK~VBELN
        WHERE  VBRP~VGBEL = DTAB-VGBEL
          AND VBRK~FKART = 'F8'
          AND VBRK~RFBSK <> 'E'.
    ENDIF.
*End   vista "DEVK924313 [S0803008]

    IF DTAB-ZTERM(2) <> 'N0'.
      DTAB-NET_DUE_DATE = ''.
      IF DTAB-ZTERM = 'COD' OR DTAB-ZTERM = 'ADV'.
        DTAB-NET_DUE_DATE = ITAB-BLDAT.
      ENDIF.
    ELSE.
      L_ZTERM =  ITAB-ZTERM+2(2).
      L_DAY  =  L_ZTERM.
      DTAB-NET_DUE_DATE = ITAB-BLDAT + L_DAY.
    ENDIF.


    IF ITAB-FKART = 'G2' OR ITAB-FKART = 'ZS1'
       OR ITAB-FKART = 'S1'.
      DTAB-AMOUNT = ITAB-NETWR * -1.
      DTAB-DMBTR = ITAB-NETWR * -1.
    ELSE.
      DTAB-AMOUNT = ITAB-NETWR.
      DTAB-DMBTR = ITAB-NETWR.
    ENDIF.


*    DTAB-AMOUNT = ITAB-NETWR.
    IF ITAB-WAERK = 'CNY'.
      DTAB-CURRENCY = ITAB-WAERK.

      IF ITAB-KURRF IS NOT INITIAL.
        IF ITAB-WAERK <> 'USD'.
          L_KURRF = ITAB-KURRF.
          SHIFT L_KURRF RIGHT DELETING TRAILING '-'.
*          DTAB-DMBTR = ITAB-DMBTR / L_KURRF.
          DTAB-DMBTR = ITAB-NETWR / L_KURRF.
        ENDIF.
      ENDIF.

    ELSE.
      DTAB-CURRENCY = ITAB-STWAE.
    ENDIF.

*    DTAB-DMBTR = ITAB-NETWR.
    DTAB-LOC_CURRENCY = ITAB-STWAE.


    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-KUNNR
      IMPORTING
        OUTPUT = DTAB-KUNNR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-BELNR
      IMPORTING
        OUTPUT = DTAB-BELNR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-VGBEL
      IMPORTING
        OUTPUT = DTAB-VGBEL.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-MATNR
      IMPORTING
        OUTPUT = DTAB-MATNR.

    APPEND DTAB.
    CLEAR DTAB.
  ENDLOOP.

ENDFORM.                    " GET_RV_BILLING

 

*&---------------------------------------------------------------------*
*&      Form  GET_OTHER_DOCUMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_OTHER_DOCUMENT .
  DATA: L_ZTERM(4) TYPE C.
  DATA: L_DAY TYPE I.

  FREE ITAB.
  CLEAR ITAB.

  SELECT BSID~BLDAT BSID~BELNR BSID~ZUONR BSID~BLART BSID~ZTERM
         BSID~WAERS BSID~XBLNR BSID~WRBTR BSID~KUNNR BSID~BUKRS
         BSID~DMBTR BSID~SHKZG
*         VBRK~KUNAG
*VBRP~NETWR
         BSID~WRBTR
        INTO CORRESPONDING FIELDS OF TABLE ITAB
         FROM BSID
*         INNER JOIN VBRK ON BSID~BELNR = VBRK~VBELN
*         INNER JOIN VBRP ON VBRP~VBELN = VBRK~VBELN
         WHERE BSID~KUNNR IN S_KUNNR
           AND BSID~BLDAT IN S_BLDAT
           AND BSID~BELNR IN S_BELNR
           AND BSID~BLART <> 'RV'
*           AND WRBTR = 'USD'
           AND BSID~BUKRS = P_BUKRS.

  LOOP AT ITAB.

    IF ITAB-SHKZG = 'H'.
      DTAB-AMOUNT = ITAB-WRBTR * -1.
      DTAB-DMBTR = ITAB-DMBTR * -1.
    ELSE.
      DTAB-AMOUNT = ITAB-WRBTR.
      DTAB-DMBTR = ITAB-DMBTR.
    ENDIF.

    DTAB-BUKRS = ITAB-BUKRS.
    DTAB-BLDAT = ITAB-BLDAT.
    DTAB-KUNNR = ITAB-KUNNR.
    DTAB-BELNR = ITAB-BELNR.
    DTAB-ZUONR = ITAB-ZUONR.
*    DTAB-NET_DUE_DATE = ITAB-BLDAT.
    DTAB-CURRENCY = ITAB-WAERS.
    DTAB-LOC_CURRENCY = 'USD'.
    DTAB-ZTERM = ITAB-ZTERM.

    IF DTAB-ZTERM(2) <> 'N0'.
      DTAB-NET_DUE_DATE = ''.
      IF DTAB-ZTERM = 'COD' OR DTAB-ZTERM = 'ADV'.
        DTAB-NET_DUE_DATE = ITAB-BLDAT.
      ENDIF.
    ELSE.
      L_ZTERM =  ITAB-ZTERM+2(2).
      L_DAY  =  L_ZTERM.
      DTAB-NET_DUE_DATE = ITAB-BLDAT + L_DAY.
    ENDIF.

    SELECT SINGLE NAME1 INTO DTAB-NAME1 FROM KNA1
          WHERE KUNNR = DTAB-KUNNR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-KUNNR
      IMPORTING
        OUTPUT = DTAB-KUNNR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-BELNR
      IMPORTING
        OUTPUT = DTAB-BELNR.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-VGBEL
      IMPORTING
        OUTPUT = DTAB-VGBEL.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  = DTAB-MATNR
      IMPORTING
        OUTPUT = DTAB-MATNR.

    APPEND DTAB.
    CLEAR DTAB.
  ENDLOOP.

ENDFORM.                    " GET_OTHER_DOCUMENT


*&--------------------------------------------------------------------*
*&      Form  SUB_OUTPUT_TO_ALV
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM SUB_OUTPUT_TO_ALV .

  DATA: LS_FIELDCAT   TYPE SLIS_FIELDCAT_ALV.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'BUKRS'.
  LS_FIELDCAT-SELTEXT_L = 'Comany Code'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'KUNNR'.
  LS_FIELDCAT-SELTEXT_L = 'Customer Code'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.


  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'NAME1'.
  LS_FIELDCAT-SELTEXT_L = 'Customer Name'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'BLDAT'.
  LS_FIELDCAT-SELTEXT_L = 'Inv date'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'BELNR'.
  LS_FIELDCAT-SELTEXT_L = 'Inv No'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'ZUONR'.
  LS_FIELDCAT-SELTEXT_L = 'Customer PO'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'VBELN'.
  LS_FIELDCAT-SELTEXT_L = 'Comm.Inv'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'VGBEL'.
  LS_FIELDCAT-SELTEXT_L = 'Delivery note'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'MATNR'.
  LS_FIELDCAT-SELTEXT_L = 'Material'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'ARKTX'.
  LS_FIELDCAT-SELTEXT_L = 'Material Descrtpion'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'CLASS'.
  LS_FIELDCAT-SELTEXT_L = 'PackAge'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'ZTERM'.
  LS_FIELDCAT-SELTEXT_L = 'Pay ment'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'NET_DUE_DATE'.
  LS_FIELDCAT-SELTEXT_L = 'Net due date'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'DMBTR'.
  LS_FIELDCAT-SELTEXT_L = 'Loc.Amount'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'LOC_CURRENCY'.
  LS_FIELDCAT-SELTEXT_L = 'Loc.Currency'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'AMOUNT'.
  LS_FIELDCAT-SELTEXT_L = 'Doc.Amount'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  LS_FIELDCAT-DO_SUM = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'DTAB'.
  LS_FIELDCAT-FIELDNAME = 'CURRENCY'.
  LS_FIELDCAT-SELTEXT_L = 'Doc.Currency'.
  LS_FIELDCAT-NO_ZERO = 'X'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = G_REPID
      I_BYPASSING_BUFFER      = 'X'
      IS_LAYOUT               = GS_LAYOUT
      IT_FIELDCAT             = GT_FIELDCAT[]
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*      I_DEFAULT               = 'X'
      I_SAVE                  = 'A'
      IT_EVENTS               = GT_EVENTS[]
      IS_VARIANT              = ALV_VARIANT
      IS_PRINT                = ALV_PRINT
      IT_FILTER               = GT_FILTER
    TABLES
      T_OUTTAB                = DTAB
   EXCEPTIONS
       PROGRAM_ERROR = 1
       OTHERS        = 2.

ENDFORM.                    "sub_output_to_alv


*&--------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->I_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                      RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: V_STRING(20) TYPE C.
  DATA: LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
  CASE I_UCOMM.
    WHEN 'DOUBLE'.
*      SORT I_DETAIL BY KUNNR TYPE.
*      PERFORM FIELDCAT_INIT USING LT_FIELDCAT 'X'.
*
*      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
*        EXPORTING
*          I_CALLBACK_PROGRAM      = G_REPID
*          I_BYPASSING_BUFFER      = 'X'
*          IS_LAYOUT               = GS_LAYOUT
*          IT_FIELDCAT             = LT_FIELDCAT[]
*          IT_SORT                 = GS_SORT[]
*          I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*          I_DEFAULT               = 'X'
*          I_SAVE                  = 'A'
*          IT_EVENTS               = GT_EVENTS[]
*          IS_VARIANT              = ALV_VARIANT
*          IS_PRINT                = ALV_PRINT
*        TABLES
*          T_OUTTAB                = I_DETAIL[].
  ENDCASE.

  CLEAR I_UCOMM.
ENDFORM.                    "USER_COMMAND 

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章