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