REPORT ZPPPTE001 NO STANDARD PAGE HEADING LINE-SIZE 255 MESSAGE-ID MG.

*----------------------------------------------------------------------*
* Program     :  ZPPPTE001                                             *
* Author      :  Patrick,Song                                          *
* Date        :  Aug 26, 2008                                          *
* Code type   :  conversion                                            *
* Version     :  new creation                                          *
* (interface/conversion/on-line transaction/report)                    *
*                                                                      *
*----------------------------------------------------------------------*
* Error handling :                                                     *
*----------------------------------------------------------------------*
* 1.                                                                   *
*                                                                      *
*----------------------------------------------------------------------*
* Change log :                                                         *
*----------------------------------------------------------------------*
* CR#       :                                                          *
* Corr. no. :                                                          *
* Date      :                                                          *
* Author    :                                                          *
* Change    :                                                          *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* include program & subrouting                                         *
*----------------------------------------------------------------------*
INCLUDE   : ZBCDWI000 .
TYPE-POOLS: KCDE.
TABLES: CRTX.
TABLES: CRVS_A.
TABLES: T100.

*----------------------------------------------------------------------*
* selection screen definition                                          *
*----------------------------------------------------------------------*
*  Input file information block B1
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE  TEXT-TB1.
PARAMETER:  P_FILE LIKE RLGRAP-FILENAME OBLIGATORY .
SELECTION-SCREEN END OF BLOCK B1.


*----------------------------------------------------------------------*
* Internal tables and field strings                                    *
*----------------------------------------------------------------------*
*-* to store uploaded data

*----------------------------------------------------------------------*
* Global program variables                                             *
*----------------------------------------------------------------------*
* define table to store tempoary data
DATA INT_TAB     TYPE KCDE_INTERN_STRUC OCCURS 0 WITH HEADER LINE.
DATABEGIN OF ITAB OCCURS 0 .
DATA: SFHNR   LIKE CRFHD-SFHNR  .
DATA: FHKTX   LIKE CRFHD-FHKTX  .
DATA: STOWK   LIKE CRFHD-STOWK  .
DATA: STORT   LIKE CRFHD-STORT  .
DATA: FGRU1   LIKE CRFHD-FGRU1  .
DATA: TXLINE2(040) .
DATA: TXLINE3(040) .
DATA: TXLINE4(040) .

DATA: SELK(001) .
DATAEND   OF ITAB .

DATA: S_STATUS       TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
      S_STATUS_ERR   TYPE SLIS_FORMNAME VALUE 'STANDARD_ER01',
      S_STATUS_RESULT TYPE SLIS_FORMNAME VALUE 'STANDARD_RT01',
      S_USER_COMM    TYPE SLIS_FORMNAME VALUE 'USER_COMM-ALV',
      S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.

CONSTANTS: C_NODATA(001VALUE ' '.   "nodata-character
DATA: C_GROUP(012VALUE 'ZPP_PRTCRT'.
*data: c_user(012) value  sy-uname .
DATA: C_KEEP(001) .
DATA: C_HOLDDATE LIKE SY-DATUM.

DATABEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATAEND OF BDCDATA.

DATA  : MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA  : SMALLLOG(001VALUE 'X'.
DATABEGIN OF MESSAGE OCCURS 0 .
        INCLUDE STRUCTURE BDCMSGCOLL .
DATA: MSTRING TYPE STRING .
DATA: SELK(001) .
DATAEND   OF MESSAGE .

DATA: L_PROCESSED(001) .
DATA: L_CHANGE(001) .

*----------------------------------------------------------------------*
* initialization.                                                      *
*----------------------------------------------------------------------*
INITIALIZATION.
  REFRESH: ITAB, INT_TAB .
  CLEAR  : ITAB, INT_TAB .
*----------------------------------------------------------------------*
* At Selection-screen                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  PERFORM GET_FILE_PATHNAME.


*----------------------------------------------------------------------*
* Start-of-selection                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  CLEAR: L_PROCESSED .

  PERFORM READ_INPUT_FILE .

  PERFORM PREPARE_ALV_FIELDS.
  PERFORM DISPLAY_ALV_RESULT .


*----------------------------------------------------------------------*
* End-of-selection                                                     *
*----------------------------------------------------------------------*
END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Form  GET_FILE_PATHNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FILE_PATHNAME .

  CALL FUNCTION 'WS_FILENAME_GET'             "Get file name
       EXPORTING
*            DEF_FILENAME     = ' '
*            DEF_PATH         = ' '
             MASK             = ',*.* ,*.*.'
             MODE             = '0'
             TITLE            = TEXT-H10
       IMPORTING
             FILENAME         = P_FILE
*            RC               =
       EXCEPTIONS
             INV_WINSYS       = 1
             NO_BATCH         = 2
             SELECTION_CANCEL = 3
             SELECTION_ERROR  = 4
             OTHERS           = 5.
  IF SY-SUBRC <> 0.
*            MESSAGE E016 WITH P_PATH.
  ENDIF.

ENDFORM.                    " GET_FILE_PATHNAME

*&---------------------------------------------------------------------*
*&      Form  READ_INPUT_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM READ_INPUT_FILE .

** call function to get path and name if parameter is initial
  IF P_FILE IS INITIAL.
    CALL FUNCTION 'F4_FILENAME'
      IMPORTING
        FILE_NAME = P_FILE.
  ENDIF.

  REFRESH: ITAB, INT_TAB .
  CLEAR  : ITAB, INT_TAB .

  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 2
      I_END_COL               = 8
      I_END_ROW               = 9999
    TABLES
      INTERN                  = INT_TAB
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  SORT INT_TAB BY ROW COL.

  REFRESH: ITAB.
  CLEAR  : ITAB .

  LOOP AT INT_TAB.
    AT NEW ROW.
      CLEAR: ITAB.
    ENDAT.
    CASE INT_TAB-COL.
      WHEN 1.
        MOVE INT_TAB-VALUE TO ITAB-SFHNR.
        TRANSLATE ITAB-SFHNR TO UPPER CASE.
      WHEN 2.
        MOVE INT_TAB-VALUE TO ITAB-FHKTX.
        TRANSLATE ITAB-FHKTX TO UPPER CASE.
      WHEN 3.
        MOVE INT_TAB-VALUE TO ITAB-STOWK.
        TRANSLATE ITAB-STOWK TO UPPER CASE.
      WHEN 4.
        MOVE INT_TAB-VALUE TO ITAB-STORT.
        TRANSLATE ITAB-STORT TO UPPER CASE.
      WHEN 5.
        MOVE INT_TAB-VALUE TO ITAB-FGRU1.
        TRANSLATE ITAB-FGRU1 TO UPPER CASE.
      WHEN 6.
        MOVE INT_TAB-VALUE TO ITAB-TXLINE2.
        TRANSLATE ITAB-TXLINE2 TO UPPER CASE.
      WHEN 7.
        MOVE INT_TAB-VALUE TO ITAB-TXLINE3.
        TRANSLATE ITAB-TXLINE3 TO UPPER CASE.
      WHEN 8.
        MOVE INT_TAB-VALUE TO ITAB-TXLINE4.
        TRANSLATE ITAB-TXLINE4 TO UPPER CASE.
    ENDCASE.
    AT END OF ROW.
      PERFORM FORMAT_ALPHA_OUTPUT CHANGING ITAB-SFHNR .
      SELECT SINGLE * FROM CRVS_A WHERE OBJTY = 'FH' AND SFHNR = ITAB-SFHNR .
      IF SY-SUBRC <> 0 .
        APPEND ITAB.
        CLEAR  ITAB.
      ENDIF .
    ENDAT.
  ENDLOOP.
ENDFORM.                    " READ_INPUT_FILE
*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELDS .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'SFHNR'       'ITAB' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS USING 'FHKTX'       'ITAB' '' TEXT-C02.
  PERFORM SET_ALV_FIELDS USING 'STOWK'       'ITAB' '' TEXT-C03.
  PERFORM SET_ALV_FIELDS USING 'STORT'       'ITAB' '' TEXT-C04.
  PERFORM SET_ALV_FIELDS USING 'FGRU1'       'ITAB' '' TEXT-C05.
  PERFORM SET_ALV_FIELDS USING 'TXLINE2'     'ITAB' '' TEXT-C06.
  PERFORM SET_ALV_FIELDS USING 'TXLINE3'     'ITAB' '' TEXT-C07.
  PERFORM SET_ALV_FIELDS USING 'TXLINE4'     'ITAB' '' TEXT-C08.

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_FIELDS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_RESULT .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-CPROG
      IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
      I_CALLBACK_PF_STATUS_SET    = S_STATUS
      I_DEFAULT                   = 'X'
      I_SAVE                      = 'X'
      I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
      IT_FIELDCAT                 = G_ALV_FIELDCAT[]
      IT_EVENTS                   = G_ALV_EVENT
    TABLES
      T_OUTTAB                    = ITAB[].

ENDFORM.                    " DISPLAY_ALV_RESULT

*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: FELD(10TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN 'PICK'.

    WHEN 'WCCT' .
      IF L_PROCESSED EQ SPACE .
        READ TABLE ITAB WITH KEY SELK = 'X'.
        IF SY-SUBRC <> 0 .
          MESSAGE E899 WITH TEXT-E02.
        ELSE.
          CLEAR: L_ANSWER .
          PERFORM POPUP_TO_CONFIRM USING TEXT-T01 TEXT-Q01.
          IF L_ANSWER = '1'.
            PERFORM PRT_TOOLS_CREATE_BACKGROUND .
            L_PROCESSED = 'Y'.
          ENDIF .
        ENDIF .
      ELSE.
        MESSAGE E899 WITH TEXT-E01.
      ENDIF .
    WHEN 'FCCT'.
      IF L_PROCESSED EQ SPACE .
        READ TABLE ITAB WITH KEY SELK = ' '.
        IF SY-SUBRC = 0 .
          MESSAGE E899 WITH TEXT-E02.
        ELSE.
          CLEAR: L_ANSWER .
          PERFORM POPUP_TO_CONFIRM USING TEXT-T01 TEXT-Q01.
          IF L_ANSWER = '1'.
            PERFORM PRT_TOOLS_CREATE_FOREGROUND.
            PERFORM PREPARE_PROCESSED_ALV.
            PERFORM DISPLAY_PROCESSED_RESULT .
            L_PROCESSED = 'Y'.
          ENDIF .
        ENDIF .
      ELSE.
        MESSAGE E899 WITH TEXT-E01.
      ENDIF .

  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    "user_command-alv


*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ALVST'.
  SET TITLEBAR  'ALVST'.

ENDFORM.                    "standard_st01
*&---------------------------------------------------------------------*
*&      Form  PRT_TOOLS_CREATE_BACKGROUND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRT_TOOLS_CREATE_BACKGROUND .

  PERFORM OPEN_GROUP.

  LOOP AT ITAB WHERE SELK EQ 'X'.

    REFRESH: BDCDATA. CLEAR: BDCDATA .

    PERFORM BDC_DYNPRO      USING 'SAPLCFST'         '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=DYGD'.
    PERFORM BDC_FIELD       USING 'CRFHD-SFHNR'       ITAB-SFHNR.
    PERFORM BDC_DYNPRO      USING 'SAPLCFST'         '0200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=LTXT'.
    PERFORM BDC_FIELD       USING 'CRFHD-FHKTX'       ITAB-FHKTX.
    PERFORM BDC_FIELD       USING 'CRFHD-STATUS'     '03'.
    PERFORM BDC_FIELD       USING 'CRFHD-PLANV'      '001'.
    IF SY-LANGU = 'E'.
      PERFORM BDC_FIELD     USING 'CRFHD-BASEH'      'ST'.
    ELSEIF SY-LANGU = '1' .
      PERFORM BDC_FIELD     USING 'CRFHD-BASEH'      '套'.
    ENDIF .
    PERFORM BDC_FIELD       USING 'CRFHD-STOWK'       ITAB-STOWK.
    PERFORM BDC_FIELD       USING 'CRFHD-STORT'       ITAB-STORT.
    PERFORM BDC_FIELD       USING 'CRFHD-FGRU1'       ITAB-FGRU1.


    PERFORM BDC_DYNPRO      USING 'SAPLSTXX'         '1100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=TXBA'.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(02)'  ITAB-TXLINE2.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(03)'  ITAB-TXLINE3.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(04)'  ITAB-TXLINE4.
    PERFORM BDC_DYNPRO      USING 'SAPLSPO1'         '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=YES'.

    PERFORM BDC_DYNPRO      USING 'SAPLCFST'         '0200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=DYVP'.
    PERFORM BDC_DYNPRO      USING 'SAPLCFST'         '0300'.
    PERFORM BDC_FIELD       USING 'CRFHD-STEUF'      '1'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=UPD'.
    PERFORM BDC_TRANSACTION USING 'CF01'.
  ENDLOOP .
  PERFORM CLOSE_GROUP.

  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " PRT_TOOLS_CREATE_BACKGROUND
*&---------------------------------------------------------------------*
*&      Form  BATCH_INPUT_SESSION_SUBMIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_INPUT_SESSION_SUBMIT .

*   Run BDC session automatically instead execute in SM35.
  SUBMIT RSBDCSUB AND RETURN
             WITH USER     =  SY-UNAME
             WITH MAPPE    =  C_GROUP
             WITH VON      =  SY-DATUM
             WITH BIS      =  SY-DATUM
             WITH Z_VERARB =  'X'
             WITH FEHLER   =  ''.

ENDFORM.                    " BATCH_INPUT_SESSION_SUBMIT


*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.

  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.

ENDFORM.                    "BDC_DYNPRO

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FNAM       text
*      -->FVAL       text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.

  IF FVAL <> C_NODATA.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.

ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  BDC_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->TCODE      text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.

  DATA: SMALLLOG(001) .

  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE     = TCODE
    TABLES
      DYNPROTAB = BDCDATA.

  IF SMALLLOG <> 'X'.
    WRITE: /(25'BDC_INSERT'(I03),
                 TCODE,
            (12'returncode:'(I05),
                 SY-SUBRC,
                 'RECORD:',
                 SY-INDEX.
  ENDIF.
  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

*&---------------------------------------------------------------------*
*&      Form  CLOSE_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
* close batchinput group
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
  WRITE: /(30'BDC_CLOSE_GROUP'(I04),
          (12'returncode:'(I05),
               SY-SUBRC.
ENDFORM.                    "CLOSE_GROUP

*&---------------------------------------------------------------------*
*&      Form  OPEN_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM OPEN_GROUP.

  SKIP.
  WRITE: /(20'Create group'(I01), C_GROUP.
  SKIP.
* open batchinput group
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT   = SY-MANDT
      GROUP    = C_GROUP
*     user     = c_user
      USER     = SY-UNAME
      KEEP     = C_KEEP
      HOLDDATE = C_HOLDDATE.
  WRITE: /(30'BDC_OPEN_GROUP'(I02),
          (12'returncode:'(I05),
               SY-SUBRC.
ENDFORM.                    "OPEN_GROUP

*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMM-ALV USING R_UCOMM LIKE SY-UCOMM
                     RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: FELD(10TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.

  CASE R_UCOMM.
    WHEN 'PICK'.
  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    "user_command-alv


*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ER01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ALVER'.
  SET TITLEBAR  'ALVER'.

ENDFORM.                    "STANDARD_ER01
*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_ERROR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_ERROR .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'SFHNR'       'I_ERROR' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS USING 'FHKTX'       'I_ERROR' '' TEXT-C02.
  PERFORM SET_ALV_FIELDS USING 'STOWK'       'I_ERROR' '' TEXT-C03.
  PERFORM SET_ALV_FIELDS USING 'STORT'       'I_ERROR' '' TEXT-C04.
  PERFORM SET_ALV_FIELDS USING 'FGRU1'       'I_ERROR' '' TEXT-C05.
  PERFORM SET_ALV_FIELDS USING 'TXLINE2'     'I_ERROR' '' TEXT-C06.
  PERFORM SET_ALV_FIELDS USING 'TXLINE3'     'I_ERROR' '' TEXT-C07.
  PERFORM SET_ALV_FIELDS USING 'TXLINE4'     'I_ERROR' '' TEXT-C08.

  PERFORM SET_ALV_FIELDS USING 'FIELD'       'I_ERROR' '' TEXT-A01.
  PERFORM SET_ALV_FIELDS USING 'VALUE'       'I_ERROR' '' TEXT-A02.
  PERFORM SET_ALV_FIELDS USING 'ERROR'       'I_ERROR' '' TEXT-A03.

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_ERROR

*&---------------------------------------------------------------------*
*&      Form  STANDARD_RT01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_RT01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  DELETE EXTAB WHERE FCODE = 'FCCT'.
  DELETE EXTAB WHERE FCODE = 'WCCT'.
  SET PF-STATUS 'ALVST'.
  SET TITLEBAR  'ALVST'.

ENDFORM.                    "STANDARD_rt01

*&---------------------------------------------------------------------*
*&      Form  PREPARE_PROCESSED_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_PROCESSED_ALV .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'TCODE'        'MESSAGE' '' TEXT-R01.
  PERFORM SET_ALV_FIELDS USING 'DYNAME'       'MESSAGE' '' TEXT-R02.
  PERFORM SET_ALV_FIELDS USING 'MSGSPRA'      'MESSAGE' '' TEXT-R03.
  PERFORM SET_ALV_FIELDS USING 'MSGTYP'       'MESSAGE' '' TEXT-R04.
  PERFORM SET_ALV_FIELDS USING 'MSGID'        'MESSAGE' '' TEXT-R05.
  PERFORM SET_ALV_FIELDS USING 'MSGNR'        'MESSAGE' '' TEXT-R06.
  PERFORM SET_ALV_FIELDS USING 'MSTRING'      'MESSAGE' '' TEXT-R07.

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_PROCESSED_ALV

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_PROCESSED_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_PROCESSED_RESULT .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM          = SY-CPROG
    IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
    I_CALLBACK_PF_STATUS_SET    = S_STATUS_RESULT
    I_DEFAULT                   = 'X'
    I_SAVE                      = 'X'
    I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
    IT_FIELDCAT                 = G_ALV_FIELDCAT[]
    IT_EVENTS                   = G_ALV_EVENT
  TABLES
    T_OUTTAB                    = MESSAGE[].

ENDFORM.                    " DISPLAY_PROCESSED_RESULT

*&---------------------------------------------------------------------*
*&      Form  BDC_TRANSACTION_PROCESS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->TCODE      text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION_PROCESS  USING TCODE.

  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
* call transaction using
  REFRESH MESSTAB.
  CALL TRANSACTION TCODE USING BDCDATA
                   MODE   'N'
                   UPDATE 'L'
                   MESSAGES INTO MESSTAB.
  L_SUBRC = SY-SUBRC.
  LOOP AT MESSTAB.
    MOVE-CORRESPONDING MESSTAB TO MESSAGE .
    SELECT SINGLE * FROM T100 WHERE SPRSL = MESSAGE-MSGSPRA
                              AND   ARBGB = MESSAGE-MSGID
                              AND   MSGNR = MESSAGE-MSGNR.
    IF SY-SUBRC = 0.
      L_MSTRING = T100-TEXT.
      IF L_MSTRING CS '&1'.
        REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
      ELSE.
        REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
      ENDIF.
      CONDENSE L_MSTRING.
      MOVE L_MSTRING TO MESSAGE-MSTRING .
    ENDIF.
    APPEND MESSAGE .
  ENDLOOP.
  REFRESH BDCDATA.
ENDFORM.                    " BDC_TRANSACTION_PROCESS

*&---------------------------------------------------------------------*
*&      Form  PRT_TOOLS_CREATE_FOREGROUND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRT_TOOLS_CREATE_FOREGROUND .

  LOOP AT ITAB WHERE SELK EQ 'X'.
    PERFORM BDC_DYNPRO      USING 'SAPLCFST'            '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=DYGD'.
    PERFORM BDC_FIELD       USING 'CRFHD-SFHNR'          ITAB-SFHNR.
    PERFORM BDC_DYNPRO      USING 'SAPLCFST'            '0200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=LTXT'.
    PERFORM BDC_FIELD       USING 'CRFHD-FHKTX'          ITAB-FHKTX.
    PERFORM BDC_FIELD       USING 'CRFHD-STATUS'        '03'.
    PERFORM BDC_FIELD       USING 'CRFHD-PLANV'         '001'.
    IF SY-LANGU = 'E'.
      PERFORM BDC_FIELD     USING 'CRFHD-BASEH'         'ST'.
    ELSEIF SY-LANGU = '1' .
      PERFORM BDC_FIELD     USING 'CRFHD-BASEH'         '套'.
    ENDIF .
    PERFORM BDC_FIELD       USING 'CRFHD-STOWK'          ITAB-STOWK.
    PERFORM BDC_FIELD       USING 'CRFHD-STORT'          ITAB-STORT.
    PERFORM BDC_FIELD       USING 'CRFHD-FGRU1'          ITAB-FGRU1.

    PERFORM BDC_DYNPRO      USING 'SAPLSTXX'            '1100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=TXBA'.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(02)'     ITAB-TXLINE2.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(03)'     ITAB-TXLINE3.
    PERFORM BDC_FIELD       USING 'RSTXT-TXLINE(04)'     ITAB-TXLINE4.

    PERFORM BDC_DYNPRO      USING 'SAPLSPO1'            '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=YES'.

    PERFORM BDC_DYNPRO      USING 'SAPLCFST'            '0200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=DYVP'.
    PERFORM BDC_DYNPRO      USING 'SAPLCFST'            '0300'.
    PERFORM BDC_FIELD       USING 'CRFHD-STEUF'         '1'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'          '=UPD'.

    PERFORM BDC_TRANSACTION_PROCESS USING 'CF01'.

  ENDLOOP .

ENDFORM.                    " PRT_TOOLS_CREATE_FOREGROUND