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