Tuesday, August 7, 2018

Download ALV report display data in SAP ABAP.

*&---------------------------------------------------------------------*
*& Report  ZSW_DOWNLOAD
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSW_DOWNLOAD.

TABLES VBAK,VBAP,VBFA,LIKP,LIPS.

TYPESBEGIN OF TY_VBAK,
        VBELN TYPE VBAK-VBELN,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
      END OF TY_VBAK.
TYPESBEGIN OF TY_VBAP,
        VBELN TYPE VBAP-VBELN,
        POSNR TYPE VBAP-POSNR,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        NETPR TYPE VBAP-NETPR,
      END OF TY_VBAP.
TYPESBEGIN OF TY_LIKP,
        VBELN TYPE LIKP-VBELN,
      END OF TY_LIKP.
TYPESBEGIN OF TY_LIPS,
        VBELN TYPE LIPS-VBELN,
        POSNR TYPE LIPS-POSNR,
        LFIMG TYPE LIPS-LFIMG,
        NETPR TYPE LIPS-NETPR,
      END OF TY_LIPS.
TYPESBEGIN OF TY_VBFA,
        VBELV TYPE VBFA-VBELV,
        POSNV TYPE VBFA-POSNV,
        VBELN TYPE VBFA-VBELN,
        POSNN TYPE VBFA-POSNN,
        VBTYP_N TYPE VBFA-VBTYP_N,
      END OF TY_VBFA.
TYPESBEGIN OF TY_FINAL,
        VBELN TYPE VBAP-VBELN,
        POSNR TYPE VBAP-POSNR,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        NETPR TYPE VBAP-NETPR,
        VBELN1 TYPE LIPS-VBELN,
        POSNR1 TYPE LIPS-POSNR,
        LFIMG TYPE LIPS-LFIMG,
        NETPR1 TYPE LIPS-NETPR,
      END OF TY_FINAL.

DATA I_VBAK TYPE TABLE OF TY_VBAK,WA_VBAK TYPE TY_VBAK.
DATA I_VBAP TYPE TABLE OF TY_VBAP,WA_VBAP TYPE TY_VBAP.
DATA I_LIKP TYPE TABLE OF TY_LIKP,WA_LIKP TYPE TY_LIKP.
DATA I_LIPS TYPE TABLE OF TY_LIPS,WA_LIPS TYPE TY_LIPS.
DATA I_VBFA TYPE TABLE OF TY_VBFA,WA_VBFA TYPE TY_VBFA.
DATA I_FINAL TYPE TABLE OF TY_FINAL,WA_FINAL TYPE TY_FINAL.

DATA V_TITLE TYPE STRING.
DATA V_FNAME TYPE STRING.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS S_VBELN FOR VBAK-VBELN NO-EXTENSION.
SELECT-OPTIONS S_VKORG FOR VBAK-VKORG NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS S_VTWEG FOR VBAK-VTWEG NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS S_SPART FOR VBAK-SPART NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN SKIP.

PARAMETERS P_FILE TYPE RLGRAP-FILENAME.
PARAMETERS DOWNLOAD AS CHECKBOX.

INITIALIZATION.
  V_TITLE 'SALES DOCUMENT:ITEM DATA AND DELIVERY DETAILS'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM GET_FILE_PATH.

AT SELECTION-SCREEN ON HELP-REQUEST FOR P_FILE.
  PERFORM GET_HELP_FOR_FILE_PATH.

AT SELECTION-SCREEN.
  PERFORM VALIDATE_SALESDOCUMENT.
  PERFORM VALIDATE_SALESORGANIZATION.
  PERFORM VALIDATE_DISTRIBUTIONCHANNEL.
  PERFORM VALIDATE_DIVISION.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM DISPLAY_DATA.
  PERFORM DOWNLOAD_DATA.

END-OF-SELECTION.

TOP-OF-PAGE.
  PERFORM DISPLAY_HEADING.

END-OF-PAGE.
  PERFORM DISPLAY_FOOTER.


FORM GET_FILE_PATH .
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      PROGRAM_NAME  SYST-REPID
      DYNPRO_NUMBER SYST-DYNNR
      FIELD_NAME    P_FILE
    CHANGING
      FILE_NAME     P_FILE.
ENDFORM.                    " GET_FILE_PATH

FORM GET_HELP_FOR_FILE_PATH .
  MESSAGE 'PLEASE SELECT FILE PATH' TYPE 'I'.
ENDFORM.                    " GET_HELP_FOR_FILE_PATH

FORM VALIDATE_SALESDOCUMENT .
  SELECT SINGLE VBELN FROM VBAK INTO WA_VBAK WHERE VBELN IN S_VBELN.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID SALES DOCUMENT NO' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_SALESDOCUMENT

FORM VALIDATE_SALESORGANIZATION .
  SELECT VKORG FROM VBAK INTO WA_VBAK UP TO ROWS WHERE VKORG IN S_VKORG.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID SALES ORGANIZATION' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_SALESORGANIZATION

FORM VALIDATE_DISTRIBUTIONCHANNEL.
  SELECT VTWEG FROM VBAK INTO WA_VBAK UP TO ROWS WHERE VTWEG IN S_VTWEG.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID DISTRIBUTION CHANNEL' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_DISTRIBUTIONCHANNEL

FORM VALIDATE_DIVISION .
  SELECT SPART FROM VBAK INTO WA_VBAK UP TO ROWS WHERE SPART IN S_SPART.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID DIVISION' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_DIVISION

FORM GET_DATA .

  SELECT VBELN VKORG VTWEG SPART FROM VBAK INTO TABLE I_VBAK WHERE VBELN IN S_VBELN AND VKORG IN S_VKORG
                                                               AND VTWEG IN S_VTWEG AND SPART IN S_SPART.
  IF I_VBAK IS NOT INITIAL.

    SELECT VBELN POSNR MATNR ZMENG NETPR FROM VBAP INTO TABLE I_VBAP FOR ALL ENTRIES IN I_VBAK
                                                                    WHERE VBELN I_VBAK-VBELN.

    SELECT VBELV POSNV VBELN POSNN VBTYP_N FROM VBFA INTO TABLE I_VBFA FOR ALL ENTRIES IN I_VBAP
                                                    WHERE VBELV I_VBAP-VBELN AND VBTYP_N 'J'.

    SELECT VBELN FROM LIKP INTO TABLE I_LIKP FOR ALL ENTRIES IN I_VBFA WHERE VBELN I_VBFA-VBELN.


    SELECT VBELN POSNR LFIMG NETPR FROM LIPS INTO TABLE I_LIPS FOR ALL ENTRIES IN I_LIKP
                                                              WHERE VBELN I_LIKP-VBELN.
    SORT I_VBAP.
    SORT I_LIPS.

    LOOP AT I_VBFA INTO WA_VBFA.
      READ TABLE I_LIPS INTO WA_LIPS WITH KEY VBELN WA_VBFA-VBELN POSNR WA_VBFA-POSNN BINARY SEARCH.
      READ TABLE I_VBAP INTO WA_VBAP WITH KEY VBELN WA_VBFA-VBELV POSNR WA_VBFA-POSNV BINARY SEARCH.
      WA_FINAL-VBELN WA_VBAP-VBELN.
      WA_FINAL-POSNR WA_VBAP-POSNR.
      WA_FINAL-MATNR WA_VBAP-MATNR.
      WA_FINAL-ZMENG WA_VBAP-ZMENG.
      WA_FINAL-NETPR WA_VBAP-NETPR.
      WA_FINAL-VBELN1 WA_LIPS-VBELN.
      WA_FINAL-POSNR1 WA_LIPS-POSNR.
      WA_FINAL-LFIMG WA_LIPS-LFIMG.
      WA_FINAL-NETPR1 WA_LIPS-NETPR.
      APPEND WA_FINAL TO I_FINAL.
      CLEAR WA_FINAL.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " GET_DATA

FORM DISPLAY_DATA .
  LOOP AT I_FINAL INTO WA_FINAL.
    WRITE / WA_FINAL-VBELN,WA_FINAL-POSNR,WA_FINAL-MATNR,WA_FINAL-ZMENG,WA_FINAL-NETPR,
              WA_FINAL-VBELN1,WA_FINAL-POSNR1,WA_FINAL-LFIMG,WA_FINAL-NETPR.
  ENDLOOP.
ENDFORM.                    " DISPLAY_DATA

FORM DOWNLOAD_DATA .
  IF DOWNLOAD 'X'.
    V_FNAME P_FILE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        FILENAME              V_FNAME
        FILETYPE              'ASC'
        WRITE_FIELD_SEPARATOR 'X'
      TABLES
        DATA_TAB              I_FINAL.
    IF SY-SUBRC 0.
      MESSAGE 'DATA SUCCESSFULLY DOWNLOADED' TYPE 'I'.
    ENDIF.
  ENDIF.
ENDFORM.                    " DOWNLOAD_DATA

FORM DISPLAY_HEADING .
  WRITESY-ULINE.
  WRITE :/45 V_TITLE.
  WRITESY-ULINE.
ENDFORM.                    " DISPLAY_HEADING

FORM DISPLAY_FOOTER .
  WRITESY-ULINE.
  WRITE :/45 'INTEL GROUP OF COMPANIES'.
  WRITESY-ULINE.
ENDFORM.                    " DISPLAY_FOOTER

No comments:

Post a Comment