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.

*----------------------------------------------------------------------*
* 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.
DATA: BEGIN 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) .
DATA: END   OF ITAB .

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

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

DATA: BEGIN OF BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.

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.
      APPEND ITAB.
      CLEAR  ITAB.
    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(10) TYPE 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 .
            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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRT_TOOLS_CREATE .

  PERFORM OPEN_GROUP.

  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 USING 'CF01'.

  ENDLOOP .
  PERFORM CLOSE_GROUP.

  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " PRT_TOOLS_CREATE
*&---------------------------------------------------------------------*
*&      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(10) TYPE 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