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

*----------------------------------------------------------------------*
* Program     :  ZPPWCE001                                             *
* 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.

*----------------------------------------------------------------------*
* table declaration
*----------------------------------------------------------------------*
TABLES: CSKS,
        CRHD,
        TFACD.

*----------------------------------------------------------------------*
* selection screen definition                                          *
*----------------------------------------------------------------------*
*  Input file information block B1
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE  TEXT-TB1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER:  P_CRT RADIOBUTTON GROUP GRP DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(20)  TEXT-S13 FOR FIELD P_CRT.
SELECTION-SCREEN POSITION 45.
PARAMETER:  P_CHG RADIOBUTTON GROUP GRP .
SELECTION-SCREEN COMMENT 48(20TEXT-S15 FOR FIELD P_CHG.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER:  P_KOSTL AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(20)  TEXT-S14 FOR FIELD P_KOSTL.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK B1.
PARAMETER:  P_FILE LIKE RLGRAP-FILENAME OBLIGATORY .

*----------------------------------------------------------------------*
* 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: ARBPL(008).    " Work Center
DATA: WERKS(004).    " Plant
DATA: VERWE(004).    " W/C Category
DATA: KTEXT1(040).   " W/C Short Text 1
DATA: CAPIT(001).    " Indicator for Intervals
DATA: BEGZT1  LIKE KAZA-BEGZT .
DATA: ENDZT1  LIKE KAZA-ENDZT.
DATA: PAUSE1  LIKE KAZA-PAUSE.
DATA: AZNOR1(003).
DATA: ENDZT2  LIKE KAZA-ENDZT.
DATA: BEGZT2  LIKE KAZA-BEGZT.
DATA: PAUSE2  LIKE KAZA-PAUSE.
DATA: AZNOR2(003).
DATA: KOSTL   LIKE CSKS-KOSTL.
DATA: KTEXT2(040).    " W/C Short Text 2
DATA: KTEXT3(040).    " W/C Short Text 3
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_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_WCCRT'.
*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.

DATABEGIN OF I_ERROR OCCURS 0 .
DATA: ARBPL(008).    " Work Center
DATA: WERKS(004).    " Plant
DATA: VERWE(004).    " W/C Category
DATA: KTEXT1(040).   " W/C Short Text 1
DATA: CAPIT(001).    " Indicator for Intervals
DATA: BEGZT1  LIKE KAZA-BEGZT .
DATA: ENDZT1  LIKE KAZA-ENDZT.
DATA: PAUSE1  LIKE KAZA-PAUSE.
DATA: AZNOR1(003).
DATA: KOSTL   LIKE CSKS-KOSTL.
DATAFIELD(020) .
DATAVALUE(020).
DATA: ERROR(040).
DATA: SELK(001).
DATAEND   OF I_ERROR .

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

DATA: L_IDENT LIKE TFACD-IDENT .
*----------------------------------------------------------------------*
* 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 CHECK_UPLOAD_DATA.

  CLEAR: TFACD .
  SELECT SINGLE * FROM TFACD WHERE IDENT IN ('TB''JH').
  MOVE TFACD-IDENT TO L_IDENT .

  IF I_ERROR[] IS INITIAL .
    PERFORM PREPARE_ALV_FIELDS.
    PERFORM DISPLAY_ALV_RESULT .
  ELSE.
    PERFORM PREPARE_ALV_ERROR .
    PERFORM DISPLAY_ALV_ERROR.
  ENDIF .


*----------------------------------------------------------------------*
* 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               = 16
      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 .

  IF P_CHG EQ 'X' .
    LOOP AT INT_TAB.
      AT NEW ROW.
        CLEAR: ITAB.
      ENDAT.
      CASE INT_TAB-COL.
        WHEN 1.
          MOVE INT_TAB-VALUE TO ITAB-WERKS.
          TRANSLATE ITAB-WERKS TO UPPER CASE.
        WHEN 2.
          MOVE INT_TAB-VALUE TO ITAB-ARBPL.
          TRANSLATE ITAB-ARBPL TO UPPER CASE.
        WHEN 3.
          MOVE INT_TAB-VALUE TO ITAB-KOSTL.
          TRANSLATE ITAB-KOSTL TO UPPER CASE.
      ENDCASE.
      AT END OF ROW.
        APPEND ITAB.
        CLEAR  ITAB.
      ENDAT.
    ENDLOOP.
  ELSE .

    LOOP AT INT_TAB.
      AT NEW ROW.
        CLEAR: ITAB.
      ENDAT.
      CASE INT_TAB-COL.
        WHEN 1.
          MOVE INT_TAB-VALUE TO ITAB-WERKS.
          TRANSLATE ITAB-WERKS TO UPPER CASE.
        WHEN 2.
          MOVE INT_TAB-VALUE TO ITAB-ARBPL.
          TRANSLATE ITAB-ARBPL TO UPPER CASE.
        WHEN 3.
          MOVE INT_TAB-VALUE TO ITAB-VERWE.
        WHEN 4.
          MOVE INT_TAB-VALUE TO ITAB-KTEXT1.
          TRANSLATE ITAB-KTEXT1 TO UPPER CASE.
        WHEN 5.
          MOVE INT_TAB-VALUE TO ITAB-CAPIT.
          TRANSLATE ITAB-CAPIT TO UPPER CASE.
        WHEN 6.
          MOVE INT_TAB-VALUE TO ITAB-BEGZT1.
        WHEN 7.
          MOVE INT_TAB-VALUE TO ITAB-ENDZT1.
        WHEN 8.
          MOVE INT_TAB-VALUE TO ITAB-PAUSE1.
        WHEN 9.
          MOVE INT_TAB-VALUE TO ITAB-AZNOR1.
        WHEN 10.
          MOVE INT_TAB-VALUE TO ITAB-BEGZT2.
        WHEN 11.
          MOVE INT_TAB-VALUE TO ITAB-ENDZT2.
        WHEN 12.
          MOVE INT_TAB-VALUE TO ITAB-PAUSE2.
        WHEN 13.
          MOVE INT_TAB-VALUE TO ITAB-AZNOR2.
        WHEN 14.
          MOVE INT_TAB-VALUE TO ITAB-KOSTL.
          TRANSLATE ITAB-KOSTL TO UPPER CASE.
        WHEN 15.
          MOVE INT_TAB-VALUE TO ITAB-KTEXT2.
          TRANSLATE ITAB-KTEXT2 TO UPPER CASE.
        WHEN 16.
          MOVE INT_TAB-VALUE TO ITAB-KTEXT3.
          TRANSLATE ITAB-KTEXT3 TO UPPER CASE.
      ENDCASE.
      AT END OF ROW.
        APPEND ITAB.
        CLEAR  ITAB.
      ENDAT.
    ENDLOOP.
  ENDIF .
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 'ARBPL'       'ITAB' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS   USING 'WERKS'       'ITAB' '' TEXT-C02.
  IF P_CRT EQ 'X' .
    PERFORM SET_ALV_FIELDS USING 'VERWE'       'ITAB' '' TEXT-C03.
    PERFORM SET_ALV_FIELDS USING 'KTEXT1'      'ITAB' '' TEXT-C04.
    PERFORM SET_ALV_FIELDS USING 'CAPIT'       'ITAB' '' TEXT-C05.
    PERFORM SET_ALV_FIELDS USING 'BEGZT1'      'ITAB' '' TEXT-C06.
    PERFORM SET_ALV_FIELDS USING 'ENDZT1'      'ITAB' '' TEXT-C07.
    PERFORM SET_ALV_FIELDS USING 'PAUSE1'      'ITAB' '' TEXT-C08.
    PERFORM SET_ALV_FIELDS USING 'ANZHL1'      'ITAB' '' TEXT-C09.
    PERFORM SET_ALV_FIELDS USING 'ENDZT2'      'ITAB' '' TEXT-C10.
    PERFORM SET_ALV_FIELDS USING 'BEGZT2'      'ITAB' '' TEXT-C11.
    PERFORM SET_ALV_FIELDS USING 'PAUSE2'      'ITAB' '' TEXT-C12.
    PERFORM SET_ALV_FIELDS USING 'ANZHL2'      'ITAB' '' TEXT-C13.
    PERFORM SET_ALV_FIELDS USING 'KOSTL'       'ITAB' '' TEXT-C14.
    PERFORM SET_ALV_FIELDS USING 'KTEXT2'      'ITAB' '' TEXT-C15.
    PERFORM SET_ALV_FIELDS USING 'KTEXT3'      'ITAB' '' TEXT-C16.
  ELSE .
    PERFORM SET_ALV_FIELDS USING 'KOSTL'       'ITAB' '' TEXT-C14.
  ENDIF .

  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 P_CRT EQ 'X' AND 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 WORK_CENTER_CREATE .
            L_PROCESSED = 'Y'.
          ENDIF .
        ENDIF .
      ELSEIF P_CRT EQ 'X' AND L_PROCESSED NE SPACE.
        MESSAGE E899 WITH TEXT-E01.
      ENDIF .
      IF P_CHG EQ 'X' AND 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 COST_CENTER_CHANGE .
            L_PROCESSED = 'Y'.
          ENDIF .
        ENDIF .
      ELSEIF P_CHG EQ 'X' AND L_PROCESSED NE SPACE.
        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  WORK_CENTER_CREATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WORK_CENTER_CREATE .

  PERFORM OPEN_GROUP.

  LOOP AT ITAB WHERE SELK EQ 'X'.

    IF ITAB-CAPIT EQ 'B' .

      refresh: bdcdata .clear: bdcdata .

      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'RC68A-ARBPL'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=GRND'.
      PERFORM BDC_FIELD       USING 'RC68A-WERKS'
                                     ITAB-WERKS.
      PERFORM BDC_FIELD       USING 'RC68A-ARBPL'
                                     ITAB-ARBPL.
      PERFORM BDC_FIELD       USING 'RC68A-VERWE'
                                     ITAB-VERWE.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=VORA'.
      PERFORM BDC_FIELD       USING 'P1000-STEXT'
                                     ITAB-KTEXT1.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KAUE'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KAZA'.
      PERFORM BDC_FIELD       USING 'KAKT-KTEXT'
                                     ITAB-KTEXT2.
      PERFORM BDC_FIELD       USING 'KAKO-NGRAD'
                                    '100'.
      PERFORM BDC_FIELD       USING 'KAKO-AZNOR'
                                     ITAB-AZNOR1.
      PERFORM BDC_FIELD       USING 'RC68K-BEGZT'
                                     ITAB-BEGZT1.
      PERFORM BDC_FIELD       USING 'RC68K-ENDZT'
                                     ITAB-ENDZT1.
      PERFORM BDC_FIELD       USING 'RC68K-PAUSE'
                                     ITAB-PAUSE1.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0116'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAZA-BEGZT(02)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BACK'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KTXT'.
      PERFORM BDC_FIELD       USING 'KAKO-AZNOR'
                                     ITAB-AZNOR1.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0108'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAKT-KTEXT(01)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=NPOS'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0108'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAKT-KTEXT(02)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=NEXT'.
      PERFORM BDC_FIELD       USING 'KAKT-KTEXT(02)'
                                     ITAB-KTEXT3.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BACK'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=TERM'.
      IF P_KOSTL EQ 'X'.
        PERFORM BDC_DYNPRO    USING 'SAPLCRA0' '4000'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '=VK11'.
        IF ITAB-VERWE = '0001' .
          PERFORM BDC_FIELD   USING 'RC68A-KAPART'
                                    '001'.
        ELSEIF ITAB-VERWE = '0003'.
          PERFORM BDC_FIELD   USING 'RC68A-KAPART'
                                    '002'.
        ENDIF .
        PERFORM BDC_DYNPRO    USING 'SAPLCRA0' '4000'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '/00'.
        PERFORM BDC_FIELD     USING 'CRKEYK-KOSTL'
                                     ITAB-KOSTL.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(02)'
                                    'DP01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(03)'
                                    'DL01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(04)'
                                    'IL01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(05)'
                                    'PO01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(06)'
                                    'OM01'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(02)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(03)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(04)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(05)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(06)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(02)'
                                    'ZAP006'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(03)'
                                    'ZAP007'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(04)'
                                    'ZAP007'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(05)'
                                    'ZAP006'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(06)'
                                    'ZAP007'.
      ENDIF .
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=UPD'.
      PERFORM BDC_TRANSACTION USING 'CR01'.

    ELSEIF ITAB-CAPIT EQ 'C' OR ITAB-CAPIT EQ 'A'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'RC68A-ARBPL'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=GRND'.
      PERFORM BDC_FIELD       USING 'RC68A-WERKS'
                                     ITAB-WERKS.
      PERFORM BDC_FIELD       USING 'RC68A-ARBPL'
                                     ITAB-ARBPL.
      PERFORM BDC_FIELD       USING 'RC68A-VERWE'
                                     ITAB-VERWE.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=VORA'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'P1000-STEXT'.
      PERFORM BDC_FIELD       USING 'P1000-STEXT'
                                     ITAB-KTEXT1.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KAUE'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KAZA'.
      PERFORM BDC_FIELD       USING 'KAKT-KTEXT'
                                     ITAB-KTEXT2.
      IF ITAB-CAPIT EQ 'A'.
        PERFORM BDC_FIELD     USING 'KAKO-NGRAD'
                                    '100'.
        PERFORM BDC_FIELD     USING 'KAKO-AZNOR'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'RC68K-BEGZT'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'RC68K-ENDZT'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'RC68K-PAUSE'
                                     ITAB-PAUSE1.
      ELSE.
        PERFORM BDC_FIELD     USING 'KAKO-VERSA'
                                     '1'.
        PERFORM BDC_FIELD     USING 'KAKO-MOSID'
                                     L_IDENT.
        PERFORM BDC_FIELD     USING 'KAKO-NGRAD'
                                    '100'.
        PERFORM BDC_FIELD     USING 'KAKO-AZNOR'
                                     ITAB-AZNOR1.
        PERFORM BDC_DYNPRO    USING 'SAPLCRK0' '0116'.
        PERFORM BDC_FIELD     USING 'BDC_CURSOR'
                                    'KAZA-DATUV(01)'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '=INSI'.
        PERFORM BDC_DYNPRO    USING 'SAPLCRK0' '0116'.
        PERFORM BDC_FIELD     USING 'BDC_CURSOR'
                                    'KAZA-ANZSH(01)'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '/00'.
        PERFORM BDC_FIELD     USING 'KAZA-DATUV(01)'
                                     SY-DATUM.
        PERFORM BDC_FIELD     USING 'KAZA-DATUB(01)'
                                    '9999.12.31'.
        PERFORM BDC_FIELD     USING 'KAZA-ANZSH(01)'
                                    '2'.
        PERFORM BDC_DYNPRO    USING 'SAPLCRK0' '0116'.
        PERFORM BDC_FIELD     USING 'BDC_CURSOR'
                                    'KAZA-BEGZT(08)'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '=P+'.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(02)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(03)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(04)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(05)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(06)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(07)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(08)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(09)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(02)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(03)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(04)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(05)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(06)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(07)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(08)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(09)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(02)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(03)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(04)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(05)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(06)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(07)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(08)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(09)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(02)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(03)'
                                     ITAB-AZNOR2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(04)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(05)'
                                     ITAB-AZNOR2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(06)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(07)'
                                     ITAB-AZNOR2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(08)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(09)'
                                     ITAB-AZNOR2.
        PERFORM BDC_DYNPRO    USING 'SAPLCRK0' '0116'.
        PERFORM BDC_FIELD     USING 'BDC_CURSOR'
                                    'KAZA-BEGZT(08)'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '=P+'.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(01)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(02)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(03)'
                                     ITAB-BEGZT1.
        PERFORM BDC_FIELD     USING 'KAZA-BEGZT(04)'
                                     ITAB-BEGZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(01)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(02)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(03)'
                                     ITAB-ENDZT1.
        PERFORM BDC_FIELD     USING 'KAZA-ENDZT(04)'
                                     ITAB-ENDZT2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(01)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(02)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(03)'
                                     ITAB-PAUSE1.
        PERFORM BDC_FIELD     USING 'KAZA-PAUSE(04)'
                                     ITAB-PAUSE2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(01)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(02)'
                                     ITAB-AZNOR2.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(03)'
                                     ITAB-AZNOR1.
        PERFORM BDC_FIELD     USING 'KAZA-ANZHL(04)'
                                     ITAB-AZNOR2.
      ENDIF .
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0116'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAZA-ANZHL(01)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BACK'.

      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=KTXT'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0108'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAKT-KTEXT(01)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=NPOS'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0108'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'KAKT-KTEXT(02)'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=NEXT'.
      PERFORM BDC_FIELD       USING 'KAKT-KTEXT(02)'
                                     ITAB-KTEXT3.
      PERFORM BDC_DYNPRO      USING 'SAPLCRK0' '0101'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=BACK'.
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=TERM'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                    'P3006-FORK1(01)'.
      IF P_KOSTL EQ 'X'.
        PERFORM BDC_DYNPRO    USING 'SAPLCRA0' '4000'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '=VK11'.
        PERFORM BDC_FIELD     USING 'BDC_CURSOR'
                                    'RC68A-KAPART'.
        IF ITAB-VERWE = '0003'.
          PERFORM BDC_FIELD   USING 'RC68A-KAPART'
                                     '002'.
        ELSEIF ITAB-VERWE = '0001'.
          PERFORM BDC_FIELD   USING 'RC68A-KAPART'
                                       '001'.
        ENDIF.
        PERFORM BDC_DYNPRO    USING 'SAPLCRA0' '4000'.
        PERFORM BDC_FIELD     USING 'BDC_OKCODE'
                                    '/00'.
        PERFORM BDC_FIELD     USING 'CRKEYK-KOSTL'
                                     ITAB-KOSTL.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(02)'
                                    'DP01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(03)'
                                    'DL01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(04)'
                                    'IL01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(05)'
                                    'PO01'.
        PERFORM BDC_FIELD     USING 'RC68A-LARXX(06)'
                                    'OM01'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(02)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(03)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(04)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(05)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-LEINH(06)'
                                    'H'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(02)'
                                    'ZAP006'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(03)'
                                    'ZAP007'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(04)'
                                    'ZAP007'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(05)'
                                    'ZAP006'.
        PERFORM BDC_FIELD     USING 'RC68A-FORXX(06)'
                                    'ZAP007'.
      ENDIF .
      PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '=UPD'.
      PERFORM BDC_TRANSACTION USING 'CR01'.
    ENDIF .
  ENDLOOP .

  PERFORM CLOSE_GROUP.

  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " WORK_CENTER_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  CHECK_UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_UPLOAD_DATA .

  REFRESH: I_ERROR .
  CLEAR  : I_ERROR .

  LOOP AT ITAB .
    IF  P_CRT EQ 'X' .
      CLEAR: CRHD.
      SELECT SINGLE * FROM CRHD WHERE ARBPL = ITAB-ARBPL
                                  AND WERKS = ITAB-WERKS .
      IF SY-SUBRC EQ 0 .
        I_ERROR-FIELD = 'ITAB-ARBPL'.
        I_ERROR-VALUE =  ITAB-ARBPL.
        I_ERROR-ERROR =  TEXT-M01 .
        APPEND I_ERROR .
        CLEAR  I_ERROR .
      ENDIF .
      IF P_KOSTL EQ 'X'.
        CLEAR: CSKS.
        SELECT SINGLE * FROM CSKS WHERE KOKRS = '1000'
                                    AND KOSTL = ITAB-KOSTL.
        IF SY-SUBRC NE 0 .
          MOVE-CORRESPONDING ITAB TO I_ERROR .
          I_ERROR-FIELD = 'ITAB-KOSTL'.
          I_ERROR-VALUE =  ITAB-KOSTL.
          I_ERROR-ERROR =  TEXT-M02 .
          APPEND I_ERROR .
          CLEAR  I_ERROR .
        ENDIF .
      ENDIF .
    ENDIF .

    IF  P_CHG EQ 'X' .
      CLEAR: CRHD.
      SELECT SINGLE * FROM CRHD WHERE ARBPL = ITAB-ARBPL
                                  AND WERKS = ITAB-WERKS .
      IF SY-SUBRC NE 0 .
        MOVE-CORRESPONDING ITAB TO I_ERROR .
        I_ERROR-FIELD = 'ITAB-ARBPL'.
        I_ERROR-VALUE =  ITAB-ARBPL.
        I_ERROR-ERROR =  TEXT-M03 .
        APPEND I_ERROR .
        CLEAR  I_ERROR .
      ENDIF .
      CLEAR: CSKS.
      SELECT SINGLE * FROM CSKS WHERE KOKRS = '1000'
                                  AND KOSTL = ITAB-KOSTL.
      IF SY-SUBRC NE 0 .
        I_ERROR-FIELD = 'ITAB-KOSTL'.
        I_ERROR-VALUE =  ITAB-KOSTL.
        I_ERROR-ERROR =  TEXT-M02 .
        APPEND I_ERROR .
        CLEAR  I_ERROR .
      ENDIF .
    ENDIF .
  ENDLOOP .

ENDFORM.                    " CHECK_UPLOAD_DATA

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

  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_ERR
    I_DEFAULT                   = 'X'
    I_SAVE                      = 'X'
    I_CALLBACK_USER_COMMAND     = S_USER_COMM
    IT_FIELDCAT                 = G_ALV_FIELDCAT[]
    IT_EVENTS                   = G_ALV_EVENT
  TABLES
    T_OUTTAB                    = I_ERROR[].

ENDFORM.                    " DISPLAY_ALV_ERROR


*-------------------------------------------------------------------
*       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  COST_CENTER_CHANGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM COST_CENTER_CHANGE .

  PERFORM OPEN_GROUP .
  LOOP AT ITAB WHERE SELK EQ 'X'.

    refresh: bdcdata . clear: bdcdata .

    PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=VK11'.
    PERFORM BDC_FIELD       USING 'RC68A-WERKS'
                                   ITAB-WERKS.
    PERFORM BDC_FIELD       USING 'RC68A-ARBPL'
                                   ITAB-ARBPL.
    PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '/00'.
    PERFORM BDC_FIELD       USING 'CRKEYK-KOSTL'
                                   ITAB-KOSTL.
    PERFORM BDC_FIELD       USING 'RC68A-LARXX(02)'
                                  'DP01'.
    PERFORM BDC_FIELD       USING 'RC68A-LARXX(03)'
                                  'DL01'.
    PERFORM BDC_FIELD       USING 'RC68A-LARXX(04)'
                                  'IL01'.
    PERFORM BDC_FIELD       USING 'RC68A-LARXX(05)'
                                  'PO01'.
    PERFORM BDC_FIELD       USING 'RC68A-LARXX(06)'
                                  'OM01'.
    PERFORM BDC_FIELD       USING 'RC68A-LEINH(02)'
                                  'H'.
    PERFORM BDC_FIELD       USING 'RC68A-LEINH(03)'
                                  'H'.
    PERFORM BDC_FIELD       USING 'RC68A-LEINH(04)'
                                  'H'.
    PERFORM BDC_FIELD       USING 'RC68A-LEINH(05)'
                                  'H'.
    PERFORM BDC_FIELD       USING 'RC68A-LEINH(06)'
                                  'H'.
    PERFORM BDC_FIELD       USING 'RC68A-FORXX(02)'
                                  'zap006'.
    PERFORM BDC_FIELD       USING 'RC68A-FORXX(03)'
                                  'zap007'.
    PERFORM BDC_FIELD       USING 'RC68A-FORXX(04)'
                                  'zap007'.
    PERFORM BDC_FIELD       USING 'RC68A-FORXX(05)'
                                  'zap006'.
    PERFORM BDC_FIELD       USING 'RC68A-FORXX(06)'
                                  'zap007'.
    PERFORM BDC_DYNPRO      USING 'SAPLCRA0' '4000'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=UPD'.
    PERFORM BDC_TRANSACTION USING 'CR02'.
  ENDLOOP .

  PERFORM CLOSE_GROUP.

  PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .

ENDFORM.                    " COST_CENTER_CHANGE

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

  CLEAR  : G_ALV_FIELDCAT .
  IF P_CHG EQ 'X'.
    PERFORM SET_ALV_FIELDS USING 'ARBPL'       'I_ERROR' '' TEXT-C01.
    PERFORM SET_ALV_FIELDS USING 'WERKS'       'I_ERROR' '' TEXT-C02.
    PERFORM SET_ALV_FIELDS USING 'KOSTL'       'I_ERROR' '' TEXT-C14.
    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.
  ELSE .
    PERFORM SET_ALV_FIELDS USING 'ARBPL'       'I_ERROR' '' TEXT-C01.
    PERFORM SET_ALV_FIELDS USING 'WERKS'       'I_ERROR' '' TEXT-C02.
    PERFORM SET_ALV_FIELDS USING 'VERWE'       'I_ERROR' '' TEXT-C03.
    PERFORM SET_ALV_FIELDS USING 'KTEXT1'      'I_ERROR' '' TEXT-C04.
    PERFORM SET_ALV_FIELDS USING 'CAPIT'       'I_ERROR' '' TEXT-C05.
    PERFORM SET_ALV_FIELDS USING 'BEGZT1'      'I_ERROR' '' TEXT-C06.
    PERFORM SET_ALV_FIELDS USING 'ENDZT1'      'I_ERROR' '' TEXT-C07.
    PERFORM SET_ALV_FIELDS USING 'PAUSE1'      'I_ERROR' '' TEXT-C08.
    PERFORM SET_ALV_FIELDS USING 'ANZHL1'      'I_ERROR' '' TEXT-C09.
    PERFORM SET_ALV_FIELDS USING 'KOSTL'       'I_ERROR' '' TEXT-C14.
    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.
  ENDIF .

  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_ERROR