2017년 1월 30일 월요일

ZBDCTOOL_FROM_EXCEL

REPORT ZBDCTOOL_FROM_EXCEL LINE-COUNT LINE-SIZE 80
       NO STANDARD PAGE HEADING.

*-----------------------------------------------------------------------
* BDC Data Upload by Recording
*-----------------------------------------------------------------------
* Licensed  by BIZTECH Consulting Co. in Korea
* Developed by BIZTECH Consulting Co.
*
*-----------------------------------------------------------------------
*  |*            ; comment
*  |*FIELDNAME   ; field name
*  |STARTDATA    ; data start
*  |
*  |
*  |ENDDATA      ; data end
*-----------------------------------------------------------------------
TYPE-POOLSSLIS KKBLOVRMKCDE.
DATADYNFLOW  LIKE BDCDATA OCCURS WITH HEADER LINE.
DATASAV_DF   LIKE BDCDATA OCCURS WITH HEADER LINE.
DATABDC_DATA LIKE BDCDATA OCCURS WITH HEADER LINE.
DATAPRG_DYN(50)ICODE(30).
*DATA: GR_FNAM LIKE RANGE OF BDCDATA-FNAM OCCURS 0 WITH HEADER LINE.
*
DATADOWLOAD(20)   VALUE '<Excel Dowload>',
      UPLOAD(12)    VALUE '<Processing>',
      TESTING(14)   VALUE '<Test Display>',
      TESTONE(10)   VALUE '<Test One>',
      SESSION(17)   VALUE '<Process Session>',
      SAVEREC(24)   VALUE '<Save RECORDING to File>'.
*
DATABEGIN OF ALPHA,
        X1 TYPE HEXTYP VALUE 65,
        X2 TYPE HEXTYP VALUE 32,
      END   OF ALPHA.
DATA  READTYPE.
DATAMESSTAB LIKE BDCMSGCOLL OCCURS WITH HEADER LINE.
DATAL_MSTRING(512).
DATA  CCODE(2).
DATA  TRAN_SUBRC TYPE SY-SUBRC.
DATAFILENAME     LIKE RLGRAP-FILENAME,
      FILETYPE     LIKE RLGRAP-FILETYPE VALUE 'ASC',
      ACT_FILENAME LIKE RLGRAP-FILENAME,
      FILESIZE TYPE I.

DATABEGIN OF GA_EXCEL_HEADER,
        DDTEXT TYPE AS4TEXT,
      END OF GA_EXCEL_HEADER.
DATABEGIN OF GT_EXCEL_BODY OCCURS 0,
        COL01(100),
        COL02(100),
        COL03(100),
        COL04(100),
        COL05(100),
        COL06(100),
        COL07(100),
        COL08(100),
        COL09(100),
        COL10(100),
        COL11(100),
        COL12(100),
        COL13(100),
        COL14(100),
        COL15(100),
        COL16(100),
        COL17(100),
        COL18(100),
        COL19(100),
        COL20(100),
        COL21(100),
        COL22(100),
        COL23(100),
        COL24(100),
        COL25(100),
        COL26(100),
        COL27(100),
        COL28(100),
        COL29(100),
        COL30(100),
        COL31(100),
        COL32(100),
        COL33(100),
        COL34(100),
        COL35(100),
        COL36(100),
        COL37(100),
        COL38(100),
        COL39(100),
        COL40(100),
        COL41(100),
        COL42(100),
        COL43(100),
        COL44(100),
        COL45(100),
        COL46(100),
        COL47(100),
        COL48(100),
        COL49(100),
        COL50(100),
        COL51(100),
        COL52(100),
        COL53(100),
        COL54(100),
        COL55(100),
        COL56(100),
        COL57(100),
        COL58(100),
        COL59(100),
        COL60(100),
      END OF GT_EXCEL_BODY.

*----------------------------------------------------------------------*
* EXCEL sheet using OLE automation.
*----------------------------------------------------------------------*
INCLUDE OLE2INCL.
DATA GT_XLS TYPE STANDARD TABLE OF KCDE_INTERN_STRUC
                            WITH HEADER LINE.
* Handles for OLE objects
DATAH_EXCEL TYPE OLE2_OBJECT,        " Excel object
      H_MAPL TYPE OLE2_OBJECT,         " list of workbooks
      H_MAP TYPE OLE2_OBJECT,          " workbook
      H_ZL TYPE OLE2_OBJECT,           " cell
      H_F TYPE OLE2_OBJECT.            " font

DATA :  FTAB        TYPE TABLE OF STRING,
        T_FIELDCAT  TYPE  SLIS_T_FIELDCAT_ALV,
        WA_FIELDCAT  TYPE SLIS_FIELDCAT_ALV.

* Recording
SELECTION-SCREEN BEGIN OF BLOCK RECO0 WITH FRAME TITLE T-RECO0.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-GRPID.
PARAMETERS:   P-GRPID LIKE APQI-GROUPID.
PARAMETERS:   P-MANDT LIKE APQI-MANDANT OBLIGATORY DEFAULT SY-MANDT.
SELECTION-SCREEN END   OF LINE.
* Created on
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-CREDT.
PARAMETERSP-CREDT LIKE APQI-CREDATE.
SELECTION-SCREEN END   OF LINE.
* Created by
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-CREUR.
PARAMETERSP-CREUR LIKE APQI-CREATOR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-RFILE.
PARAMETERSP-RFILE(128MEMORY ID DLP.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN END   OF BLOCK RECO0.
*
SELECTION-SCREEN BEGIN OF BLOCK FSRC0 WITH FRAME TITLE T-FSCR0.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P-FRPC RADIOBUTTON GROUP FSRC.
SELECTION-SCREEN COMMENT  3(15T-FRPC.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P-FRSR RADIOBUTTON GROUP FSRC.
SELECTION-SCREEN COMMENT 3(15T-FRSR.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-FNAME.
PARAMETERSP-FNAME LIKE RLGRAP-FILENAME
*                         DEFAULT 'C:\SAPWorkdir\MAT.TXT'
                         MEMORY ID DLF.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_DEFLT  AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(70T-DEFLT.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-NULTXT.
PARAMETERSX_NULIND   DEFAULT '!'.
SELECTION-SCREEN END   OF LINE.
SELECTION-SCREEN END   OF BLOCK FSRC0.
*
SELECTION-SCREEN BEGIN OF BLOCK SESS0 WITH FRAME TITLE T-SESS0.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_TRAN RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20T-TRAN.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-DMODE.
PARAMETERSDMODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31T-UMODE.
PARAMETERSUMODE LIKE CTU_PARAMS-UPDMODE DEFAULT 'L'.
SELECTION-SCREEN END   OF LINE.
*
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERSX_SES RADIOBUTTON GROUP BTYP.
SELECTION-SCREEN COMMENT 3(20T-SES.
SELECTION-SCREEN END   OF LINE.
PARAMETERSBDCGROUP(12).
PARAMETERSUSERNAME LIKE SY-UNAME DEFAULT SY-UNAME OBLIGATORY.
SELECTION-SCREEN END   OF BLOCK SESS0.
*
DATABEGIN OF XDAT OCCURS 0,
        DAT(1024),
      END   OF XDAT.
*
RANGESR-GRPID FOR APQI-GROUPID,
        R-CREDT FOR APQI-CREDATE,
        R-CREUR FOR APQI-CREATOR.
*
DATAAPQITAB LIKE APQI OCCURS WITH HEADER LINE,
      RECORDING_TYPE LIKE APQI-DATATYP VALUE '%BDC'.
*
DATAINDATA(1024OCCURS WITH HEADER LINE.
*
DATALEN TYPE I,
      N   TYPE I,
      O   TYPE I,
     SEQ  TYPE I,
     DAT(128),
     CH.
*
*DATA: BEGIN OF TAB,
*         T TYPE X VALUE '09',
*      END   OF TAB.
*
DATABDC_VALUE(128OCCURS WITH HEADER LINE,
      BDC_INDEX      TYPE I,
      BDC_COUNT      TYPE I.
DATA  TRANCODE LIKE TSTC-TCODE.
*
DATALIKE D020S,
      F LIKE D021S OCCURS WITH HEADER LINE,
      E LIKE D022S OCCURS WITH HEADER LINE,
      LIKE D023S OCCURS WITH HEADER LINE.
*
DATABEGIN OF DYNP,
        PROG LIKE D020S-PROG,
        DNUM LIKE D020S-DNUM,
      END OF DYNP.
TYPE-POOLSOLE2.
*
DATAXL_ROW    TYPE I,
      XL_COLUMN TYPE I.
DATAE_FONT(20VALUE '굴림',
      E_SIZE TYPE VALUE 12.
DATAE_SHEET_NO   TYPE VALUE 1,
      E_SHEET_NAME(20VALUE 'TEST',
      XL_TITLE(100).
*
* Automation EXCEL
DATAEXCEL TYPE OLE2_OBJECTBOOKS  TYPE OLE2_OBJECT,
      BOOK  TYPE OLE2_OBJECTSHEETS TYPE OLE2_OBJECT,
      SHEET TYPE OLE2_OBJECTCELLS  TYPE OLE2_OBJECT,
      CELL  TYPE OLE2_OBJECTAPPL   TYPE OLE2_OBJECT,
      FONT  TYPE OLE2_OBJECT.
DATADYN_TABIX LIKE SY-TABIX,
      DYN_ORDER LIKE SY-TABIX.
DATABEGIN OF FTEXT OCCURS 10,
        OUTPUTLEN LIKE DFIES-OUTPUTLEN,
        SCRTEXT_S(14),
        SCRTEXT_M(24),
        SCRTEXT_L LIKE DFIES-SCRTEXT_L,
        LINENO(4),
        TABIX LIKE SY-TABIX,
      END   OF FTEXT.
DATABEGIN OF FNAM OCCURS 10,
        FNAM LIKE BDCDATA-FNAM,
        ORDER LIKE SY-TABIX,
      END   OF FNAM.
DATAG_FNAME LIKE RLGRAP-FILENAME,
      G_MASK(20)   VALUE ',*.*,*.*.',
      G_MODE_OPEN  VALUE 'O',
      G_TITLE(30)  VALUE 'FileUploadDialog'.


AT SELECTION-SCREEN OUTPUT.
*
  GET PARAMETER ID 'DLP' FIELD P-RFILE.
  GET PARAMETER ID 'DLF' FIELD P-FNAME.
  TABLESAPQI,
         TSTCT,
         DFIES,
         X031L,
         T100.
*

*
INITIALIZATION.
*
*  bdcgroup = 'ZBDCGROUP'.
  USERNAME SY-UNAME.
  T-DMODE  'Run mode'.
  T-UMODE  'Update mode'.
  T-TRAN   'Call transaction'.
  T-SES    'Generate session'.
  T-GRPID  'Recording'.
  T-CREDT  'Created on'.
  T-CREUR  'Created by'.
  T-FRPC   'From PC'.
  T-FRSR   'From Server'.
  T-FNAME  'Path: file name of the BDC data'.
  T-FSCR0  'BDC data'.
  T-RECO0  'Selection for Recording'.
  T-SESS0  'Processing type'.
  T-DEFLT  'Default Value - Use no space RECORDING field value'.
  T-NULTXT 'Null indicator'.
  T-RFILE  'External recording file'.
*
  GET PARAMETER ID 'DLP' FIELD P-RFILE.
  GET PARAMETER ID 'DLF' FIELD P-FNAME.
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P-RFILE.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             ',*.*,*.*.'
      MODE             'O'
    IMPORTING
      FILENAME         P-RFILE
    EXCEPTIONS
      INV_WINSYS       1
      NO_BATCH         2
      SELECTION_CANCEL 3
      SELECTION_ERROR  4
      OTHERS           5.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P-FNAME.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      MASK             ',*.*,*.*.'
      MODE             'O'
    IMPORTING
      FILENAME         P-FNAME
    EXCEPTIONS
      INV_WINSYS       1
      NO_BATCH         2
      SELECTION_CANCEL 3
      SELECTION_ERROR  4
      OTHERS           5.

START-OF-SELECTION.
*
  IF P-GRPID IS INITIAL AND
     P-RFILE IS INITIAL.
    MESSAGE S208(00WITH
       'Enter the Recording name or Ext.Recording file name'.
    EXIT.
  ENDIF.
*
  IF X_SES 'X' AND BDCGROUP IS INITIAL.
    MESSAGE S208(00WITH 'Enter the BDCGROUP Name'.
    LEAVE LIST-PROCESSING.
  ENDIF.
*
  IF NOT P-GRPID IS INITIAL.
    PERFORM SET_SELECT_OPTIONS.
    SELECT FROM APQI INTO TABLE APQITAB
             WHERE GROUPID  IN R-GRPID
               AND CREDATE  IN R-CREDT
               AND DATATYP  RECORDING_TYPE
               AND MANDANT  P-MANDT
               AND CREATOR  IN R-CREUR
             ORDER BY CREDATE DESCENDING CRETIME DESCENDING.
  ENDIF.
  IF NOT P-RFILE IS INITIAL AND SY-DBCNT 0.
    PERFORM UPLOAD_THE_RECORDING.
  ENDIF.
*
  DESCRIBE TABLE APQITAB LINES SY-TFILL.
  IF SY-TFILL 0.
    MESSAGE S208(00WITH 'Not found recording !'.
    EXIT.
  ENDIF.
*
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
*
  LOOP AT APQITAB.
    WRITE/1 SY-VLINE,
             (6APQITAB-MANDANT,  SY-VLINE,
            (12APQITAB-GROUPID,  SY-VLINE,
            (10APQITAB-CREDATE,  SY-VLINE,
             (8APQITAB-CRETIME,  SY-VLINE,
            (12APQITAB-CREATOR,  SY-VLINE,
             (5APQITAB-TRANSCNTSY-VLINE,
             (5APQITAB-MSGCNT,   SY-VLINE.
    APQI APQITAB.
    HIDEAPQI-GROUPIDAPQI-QIDAPQI-MANDANTAPQITAB.
  ENDLOOP.
  ULINE.
  CLEAR APQITAB.
*
*
TOP-OF-PAGE.
*
  FORMAT COLOR COL_HEADING.
  ULINE.
  WRITE/1 SY-VLINE,
           (6'Client',     SY-VLINE,
          (12'Recording',  SY-VLINE,
          (10'Date',       SY-VLINE,
           (8'Time',       SY-VLINE,
          (12'Created by'SY-VLINE,
           (5'Trans',      SY-VLINE,
           (5'Scrn',       SY-VLINE.
  ULINE.
*
AT LINE-SELECTION.
*
  IF SY-LSIND 1.
    CHECK NOT APQI-GROUPID IS INITIAL.
    CLEAR ICODE.
    PERFORM PUT_SCREEN_TEMPLATE.
    CLEAR ICODE.
  ELSEIF SY-LSIND 2.
    CLEAR ICODE.
    GET CURSOR FIELD ICODE.
*
    IF ICODE 'UPLOAD' OR ICODE 'TESTING' OR ICODE 'TESTONE'.

      PERFORM UPLOAD_DATA.
      PERFORM EXECUTION_BDC.
*      DESCRIBE TABLE INDATA LINES SY-TFILL.
*      IF SY-TFILL > 0.
*        PERFORM MAKE_BDC_DATA.
*      ENDIF.
    ELSEIF ICODE 'DOWLOAD'.
      PERFORM DOWNLOAD_EXCEL_FORM .
    ELSEIF ICODE 'SESSION'.
      PERFORM PROCESS_SESSION.
    ELSEIF ICODE 'SAVEREC'.
      PERFORM SAVE_RECORDING.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  EXCLE_PROCESSING
*&---------------------------------------------------------------------*
FORM EXCLE_PROCESSING.

*  DATA: LT_XLS LIKE ZPTPCS0001 OCCURS 0 WITH HEADER LINE,
*        L_SUBRC LIKE SY-SUBRC.
*  REFRESH GT_UP.
*  CLEAR GT_UP.
*
*  PERFORM ZPTCM_EXCEL_UPLOAD TABLES LT_XLS
*                             USING  P_FILE.
*  IF NOT GT_UP[] IS INITIAL.
*    PERFORM EXCEL_UPLOAD_PROCESS.
*  ENDIF.

ENDFORM.                    " EXCLE_PROCESSING
*&---------------------------------------------------------------------*
*&      Form  CALL_WS_UPLOAD
*&---------------------------------------------------------------------*
FORM CALL_WS_UPLOAD.
*  DATA: BEGIN OF LT_PLAN OCCURS 0,
*          KOSTL(10),
*          KTEXT(20),
*          STAGR(6),
*          BEZEI(40),
*          SMEXXX(15),
*        END OF LT_PLAN.
*
*  DATA: LT_COPY LIKE LT_PLAN OCCURS 0 WITH HEADER LINE.
*  DATA: LT_RESUL LIKE GT_RESUL OCCURS 0 WITH HEADER LINE.
*  DATA: LA_PLAN LIKE LT_PLAN.
*  DATA: L_CHEK,
*        L_TABIX LIKE SY-TABIX.
*
*  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
*    EXPORTING
*      FILENAME                = P-FNAME
*      I_BEGIN_COL             = 1
*      I_BEGIN_ROW             = 1
*      I_END_COL               = 256
*      I_END_ROW               = 65536
*    TABLES
*      INTERN                  = GT_XLS
*    EXCEPTIONS
*      INCONSISTENT_PARAMETERS = 1
*      UPLOAD_OLE              = 2
*      OTHERS                  = 3.
*
*  IF SY-SUBRC = 0.
*    SORT GT_XLS BY ROW COL.
*    LOOP AT GT_XLS.
*      ASSIGN COMPONENT GT_XLS-COL OF STRUCTURE LT_PLAN TO <FS>.
*      <FS> = GT_XLS-VALUE.
*      AT END OF ROW.
*        APPEND LT_PLAN.
*        CLEAR LT_PLAN.
*      ENDAT.
*    ENDLOOP.
*  ENDIF.
*
** HEADER 삭제
*  DATA: L_INDEX LIKE SY-INDEX.
*  DO P_LINE TIMES.
*    DELETE LT_PLAN INDEX 1.
*  ENDDO.
*
*  DELETE LT_PLAN WHERE KOSTL EQ ' '
*                 OR    STAGR EQ ' '.
*
*  SORT LT_PLAN.
*
*  LT_COPY[] = LT_PLAN[].
*  LOOP AT LT_PLAN.
*    LA_PLAN = LT_PLAN.
*
**   에러 결과값을 보여주기 위해서
*    MOVE-CORRESPONDING LT_PLAN TO GT_RESUL.
*    GT_RESUL-COUNT = SY-TABIX.
*
**   COST CENTER CONVERSION
*    PERFORM ALPHA_CONVERSION USING    LA_PLAN-KOSTL
*                             CHANGING GT_LIST-KOSTL.
**   COST CENTER TEXT
*    PERFORM COST_CENTER_TEXT USING    '1000'
*                                      GT_LIST-KOSTL
*                             CHANGING GT_LIST-KOTXT.
*
**   SKF
*    GT_LIST-STAGR = LT_PLAN-STAGR.
**   SKF TEXT
*    PERFORM SKF_TEXT USING    '1000'
*                             GT_LIST-STAGR
*                             CHANGING GT_LIST-STTXT.
*
**   Cost Center Check
*    SELECT SINGLE * FROM CSKS
*           WHERE KOKRS EQ '1000'
*           AND   KOSTL EQ GT_LIST-KOSTL
*           AND   DATBI EQ '99991231'.
*    IF SY-SUBRC EQ 0.
*    ELSE.
*      L_CHEK = 'X'.
**     RED ICON을 보여줌
*      PERFORM GET_ICON USING    ICON_RED
*                       CHANGING GT_RESUL-ICONS.
*      CONCATENATE 'Cost Center'  LA_PLAN-KOSTL
*                   '가 등록되지 않았습니다.'
*                   INTO GT_RESUL-RESUL SEPARATED BY SPACE.
*      APPEND GT_RESUL.
*    ENDIF.
*
**   SKF Check
*    IF GT_LIST-STAGR NE P_STAGR.
*      L_CHEK = 'X'.
**     RED ICON을 보여줌
*      PERFORM GET_ICON USING    ICON_RED
*                       CHANGING GT_RESUL-ICONS.
*      CONCATENATE '엑셀과 선택화면 SKF가 서로 다릅니다.'
*                  GT_LIST-STAGR '/' P_STAGR
*                   INTO GT_RESUL-RESUL SEPARATED BY SPACE.
*      APPEND GT_RESUL.
*    ENDIF.
*
*    SELECT SINGLE * FROM TKA03
*           WHERE STAGR EQ GT_LIST-STAGR
*           AND   KOKRS EQ '1000'.
*    IF SY-SUBRC EQ 0.
*    ELSE.
*      L_CHEK = 'X'.
**     RED ICON을 보여줌
*      PERFORM GET_ICON USING    ICON_RED
*                       CHANGING GT_RESUL-ICONS.
*      CONCATENATE 'SKF'  LA_PLAN-STAGR
*                   '가 등록되지 않았습니다.'
*                   INTO GT_RESUL-RESUL SEPARATED BY SPACE.
*      APPEND GT_RESUL.
*
*    ENDIF.
*
**   중복여부 체크
*    READ TABLE LT_COPY WITH KEY KOSTL = LA_PLAN-KOSTL
*                                STAGR = LA_PLAN-STAGR.
*    IF SY-SUBRC EQ 0.
*      L_TABIX = SY-TABIX.
*      DELETE LT_COPY INDEX L_TABIX.
*      READ TABLE LT_COPY WITH KEY KOSTL = LA_PLAN-KOSTL
*                                  STAGR = LA_PLAN-STAGR.
*      IF SY-SUBRC EQ 0.
**       RED ICON을 보여줌
*        PERFORM GET_ICON USING    ICON_RED
*                         CHANGING GT_RESUL-ICONS.
*        CONCATENATE  'Cost Center'    LA_PLAN-KOSTL
*                     'SKF'            LA_PLAN-STAGR
*                     '가 중복'
*                     INTO GT_RESUL-RESUL SEPARATED BY SPACE.
*        APPEND GT_RESUL.
**       중복체크하기 위해서 MOVE
*        LT_RESUL = GT_RESUL.
*        APPEND LT_RESUL.
*      ELSE.
*        READ TABLE LT_RESUL WITH KEY KOSTL = LA_PLAN-KOSTL
*                                     STAGR = LA_PLAN-STAGR.
*        IF SY-SUBRC EQ 0.
**         RED ICON을 보여줌
*          PERFORM GET_ICON USING    ICON_RED
*                           CHANGING GT_RESUL-ICONS.
*          CONCATENATE  'Cost Center'    LA_PLAN-KOSTL
*                       'SKF'            LA_PLAN-STAGR
*                       '가 중복'
*                       INTO GT_RESUL-RESUL SEPARATED BY SPACE.
*          APPEND GT_RESUL.
*        ELSE.
*          IF L_CHEK NE 'X'.
**           GREEN ICON을 보여줌
*            PERFORM GET_ICON USING    ICON_GREEN
*                             CHANGING GT_RESUL-ICONS.
*            GT_RESUL-RESUL = ' '.
*            APPEND GT_RESUL.
*          ENDIF.
*        ENDIF.
*      ENDIF.
*    ENDIF.
*
*    GT_LIST-SMEXXX = LA_PLAN-SMEXXX.
*
*
*    COLLECT GT_LIST.  CLEAR GT_LIST.
*
*    CLEAR: L_CHEK, LT_RESUL, GT_RESUL.
*  ENDLOOP.

ENDFORM.                    " CALL_WS_UPLOAD
*&---------------------------------------------------------------------*
*&      Form  put_screen_template
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PUT_SCREEN_TEMPLATE.
*
*
  REFRESHFTEXTFNAM.
  CLEAR FNAM.
  CLEAR DYN_ORDER.

  ALPHA-X1 65.
  ALPHA-X2 32.
*
  IF ICODE IS INITIAL AND NOT P-GRPID IS INITIAL.
    CALL FUNCTION 'BDC_OBJECT_READ'
      EXPORTING
        QUEUE_ID  APQI-QID
        DATATYPE  RECORDING_TYPE
*       CLIENT    = APQI-MANDANT
      TABLES
        DYNPROTAB DYNFLOW
      EXCEPTIONS
        NOT_FOUND 1
        OTHERS    99.
    IF SY-SUBRC <> 0.
      MESSAGE S208(00WITH 'Cannot get the Recoreing info.'.
      EXIT.
    ENDIF.
  ENDIF.
*
  NEW-PAGE LINE-SIZE 120.
*
  WRITE :   DOWLOAD  COLOR HOTSPOT.
*
  WRITE /1  UPLOAD  COLOR HOTSPOT.
  IF X_TRAN 'X'.
    WRITETESTONE COLOR HOTSPOT.
  ENDIF.
  WRITETESTING COLOR HOTSPOT.
  WRITESAVEREC COLOR HOTSPOT.
*
  ULINE.
  FORMAT COLOR COL_HEADING INTENSIFIED OFF.
* Recording Name
  WRITE AT /1(SY-LINSZ'Recording   :',
             15  APQI-GROUPID.
*
  ULINE.
*
  LOOP AT DYNFLOW.
    DYN_TABIX SY-TABIX.
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode
      TSTCT-TCODE DYNFLOW-FNAM.
      TRANCODE    TSTCT-TCODE.
      SELECT SINGLE FROM TSTCT WHERE SPRSL SY-LANGU
                                   AND TCODE TSTCT-TCODE.
      FORMAT COLOR COL_KEY.
      WRITE AT /1(SY-LINSZ'Transaction :'.
      WRITE:     15 TSTCT-TCODE,
                    TSTCT-TTEXT.
      ULINE.
    ELSEIF DYNFLOW-DYNBEGIN 'X'.
      PRG_DYN    DYNP-PROG DYNFLOW-PROGRAM.
      PRG_DYN+41 DYNP-DNUM DYNFLOW-DYNPRO.
      IMPORT DYNPRO H F E ID DYNP.
      CONDENSE PRG_DYN.
      FORMAT COLOR COL_GROUP.
      WRITE AT /1(SY-LINSZSPACE,
              PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        IF NOT X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE ).
          IF ALPHA-X2 32.
            ALPHA-X1 ALPHA-X1 + 1.
            IF ALPHA-X1 > 90.
              IF ALPHA-X2 32.
                ALPHA-X1 ALPHA-X2 65.
              ENDIF.
            ENDIF.
          ELSE.
            ALPHA-X2 ALPHA-X2 + 1.
            IF ALPHA-X2 > 90.
              ALPHA-X1 ALPHA-X1 + 1.
              ALPHA-X2 65.
            ENDIF.
          ENDIF.
        ENDIF.
*
        PERFORM GET_FILENAME.
        FORMAT COLOR COL_NORMAL.
*
        WRITE/6 DYNFLOW-FNAM(25COLOR COL_POSITIVE,
               31 DFIES-FIELDTEXT(30).
        IF X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE.
          WRITE 61(5'.'.
        ELSE.
          WRITE:61(2ALPHA-X1 COLOR COL_TOTAL,
                63(2ALPHA-X1 COLOR COL_TOTAL.

          ADD TO FNAM-ORDER.
          MOVE DYNFLOW-FNAM  TO FNAM-FNAM.
          APPEND FNAM.
        ENDIF.
*
        IF ICODE 'TESTING'.
          READ TABLE SAV_DF INDEX DYN_TABIX.
          DYNFLOW-FVAL SAV_DF-FVAL.
        ENDIF.
        WRITE66 DYNFLOW-FVAL.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                               " put_screen_template
*&---------------------------------------------------------------------*
*&      Form  upload_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA.

  DATAL_SUBRC TYPE SY-SUBRC.

  FIELD-SYMBOLS <FS> TYPE ANY.
  REFRESH GT_EXCEL_BODY.
  IF P-FRPC 'X'.

    PERFORM CALL_OPEN_DIALOG.

*    PERFORM WS_FILENAME_GET USING    'O'    "파일 열기
*                            CHANGING P-FNAME
*                                     L_SUBRC.
    CASE SY-SUBRC.
      WHEN 0.
        CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
          EXPORTING
            FILENAME                P-FNAME
            I_BEGIN_COL             2
            I_BEGIN_ROW             3
            I_END_COL               256
            I_END_ROW               65536
          TABLES
            INTERN                  GT_XLS
          EXCEPTIONS
            INCONSISTENT_PARAMETERS 1
            UPLOAD_OLE              2
            OTHERS                  3.

        IF SY-SUBRC 0.
          SORT GT_XLS BY ROW COL.
**         Header 값 삭제
*          DELETE GT_XLS
*                 WHERE ROW EQ 1.
**                 AND   COL EQ 1.
          LOOP AT GT_XLS.
            ASSIGN COMPONENT GT_XLS-COL OF STRUCTURE
              GT_EXCEL_BODY TO <FS>.
            <FS> GT_XLS-VALUE.
            AT END OF ROW.
              APPEND GT_EXCEL_BODY.
              CLEAR GT_EXCEL_BODY.
            ENDAT.
          ENDLOOP.
        ENDIF.

      WHEN OTHERS.
*       취소
    ENDCASE.

  ELSE.

    DATAOPEN_MSG(80).
    OPEN DATASET P-FNAME FOR INPUT IN TEXT MODE
                         ENCODING DEFAULT
                         MESSAGE OPEN_MSG.
    IF SY-SUBRC NE 0.
      MESSAGE S453(00WITH 'Data Open error :' OPEN_MSG.
      EXIT.
    ENDIF.
*
    MESSAGE S453(00WITH 'Reading...' SPACE.
    DO.
      READ DATASET P-FNAME INTO INDATA.
      IF SY-SUBRC NE 0EXITENDIF.
      APPEND INDATA.
    ENDDO.
    CLOSE DATASET P-FNAME.

  ENDIF.

  SET PARAMETER ID 'DLF' FIELD P-FNAME.

ENDFORM.                               " upload_data
*&---------------------------------------------------------------------*
*&      Form  CALL_OPEN_DIALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CALL_OPEN_DIALOG .
*
  IF P-FNAME <> SPACE.
    MOVE P-FNAME TO G_FNAME.
    SET PARAMETER ID 'GR9' FIELD G_FNAME"Upload path
  ELSE.

  ENDIF.
*
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_FILENAME     G_FNAME
      MASK             G_MASK
      MODE             G_MODE_OPEN
      TITLE            G_TITLE
    IMPORTING
      FILENAME         G_FNAME
    EXCEPTIONS
      INV_WINSYS       01
      NO_BATCH         02
      SELECTION_CANCEL 03
      SELECTION_ERROR  04.
*
  IF SY-SUBRC AND G_FNAME <> SPACE.
    P-FNAME G_FNAME.
    SET PARAMETER ID 'GR9' FIELD G_FNAME"Upload path
  ELSE.
  ENDIF.
*
ENDFORM.                    " call_open_dialog
*&---------------------------------------------------------------------*
*&      Form  WS_FILENAME_GET
*&---------------------------------------------------------------------*
FORM WS_FILENAME_GET USING    P_MODE
                     CHANGING P_FILE
                              P_SUBRC TYPE SY-SUBRC.
  DATAL_DEF_FILENAME LIKE RLGRAP-FILENAME"VALUE '*.XLS',
        L_DEF_PATH     LIKE RLGRAP-FILENAME" VALUE 'C:\',
        L_TMP_FILENAME LIKE RLGRAP-FILENAME,
        L_TMP_MASK(80VALUE ',*.*,*.*.'.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      DEF_FILENAME     L_DEF_FILENAME
      DEF_PATH         L_DEF_PATH
      MASK             L_TMP_MASK
      MODE             P_MODE
    IMPORTING
      FILENAME         P_FILE
    EXCEPTIONS
      INV_WINSYS       01
      NO_BATCH         02
      SELECTION_CANCEL 03
      SELECTION_ERROR  04.
  P_SUBRC SY-SUBRC.
  CASE SY-SUBRC.
    WHEN 3.
*      MESSAGE S000 "DISPLAY LIKE 'E'
*              WITH '파일 선택을 취소했습니다.'.
  ENDCASE.
ENDFORM.                    " WS_FILENAME_GET
*&---------------------------------------------------------------------*
*&      Form  make_bdc_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAKE_BDC_DATA.
*
  DATASTARTEND.
  CLEAR BDC_COUNT.
*
  IF ICODE 'UPLOAD' OR ICODE 'TESTONE'.
    NEW-PAGE LINE-SIZE 255.
  ENDIF.
*
  LOOP AT INDATA.
    IF INDATA(1'*'.                "comment row
      CONTINUE.
    ENDIF.
*
    IF INDATA(9'STARTDATA'.        "data start row
      START 'X'.
    ENDIF.
*
    IF INDATA(7'ENDDATA'.          "data finished row
      END 'X'.
    ENDIF.
*
    CHECK START 'X'.
*
    LEN STRLENINDATA ).
    CLEARN,O,SEQ,DAT.
    REFRESH BDC_VALUE.
    DO.
      IF => LEN.
        EXIT.
      ENDIF.
*
      CH INDATA+N(1).
      IF CH CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB"TAB.
        SEQ SEQ + 1.
        PERFORM MOVE_BDC.
        ADD TO N.
        CLEARODAT.
      ELSE.
        DAT+O(1INDATA+N(1).
        ADD TOON.
      ENDIF.
    ENDDO.
    SEQ SEQ + 1.
    PERFORM MOVE_BDC.
    CLEAR DAT.
*
    PERFORM APPEND_TO_BDC.
*
    IF END 'X' OR ICODE NE 'UPLOAD' AND START 'X' ).
      EXIT.
    ENDIF.
  ENDLOOP.
*
  PERFORM CLOSE_BDC_GROUP.
*
  IF START IS INITIAL.
    WRITE'ERROR :' COLOR COL_NEGATIVE,
             'I Can''t found the ''STARTDATA'' tag.'.
  ENDIF.
*
  IF SY-SUBRC 0.
    IF ICODE 'UPLOAD' AND X_SES 'X'.
      WRITE/ SESSION COLOR HOTSPOT.
      ULINE.
      WRITE'BDC session created.',
             / SY-ULINE,
             / 'BDC session :'BDCGROUP,
             / 'BDC Count   :'BDC_COUNT.
    ELSEIF ICODE 'TESTING'.
      PERFORM PUT_SCREEN_TEMPLATE.
      SY-LSIND SY-LSIND 1.
    ENDIF.
  ENDIF.
*
ENDFORM.                               " make_bdc_data
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_EXCEL_FORM
*&---------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_FORM .
  DATA COL_CNT  TYPE I,
         CELL_CNT TYPE VALUE '1'.

  DATAL_TABIX LIKE SY-TABIX,
        L_LAST_FLAG TYPE C,
        L_INT(2TYPE N,
        L_DO_TIMES TYPE I.
  DATAL_ITAB_NAME(30),
        L_FIELDNAME(50).
  DATA  L_TITLE TYPE STRING.
  DATA LT_EXCEL_HEADER LIKE GA_EXCEL_HEADER OCCURS WITH HEADER LINE.
  DATALT_DYNFLOW TYPE STANDARD TABLE OF BDCDATA.
  FIELD-SYMBOLS<FS_FNAME> TYPE ANY.

  LOOP AT DYNFLOW.
    L_TABIX SY-TABIX.
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode

    ELSEIF DYNFLOW-DYNBEGIN 'X'.
      PRG_DYN    DYNP-PROG DYNFLOW-PROGRAM.
      PRG_DYN+41 DYNP-DNUM DYNFLOW-DYNPRO.
      IMPORT DYNPRO H F E ID DYNP.
      CONDENSE PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        L_INT L_INT + 1.
        PERFORM GET_FILENAME.
        LT_EXCEL_HEADER-DDTEXT DFIES-FIELDTEXT(30).
        APPEND LT_EXCEL_HEADERCLEAR LT_EXCEL_HEADER.
        CONCATENATE 'GT_EXCEL_BODY-COL' L_INT INTO L_FIELDNAME.
        ASSIGN (L_FIELDNAMETO <FS_FNAME>.
        <FS_FNAME> DYNFLOW-FVAL.
        CONDENSE <FS_FNAME>.
      ENDIF.
    ENDIF.
    AT LAST.
      APPEND GT_EXCEL_BODYCLEAR GT_EXCEL_BODY.
    ENDAT.
  ENDLOOP.

* Header Field is count
  DESCRIBE TABLE LT_EXCEL_HEADER LINES L_DO_TIMES.

* start Excel
  CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
  PERFORM ERR_HDL.
  SET PROPERTY OF H_EXCEL  'Visible' 1.
  PERFORM ERR_HDL.
* get list of workbooks, initially empty
  CALL METHOD OF
      H_EXCEL
      'Workbooks' H_MAPL.
  PERFORM ERR_HDL.
* add a new workbook
  CALL METHOD OF
      H_MAPL
      'Add'  H_MAP.
  PERFORM ERR_HDL.


*-Header
*  PERFORM FILL_CELL USING CELL_CNT 1 0 'STARTDATA'.
  COL_CNT COL_CNT  + 1.
  PERFORM FILL_CELL USING COL_CNT '샘플'.
  LOOP AT LT_EXCEL_HEADER.
    COL_CNT COL_CNT  + 1.
    PERFORM FILL_CELL USING COL_CNT LT_EXCEL_HEADER-DDTEXT.
    CLEAR LT_EXCEL_HEADER.
  ENDLOOP.

*-Body
  CLEARCOL_CNTL_INT<FS_FNAME>L_FIELDNAME.

  LOOP AT GT_EXCEL_BODY.
    CELL_CNT CELL_CNT + 1.
    COL_CNT COL_CNT  + 1.
    PERFORM FILL_CELL USING CELL_CNT COL_CNT '샘플'.
    AT LAST.
      L_LAST_FLAG 'X'.
    ENDAT.
    DO L_DO_TIMES TIMES.
*      IF L_LAST_FLAG EQ 'X'.
*        PERFORM FILL_CELL USING CELL_CNT 1 0 'ENDDATA'.
*      ENDIF.
      L_INT L_INT + 1.
      COL_CNT COL_CNT + 1.
      CONCATENATE 'GT_EXCEL_BODY-COL' L_INT INTO L_FIELDNAME.
      ASSIGN (L_FIELDNAMETO <FS_FNAME>.
      PERFORM FILL_CELL USING CELL_CNT COL_CNT <FS_FNAME>.
    ENDDO.

    CLEAR GT_EXCEL_BODY.
  ENDLOOP.

* Excel Save안하고 종료
*  SET PROPERTY OF H_MAP 'SAVED' = 0.
*  CALL METHOD OF H_MAPL 'SAVED' = H_MAP
*    EXPORTING
*      #1 = GV_FNAME.

  FREE OBJECT H_EXCEL.
  PERFORM ERR_HDL.


ENDFORM.                    " DOWNLOAD_EXCEL_FORM
*&---------------------------------------------------------------------*
*&      Form  ERR_HDL
*&---------------------------------------------------------------------*
FORM ERR_HDL .

  IF SY-SUBRC <> 0.
    WRITE'Fehler bei OLE-Automation:'(010)SY-SUBRC.
    STOP.
  ENDIF.

ENDFORM.                    " ERR_HDL
*&---------------------------------------------------------------------*
*&      Form  FILL_CELL
*&---------------------------------------------------------------------*
FORM FILL_CELL USING J BOLD VAL.

  CALL METHOD OF
      H_EXCEL
      'Cells' H_ZL
    EXPORTING
      #1      I
      #2      J.
  PERFORM ERR_HDL.
  SET PROPERTY OF H_ZL 'Value' VAL.
  PERFORM ERR_HDL.
  GET PROPERTY OF H_ZL 'Font' H_F.
  PERFORM ERR_HDL.
  SET PROPERTY OF H_F 'Bold' BOLD.
  PERFORM ERR_HDL.
ENDFORM.                    " FILL_CELL
*&---------------------------------------------------------------------*
*&      Form  move_bdc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MOVE_BDC.
  CHECK SEQ > 1.
  BDC_VALUE DAT.
  CONDENSE BDC_VALUE.
  APPEND BDC_VALUE.
ENDFORM.                               " move_bdc
*&---------------------------------------------------------------------*
*&      Form  append_to_bdc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM APPEND_TO_BDC.
*
  CLEARBDC_VALUEBDC_INDEX.
  REFRESH BDC_DATA.
*
  LOOP AT DYNFLOW.
    IF DYNFLOW-DYNBEGIN 'T'.
      CONTINUE.
    ENDIF.
*
    BDC_DATA DYNFLOW.
    IF BDC_DATA-DYNBEGIN 'X' OR
       BDC_DATA-FNAM(4)  'BDC_'.
      APPEND BDC_DATA.
      CONTINUE.
    ENDIF.
*
    IF X_DEFLT 'X' AND NOT BDC_DATA-FVAL IS INITIAL.
      APPEND BDC_DATA.
      CONTINUE.
    ENDIF.
*
    ADD TO BDC_INDEX.
    READ TABLE BDC_VALUE INDEX BDC_INDEX.
    IF SY-SUBRC NE 0.
      CLEAR BDC_VALUE.
    ENDIF.
    IF BDC_VALUE '!'.                " null field
      CONTINUE.
    ENDIF.
*
    BDC_DATA-FVAL BDC_VALUE.
    APPEND BDC_DATA.
  ENDLOOP.
*
  IF ICODE 'TESTING'.
    CLEAR BDC_INDEX.
    REFRESH SAV_DF.
    CLEAR SAV_DF.
    LOOP AT DYNFLOW INTO SAV_DF.
      IF SAV_DF-DYNBEGIN 'T'.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      IF SAV_DF-DYNBEGIN 'X' OR
         SAV_DF-FNAM(4)  'BDC_'.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      IF X_DEFLT 'X' AND NOT SAV_DF-FVAL IS INITIAL.
        APPEND SAV_DF.
        CONTINUE.
      ENDIF.
*
      ADD TO BDC_INDEX.
      READ TABLE BDC_VALUE INDEX BDC_INDEX.
      IF SY-SUBRC NE 0.
        BDC_VALUE '!!'.
      ENDIF.
      IF BDC_VALUE X_NULIND OR       " null field
         BDC_VALUE '!!'.
        SAV_DF-FVAL '<Null>'.
        APPEND SAV_DF.
        CLEAR SAV_DF.
        CONTINUE.
      ENDIF.
      SAV_DF-FVAL BDC_VALUE.
      APPEND SAV_DF.
    ENDLOOP.
  ENDIF.
*
  ADD TO BDC_COUNT.
*
  IF BDC_COUNT AND ICODE 'UPLOAD'.
    PERFORM OPEN_BDC_GROUP.
  ENDIF.
*
  IF X_SES 'X'.
    IF ICODE 'UPLOAD'.
      PERFORM BDC_INSERT.
    ENDIF.
  ELSEIF ICODE 'TESTONE' OR ICODE 'UPLOAD'.
    CCODE(1CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
    TRANSLATE INDATA USING CCODE.
    FORMAT COLOR COL_KEY INTENSIFIED OFF.
    WRITE/(5BDC_COUNT INDATA(120).
    PERFORM CALL_TRANSACTION.
  ENDIF.
ENDFORM.                               " append_to_bdc
*&---------------------------------------------------------------------*
*&      Form  open_bdc_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM OPEN_BDC_GROUP.
*
  CHECK X_SES 'X'.
*
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT              SY-MANDT
      GROUP               BDCGROUP
      USER                USERNAME
      KEEP                'X'
    EXCEPTIONS
      CLIENT_INVALID      1
      DESTINATION_INVALID 2
      GROUP_INVALID       3
      GROUP_IS_LOCKED     4
      HOLDDATE_INVALID    5
      INTERNAL_ERROR      6
      QUEUE_ERROR         7
      RUNNING             8
      SYSTEM_LOCK_ERROR   9
      USER_INVALID        10
      OTHERS              11.
*
  IF SY-SUBRC NE 0.
    MESSAGE E435(00WITH 'BDC GROUP Open Error !'.
  ENDIF.
*
ENDFORM.                               " open_bdc_group
*&---------------------------------------------------------------------*
*&      Form  close_bdc_group
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CLOSE_BDC_GROUP.
*
  CHECK X_SES 'X'.
  CHECK ICODE 'UPLOAD'.
  CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      NOT_OPEN    1
      QUEUE_ERROR 2
      OTHERS      3.
*
ENDFORM.                               " close_bdc_group
*&---------------------------------------------------------------------*
*&      Form  set_select_options
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_SELECT_OPTIONS.
*
  IF P-GRPID CP '*'.
    R-GRPID-OPTION 'CP'.
    R-GRPID-SIGN 'I'.
    R-GRPID-LOW P-GRPID.
    APPEND R-GRPID.
  ELSEIF P-GRPID NE SPACE.
    R-GRPID-OPTION 'EQ'.
    R-GRPID-SIGN 'I'.
    R-GRPID-LOW P-GRPID.
    APPEND R-GRPID.
  ENDIF.
*
  IF NOT P-CREDT IS INITIAL.
    R-CREDT-OPTION 'EQ'.
    R-CREDT-SIGN 'I'.
    R-CREDT-LOW P-CREDT.
    APPEND R-CREDT.
  ENDIF.
*
  IF NOT P-CREUR IS INITIAL.
    R-CREUR-OPTION 'EQ'.
    R-CREUR-SIGN 'I'.
    R-CREUR-LOW P-CREUR.
    APPEND R-CREUR.
  ENDIF.
ENDFORM.                               " set_select_options
*&---------------------------------------------------------------------*
*&      Form  PROCESS_SESSION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROCESS_SESSION.
*
  SET PARAMETER ID 'MPN' FIELD BDCGROUP.
*
  CALL TRANSACTION 'SM35' AND SKIP FIRST SCREEN.

ENDFORM.                               " PROCESS_SESSION
*&---------------------------------------------------------------------*
*&      Form  GET_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FILENAME.
*
  DATAT_LINE_NR(4).

  F-ITYP '2'.
  F-FNAM DYNFLOW-FNAM.
  READ TABLE WITH KEY FNAM F-FNAM
                        ITYP F-ITYP.
  IF SY-SUBRC AND F-STXT NE SPACE.
    DFIES-FIELDTEXT F-STXT.
    EXIT.
  ENDIF.
*
  IF DYNFLOW-FNAM CA '-'.
    X031L-TABNAME   DYNFLOW-FNAM(SY-FDPOS).
    SY-FDPOS SY-FDPOS + 1.
    X031L-FIELDNAME DYNFLOW-FNAM+SY-FDPOS.
    IF X031L-FIELDNAME CA '('.
      X031L-FIELDNAME X031L-FIELDNAME(SY-FDPOS).
    ENDIF.
    READTYPE 'X'.
    CLEAR DFIES.
    DO.
      CALL 'C_DD_READ_FIELD'
           ID 'TYPE'      FIELD READTYPE
           ID 'TABNAME'   FIELD X031L-TABNAME
           ID 'FIELDNAME' FIELD X031L-FIELDNAME
           ID 'LANGUAGE'  FIELD SY-LANGU.
      IF SY-SUBRC 0EXITENDIF.
      IF READTYPE SPACEEXITENDIF.
      CLEAR READTYPE.
    ENDDO.
  ENDIF.

  MOVE DFIES-OUTPUTLEN TO FTEXT-OUTPUTLEN.
  MOVE DFIES-SCRTEXT_S TO FTEXT-SCRTEXT_S.
  MOVE DFIES-SCRTEXT_M TO FTEXT-SCRTEXT_M.
  MOVE DFIES-SCRTEXT_L TO FTEXT-SCRTEXT_L.
  MOVE DYN_TABIX       TO FTEXT-TABIX.
  MOVE T_LINE_NR       TO FTEXT-LINENO.
  APPEND FTEXT.
ENDFORM.                               " GET_FILENAME
*&---------------------------------------------------------------------*
*&      Form  BDC_INSERT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BDC_INSERT.
*
  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE          TRANCODE
    TABLES
      DYNPROTAB      BDC_DATA
    EXCEPTIONS
      INTERNAL_ERROR 1
      NOT_OPEN       2
      QUEUE_ERROR    3
      TCODE_INVALID  4
      OTHERS         5.
*
  IF SY-SUBRC NE 0.
    MESSAGE E435(00WITH 'BDC INSERT Error !'.
  ENDIF.
ENDFORM.                               " BDC_INSERT
*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION.
*
  DATAW_DMODE LIKE CTU_PARAMS-DISMODE VALUE 'A'.
*
  IF ICODE 'UPLOAD'.
    W_DMODE DMODE.
  ENDIF.
*
  REFRESH MESSTAB.
*
  CALL TRANSACTION TRANCODE USING BDC_DATA
                   MODE     W_DMODE
                   UPDATE   UMODE
                   MESSAGES INTO MESSTAB.
*
  TRAN_SUBRC SY-SUBRC.
*
  PERFORM WRITE_MESSAGE TABLES MESSTAB.
*
ENDFORM.                               " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*&      Form  WRITE_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MESSTAB  text
*----------------------------------------------------------------------*
FORM WRITE_MESSAGE TABLES   P_MESSTAB STRUCTURE MESSTAB.
*
  LOOP AT P_MESSTAB.
    SELECT SINGLE FROM T100 WHERE SPRSL P_MESSTAB-MSGSPRA
                              AND   ARBGB P_MESSTAB-MSGID
                              AND   MSGNR P_MESSTAB-MSGNR.
    CASE P_MESSTAB-MSGTYP.
      WHEN 'E'.  FORMAT COLOR COL_NEGATIVE  INTENSIFIED OFF.
      WHEN 'W'.  FORMAT COLOR COL_TOTAL     INTENSIFIED ON.
      WHEN 'S'.  FORMAT COLOR COL_POSITIVE  INTENSIFIED OFF.
      WHEN 'I'.  FORMAT COLOR COL_NORMAL    INTENSIFIED OFF.
      WHEN 'A'.  FORMAT COLOR COL_GROUP     INTENSIFIED ON.
      WHEN OTHERSFORMAT COLOR COL_BACKGROUND INTENSIFIED ON.
    ENDCASE.
*
    IF SY-SUBRC 0.
      L_MSTRING T100-TEXT.
      IF L_MSTRING CS '&1'.
        REPLACE '&1' WITH P_MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&2' WITH P_MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&3' WITH P_MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&4' WITH P_MESSTAB-MSGV4 INTO L_MSTRING.
      ELSE.
        REPLACE '&' WITH P_MESSTAB-MSGV1 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV2 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV3 INTO L_MSTRING.
        REPLACE '&' WITH P_MESSTAB-MSGV4 INTO L_MSTRING.
      ENDIF.
      CONDENSE L_MSTRING.
      WRITE/11 P_MESSTAB-MSGTYPP_MESSTAB-MSGID(4),
                                   P_MESSTAB-MSGNRL_MSTRING(120).
    ELSE.
      WRITE/11 P_MESSTAB-MSGTYPP_MESSTAB-MSGID(4),
                                   P_MESSTAB-MSGNR.
    ENDIF.
  ENDLOOP.
  IF TRAN_SUBRC NE 0.
    FORMAT COLOR COL_NEGATIVE  INTENSIFIED OFF.
    WRITE/11 'Error - Data is not processed.'.
  ENDIF.
ENDFORM.                               " WRITE_MESSAGE
*&---------------------------------------------------------------------*
*&      Form  SAVE_RECORDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_RECORDING.
  CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.
*
  CALL METHOD OF
      EXCEL
      'APPLICATION' APPL.
  SET PROPERTY OF APPL 'STANDARDFONT' E_FONT.
  SET PROPERTY OF APPL 'STANDARDFONTSIZE' E_SIZE.
*
  CALL METHOD OF
      EXCEL
      'WORKBOOKS' BOOKS.
  CALL METHOD OF BOOKS 'ADD' BOOK.  "ADD, OPEN
*
  CALL METHOD OF
      BOOK
      'sheets' SHEETS.
  CALL METHOD OF
      SHEETS
      'item' SHEET
    EXPORTING
      #1     1.
  CALL METHOD OF
      SHEET
      'Activate'.
*
  CALL METHOD OF
      SHEET
      'cells' CELLS.
*
  LOOP AT DYNFLOW.
*
    MOVE SY-TABIX TO DYN_TABIX.
*
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode
*     Write Header Title to Excel
      MOVE DYNFLOW-FNAM TO E_SHEET_NAME.
      SET PROPERTY OF SHEET 'NAME' E_SHEET_NAME" Name of Sheet

      CONCATENATE '*' TSTCT-TTEXT '(TCODE:' TRANCODE ')/'
                  'Recording:' APQI-GROUPID
                  '(' X_DEFLT ')' INTO XL_TITLE.
*
      PERFORM XL_PUT_TO_CELL USING XL_TITLE.
      PERFORM XL_PUT_TO_CELL USING '*Text:'.
      PERFORM XL_PUT_TO_CELL USING 'FIELDNAME'.
*
      PERFORM XL_PUT_TO_CELL USING 4  'STARTDATA'.
      PERFORM XL_PUT_TO_CELL USING 24 'ENDDATA'.
      XL_ROW 2.
      XL_COLUMN 1.
    ELSEIF DYNFLOW-DYNBEGIN SPACE.
*      e_size = 9.
*      SET PROPERTY OF sheet 'STANDARDFONTSIZE' = e_size.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        IF NOT X_DEFLT 'X' AND DYNFLOW-FVAL NE SPACE ).
          ADD TO XL_COLUMN.
*
          READ TABLE FTEXT WITH KEY TABIX DYN_TABIX.
          IF SY-SUBRC 0.
            IF FTEXT-LINENO NE SPACE.
              CONCATENATE FTEXT-SCRTEXT_M FTEXT-LINENO
                INTO FTEXT-SCRTEXT_M.
            ENDIF.
            PERFORM XL_PUT_TO_CELL
                             USING
                               XL_ROW XL_COLUMN
                               FTEXT-SCRTEXT_M.
          ENDIF.
*
          XL_ROW XL_ROW + 1.
          PERFORM XL_PUT_TO_CELL USING XL_ROW XL_COLUMN DYNFLOW-FNAM.
*
          XL_ROW XL_ROW + 1.
          IF DYNFLOW-FVAL NE SPACE.
            PERFORM XL_PUT_TO_CELL USING XL_ROW XL_COLUMN DYNFLOW-FVAL.
          ENDIF.
          XL_ROW XL_ROW 2.

        ENDIF.
      ENDIF.
    ENDIF.
  ENDLOOP.
*
  SET PROPERTY OF EXCEL 'VISIBLE' 1.
*
  FREE OBJECT CELLS.
  FREE OBJECT SHEET.
  FREE OBJECT SHEETS.
  FREE OBJECT BOOK.
  FREE OBJECT BOOKS.
  FREE OBJECT APPL.
  FREE OBJECT EXCEL.
*
ENDFORM.                               " SAVE_RECORDING
*&---------------------------------------------------------------------*
*&      Form  XL_PUT_TO_CELL
*&---------------------------------------------------------------------*
FORM XL_PUT_TO_CELL USING ROW COL VALUE.
* here you get the CELL object
  CALL METHOD OF
      CELLS
      'ITEM' CELL
    EXPORTING
      #1     ROW
      #2     COL.
* here you use the CELL object
  SET PROPERTY OF CELL 'VALUE' VALUE" write VALUE to the excel cell
  GET PROPERTY OF CELL 'FONT'  FONT.
*
  IF ROW 1.
    SET PROPERTY OF FONT 'BOLD' 1.
    SET PROPERTY OF FONT 'SIZE' 14.
  ELSE.
    SET PROPERTY OF FONT 'BOLD' 0.
    SET PROPERTY OF FONT 'SIZE' 9.
  ENDIF.
*
  FREE OBJECT CELL.
  FREE OBJECT FONT.
*
ENDFORM.                    "XL_PUT_TO_CELL
*&---------------------------------------------------------------------*
*&      Form  CL_NLS_STRUC_CONTAINER
*&---------------------------------------------------------------------*
FORM CL_NLS_STRUC_CONTAINER
                 CHANGING P_CONTAINER TYPE REF TO
CL_NLS_STRUC_CONTAINER.


  DATALT_CP TYPE NLS_LANGU_CP_TAB,
        LS_CP_LINE TYPE NLS_LANGU_CP_LINE.

  LS_CP_LINE-LANGU    '3'.
  LS_CP_LINE-CODEPAGE '8500'.

  INSERT LS_CP_LINE INTO TABLE LT_CP.

  P_CONTAINER CL_NLS_STRUC_CONTAINER=>CREATELT_CP ).

ENDFORM.                    " CL_NLS_STRUC_CONTAINER
*&---------------------------------------------------------------------*
*&      Form  CONT_TO_STRUC
*&---------------------------------------------------------------------*
FORM CONT_TO_STRUC
     USING    P_CONTAINER TYPE REF TO CL_NLS_STRUC_CONTAINER
              P_STRING
     CHANGING PS_LINE.
  TRY.
      CALL METHOD P_CONTAINER->CONT_TO_STRUC
        EXPORTING
          CONT  P_STRING
          LANGU SY-LANGU
        IMPORTING
          STRUC PS_LINE.
    CATCH CX_SY_CONVERSION_CODEPAGE .
    CATCH CX_PARAMETER_INVALID_RANGE .
  ENDTRY.
ENDFORM.                    " CONT_TO_STRUC
*&---------------------------------------------------------------------*
*&      Form  STRUC_TO_CONT
*&---------------------------------------------------------------------*
FORM STRUC_TO_CONT
     USING    P_CONTAINER TYPE REF TO CL_NLS_STRUC_CONTAINER
              PS_LINE TYPE ANY
     CHANGING P_STRING.
  FIELD-SYMBOLS <FS> TYPE CLIKE.

  ASSIGN PS_LINE TO <FS>.

  TRY.
      CALL METHOD P_CONTAINER->STRUC_TO_CONT
        EXPORTING
          STRUC <FS>
          LANGU SY-LANGU
        IMPORTING
          CONT  P_STRING.
    CATCH CX_SY_CONVERSION_CODEPAGE .
    CATCH CX_PARAMETER_INVALID_RANGE .
  ENDTRY.
ENDFORM.                    " STRUC_TO_CONT
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_THE_RECORDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_THE_RECORDING.
  DATA:
    LCL_NLS_STRUC_CONT TYPE REF TO CL_NLS_STRUC_CONTAINER,
    L_STRING TYPE STRING.

* Correct Alignment of Structures in Containers
  PERFORM CL_NLS_STRUC_CONTAINER
                           CHANGING
                             LCL_NLS_STRUC_CONT.
  FILENAME P-RFILE.
*
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      FILENAME         FILENAME
      FILETYPE         'ASC'
    IMPORTING
      FILELENGTH       FILESIZE
    TABLES
      DATA_TAB         XDAT
    EXCEPTIONS
      FILE_OPEN_ERROR  1
      FILE_WRITE_ERROR 2.
*
  IF FILESIZE 0.
    CALL FUNCTION 'UPLOAD'
      EXPORTING
        FILENAME     FILENAME
        FILETYPE     FILETYPE
      IMPORTING
        ACT_FILENAME ACT_FILENAME
        FILESIZE     FILESIZE
      TABLES
        DATA_TAB     XDAT.
  ENDIF.
  P-RFILE ACT_FILENAME.
  SET PARAMETER ID 'DLP' FIELD P-RFILE.
*
  IF FILESIZE > 0.
    LOOP AT XDAT.
      IF SY-TABIX 1.
        PERFORM CONT_TO_STRUC
                      USING
                        LCL_NLS_STRUC_CONT
                        XDAT
                      CHANGING
                        APQITAB.

*        APQITAB = XDAT.

        IF APQITAB-DATATYP '%BDC'.
          APPEND APQITAB.
        ENDIF.
        CONTINUE.
      ENDIF.
      DYNFLOW XDAT.    APPEND DYNFLOW.
    ENDLOOP.
    CLEAR P-GRPID.
  ENDIF.
  REFRESH XDAT.
ENDFORM.                               " UPLOAD_THE_RECORDING
*&---------------------------------------------------------------------*
*&      Form  DOWLOAD_DATA
*&---------------------------------------------------------------------*
FORM DOWLOAD_DATA.

  DATAL_TABIX LIKE SY-TABIX,
        L_INT(2TYPE N.
  DATAL_ITAB_NAME(30),
        L_FIELDNAME(50).
  DATA  L_TITLE TYPE STRING.
  DATA LT_EXCEL_HEADER LIKE GA_EXCEL_HEADER OCCURS WITH HEADER LINE.
  DATALT_DYNFLOW TYPE STANDARD TABLE OF BDCDATA.
  FIELD-SYMBOLS<FS_FNAME> TYPE ANY.

  LOOP AT DYNFLOW.
    L_TABIX SY-TABIX.
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode

    ELSEIF DYNFLOW-DYNBEGIN 'X'.
      PRG_DYN    DYNP-PROG DYNFLOW-PROGRAM.
      PRG_DYN+41 DYNP-DNUM DYNFLOW-DYNPRO.
      IMPORT DYNPRO H F E ID DYNP.
      CONDENSE PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        L_INT L_INT + 1.
        PERFORM GET_FILENAME.
        LT_EXCEL_HEADER-DDTEXT DFIES-FIELDTEXT(30).
        APPEND LT_EXCEL_HEADERCLEAR LT_EXCEL_HEADER.
        CONCATENATE 'GT_EXCEL_BODY-COL' L_INT INTO L_FIELDNAME.
        ASSIGN (L_FIELDNAMETO <FS_FNAME>.
        <FS_FNAME> DYNFLOW-FVAL.
        CONDENSE <FS_FNAME>.
      ENDIF.
    ENDIF.
    AT LAST.
      APPEND GT_EXCEL_BODYCLEAR GT_EXCEL_BODY.
    ENDAT.
  ENDLOOP.

  PERFORM DOWNLOAD_FILE "IN PROGRAM ZPTPPICOMF01
                        TABLES LT_EXCEL_HEADER
                               GT_EXCEL_BODY
                        USING  L_TITLE.

  REFRESH LT_EXCEL_HEADER.
  CLEARL_ITAB_NAME,
         L_TITLE.

ENDFORM.                    " DOWLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_FILE
*&---------------------------------------------------------------------*
FORM DOWNLOAD_FILE TABLES PT_HEADER
                          PT_BODY
                   USING  P_TITLE.

  DATAL_FILENAME    TYPE STRING,
        L_FILEFILTER  TYPE STRING,
        L_PATH        TYPE STRING,
        L_FULLPATH    TYPE STRING,
        L_FILEPATH    LIKE RLGRAP-FILENAME,
        L_USER_ACTION   TYPE I.

  CONCATENATE 'Excel Files (*.XLS)|*.XLS|'
              'Text Files (*.TXT)|*.TXT|'
              'Rich Text Format (*.RTF)|*.RTF|'
              'PDF Files (*.PDF)|*.PDF|'
              'All files (*.*)|*.*|'
              '|' INTO L_FILEFILTER.

  CALL FUNCTION 'ZGUI_FILE_SAVE_DIALOG'
    EXPORTING
      WINDOW_TITLE      P_TITLE
      DEFAULT_EXTENSION 'XLS'
      DEFAULT_FILE_NAME P_TITLE
      FILE_FILTER       L_FILEFILTER
    IMPORTING
      FILENAME          L_FILENAME
      PATH              L_PATH
      FULLPATH          L_FULLPATH
      USER_ACTION       L_USER_ACTION.

  CASE SY-SUBRC.
    WHEN 0.
    WHEN OTHERS.
*      MESSAGE I050 RAISING SOME_ERROR.
  ENDCASE.

  IF L_USER_ACTION EQ OR "GENERATE를 선택
     L_USER_ACTION EQ 1.   "REPLACE를 선택
    CALL FUNCTION 'ZGUI_DOWNLOAD'
      EXPORTING
        FILENAME              L_FULLPATH
        FILETYPE              'ASC'
        DAT_MODE              'X'
        WRITE_FIELD_SEPARATOR 'X'
      TABLES
        DATA_TAB              PT_BODY
        FIELDNAMES            PT_HEADER
      EXCEPTIONS
        FILE_WRITE_ERROR      01
        NO_BATCH              04
        UNKNOWN_ERROR         05
        OTHERS                99.
    CASE SY-SUBRC.
      WHEN 0.
      WHEN OTHERS.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDCASE.
  ELSEIF L_USER_ACTION EQ 2.  "EXTEND를 선택
    CALL FUNCTION 'ZGUI_DOWNLOAD'
      EXPORTING
        FILENAME              L_FULLPATH
        FILETYPE              'ASC'
        APPEND                'X'
        DAT_MODE              'X'
        WRITE_FIELD_SEPARATOR 'X'
      TABLES
        DATA_TAB              PT_BODY
        FIELDNAMES            PT_HEADER
      EXCEPTIONS
        FILE_WRITE_ERROR      01
        NO_BATCH              04
        UNKNOWN_ERROR         05
        OTHERS                99.
    CASE SY-SUBRC.
      WHEN 0.
      WHEN OTHERS.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDCASE.
  ELSEIF L_USER_ACTION EQ 9.  "취소
*    MESSAGE S000 DISPLAY LIKE 'E' WITH
*      '파일 다운로드를 취소했습니다.'.
  ENDIF.

ENDFORM.                    " DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*&      Form  EXECUTION_BDC
*&---------------------------------------------------------------------*
FORM EXECUTION_BDC.

  CHECK NOT GT_EXCEL_BODY[] IS INITIAL.
*
  DATASTARTEND.
  CLEAR BDC_COUNT.
*
  IF ICODE 'UPLOAD' OR ICODE 'TESTONE'.
    NEW-PAGE LINE-SIZE 255.
  ENDIF.

  DATAL_DO_TIMES TYPE I.

  DATAL_TABIX LIKE SY-TABIX,
        L_LAST_FLAG TYPE C,
        L_INT(2TYPE N.
  DATAL_ITAB_NAME(30),
        L_FIELDNAME(50).
  DATA  L_TITLE TYPE STRING.
  DATA LT_EXCEL_HEADER LIKE GA_EXCEL_HEADER OCCURS WITH HEADER LINE.
  DATALT_DYNFLOW TYPE STANDARD TABLE OF BDCDATA.
  FIELD-SYMBOLS<FS_FNAME> TYPE ANY.

  LOOP AT DYNFLOW.
    L_TABIX SY-TABIX.
    IF DYNFLOW-DYNBEGIN 'T'.         " Tcode

    ELSEIF DYNFLOW-DYNBEGIN 'X'.
      PRG_DYN    DYNP-PROG DYNFLOW-PROGRAM.
      PRG_DYN+41 DYNP-DNUM DYNFLOW-DYNPRO.
      IMPORT DYNPRO H F E ID DYNP.
      CONDENSE PRG_DYN.
    ELSE.
      IF DYNFLOW-FNAM(4NE 'BDC_'.
        L_INT L_INT + 1.
        PERFORM GET_FILENAME.
        LT_EXCEL_HEADER-DDTEXT DFIES-FIELDTEXT(30).
        APPEND LT_EXCEL_HEADERCLEAR LT_EXCEL_HEADER.
      ENDIF.
    ENDIF.
  ENDLOOP.

* Header Field is count
  DESCRIBE TABLE LT_EXCEL_HEADER LINES L_DO_TIMES.

  CLEAR L_INT.
  LOOP AT GT_EXCEL_BODY.

    REFRESH BDC_VALUE.
    CLEAR L_INT.

    DO L_DO_TIMES TIMES.

      L_INT L_INT + 1.
      CONCATENATE 'GT_EXCEL_BODY-COL' L_INT INTO L_FIELDNAME.
      ASSIGN (L_FIELDNAMETO <FS_FNAME>.
      BDC_VALUE <FS_FNAME>.
      CONDENSE BDC_VALUE.
      APPEND BDC_VALUE.

    ENDDO.
    PERFORM APPEND_TO_BDC.
  ENDLOOP.
*
  PERFORM CLOSE_BDC_GROUP.
**
*  IF START IS INITIAL.
*    WRITE: / 'ERROR :' COLOR COL_NEGATIVE,
*             'I Can''t found the ''STARTDATA'' tag.'.
*  ENDIF.
*
  IF SY-SUBRC 0.
    IF ICODE 'UPLOAD' AND X_SES 'X'.
      WRITE/ SESSION COLOR HOTSPOT.
      ULINE.
      WRITE'BDC session created.',
             / SY-ULINE,
             / 'BDC session :'BDCGROUP,
             / 'BDC Count   :'BDC_COUNT.
    ELSEIF ICODE 'TESTING'.
      PERFORM PUT_SCREEN_TEMPLATE.
      SY-LSIND SY-LSIND 1.
    ENDIF.
  ENDIF.
*

ENDFORM.                    " EXECUTION_BDC

댓글 없음:

댓글 쓰기