2016년 12월 14일 수요일

ZMMR0820_[VN] GR document-printing

*&---------------------------------------------------------------------*
*& PROGRAM  : ZMMR0820
*& CONTENTS : [VN] GR document-printing
*& T-CODE   : ZMM820
*&---------------------------------------------------------------------*
*&   Date        Rev #      Programer     Description
*&-----------  --------   ------------- -------------------------------
*& 2016.06.23    NEW       JH.KIM
*&---------------------------------------------------------------------*
REPORT ZMMR0820 NO STANDARD PAGE HEADING MESSAGE-ID ZMM .

TYPE-POOLSSLIS.

***********************************************************************
*INCLUDE.
***********************************************************************
* Authority Check
INCLUDE ZSD_AUTHORITY_CHECK.
INCLUDE ZMMR0820_CLS.  " CLASS
INCLUDE ZMMR0820_TOP.  " GLOBAL Data
INCLUDE ZMMR0820_O01.  " PBO-Modules
INCLUDE ZMMR0820_I01.  " PAI-Modules
INCLUDE ZMMR0820_F01.  " FORM-Routines

***********************************************************************
* INITIALIZATION
***********************************************************************
INITIALIZATION.
  PERFORM INIT_DATE.
  PERFORM INITIAL_SET.

***********************************************************************
* AT SELECTION-SCREEN
***********************************************************************
AT SELECTION-SCREEN.

***********************************************************************
*START-OF-SELECTION.
***********************************************************************
START-OF-SELECTION.
* Authority Check
  PERFORM AUTHORITY_WERKS_S TABLES S_WERKS.
  PERFORM SELECT_DATA.
  PERFORM MAKE_LIST.

  IF NOT GT_LIST[] IS INITIAL.
    DESCRIBE TABLE GT_LIST LINES G_LINES.
    MESSAGE S000 WITH G_LINES 'Data Found'.
    CALL SCREEN 100.
  ELSE.
    MESSAGE S000 WITH 'No data Found!!'.
  ENDIF.

*&---------------------------------------------------------------------*
*&  Include           ZSD_AUTHORITY_CHECK
*&---------------------------------------------------------------------*
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD BEGIN.
DATA BEGIN OF gt_group   OCCURS 0,
        usergroup LIKE usgrp_user-usergroup,
       END   OF gt_group.

DATA gt_class  LIKE zsdt0057  OCCURS WITH HEADER LINE.
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD END.

*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_VKORG_S
*&---------------------------------------------------------------------*
FORM authority_vkorg_s  TABLES p_vkorg.

*  TABLES: tvko.
  DATA BEGIN OF t_tvko  OCCURS 0,
          vkorg   LIKE vbak-vkorg,
         END   OF t_tvko.

  SELECT vkorg FROM tvko INTO TABLE t_tvko
           WHERE vkorg IN p_vkorg.

  LOOP AT t_tvko.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
      ID 'VKORG' FIELD t_tvko-vkorg.
    IF sy-subrc <> 0.
      MESSAGE e023(sdWITH t_tvko-vkorg.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " AUTHORITY_VKORG_S
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_VKORG_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_vkorg_p  USING    p_vkorg.

  AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
    ID 'VKORG' FIELD p_vkorg.
  IF sy-subrc <> 0.
    MESSAGE e023(sdWITH p_vkorg.
  ENDIF.

ENDFORM.                    " AUTHORITY_VKORG_P
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_BUKRS_S
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_S_BUKRS  text
*----------------------------------------------------------------------*
FORM authority_bukrs_s  TABLES   p_bukrs.

* TABLES: t001.
  DATA BEGIN OF t_t001  OCCURS 0,
          bukrs   LIKE t001-bukrs,
         END   OF t_t001.

  SELECT bukrs FROM t001 INTO TABLE t_t001
           WHERE bukrs IN p_bukrs.

  LOOP AT t_t001.
    AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
      ID 'BUKRS' FIELD t_t001-bukrs.
    IF sy-subrc <> 0.
      MESSAGE e023(sdWITH t_t001-bukrs.
    ENDIF.
  ENDLOOP.


ENDFORM.                    " AUTHORITY_BUKRS_S
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_BUKRS_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_bukrs_p  USING    p_bukrs.

  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
    ID 'BUKRS' FIELD p_bukrs.
  IF sy-subrc <> 0.
    MESSAGE e023(sdWITH p_bukrs.
  ENDIF.


ENDFORM.                    " AUTHORITY_BUKRS_P
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_WERKS_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_werks_p  USING    p_werks.

  AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
    ID 'WERKS' FIELD p_werks.
  IF sy-subrc <> 0.
    MESSAGE e023(sdWITH p_werks.
  ENDIF.


ENDFORM.                    " AUTHORITY_WERKS_P
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_WERKS_S
*&---------------------------------------------------------------------*

FORM authority_werks_s  TABLES   p_werks.

  DATA BEGIN OF t_t001w  OCCURS 0,
          werks   LIKE t001w-werks,
         END   OF t_t001w.

  SELECT werks FROM t001w INTO TABLE t_t001w
           WHERE werks IN p_werks.

  LOOP AT t_t001w.
    AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
      ID 'WERKS' FIELD t_t001w-werks.
    IF sy-subrc <> 0.
      MESSAGE e023(sdWITH t_t001w-werks.
    ENDIF.
  ENDLOOP.



ENDFORM.                    " AUTHORITY_WERKS_S
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_TPLST_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_tplst_p  USING    p_tplst.

  AUTHORITY-CHECK OBJECT 'V_VTTK_TDS'
    ID 'TPLST' FIELD p_tplst.
  IF sy-subrc <> 0.
    MESSAGE e023(sdWITH p_tplst.
  ENDIF.

ENDFORM.                    " AUTHORITY_TPLST_P
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_VSTEL_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_vstel_p  USING    p_vstel.

  AUTHORITY-CHECK OBJECT 'V_LIKP_VST'
    ID 'VSTEL' FIELD p_vstel.
  IF sy-subrc <> 0.
    MESSAGE e023(sdWITH p_vstel.
  ENDIF.

ENDFORM.                    " AUTHORITY_VSTEL_P

*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_KOKRS_P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM authority_kokrs_p  USING    p_kokrs.

  AUTHORITY-CHECK OBJECT 'K_REPO_CCA'
    ID 'KOKRS' FIELD p_kokrs.
  IF sy-subrc <> 0.
    MESSAGE e010(zcoWITH p_kokrs.
  ENDIF.

ENDFORM.                    " AUTHORITY_KOKRS_P
*&---------------------------------------------------------------------*
*&      Form  GET_AUTHORITY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD BEGIN.
FORM get_authority .

  CLEARgt_groupgt_group[],
         gt_classgt_class[].
  SELECT usergroup INTO TABLE gt_group
    FROM usgrp_user WHERE bname EQ sy-uname.
  IF NOT gt_group[] IS INITIAL.
    SELECT INTO CORRESPONDING FIELDS OF TABLE gt_class
      FROM zsdt0057 FOR ALL ENTRIES IN gt_group
     WHERE class EQ gt_group-usergroup.
  ENDIF.

ENDFORM.                    " GET_AUTHORITY
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_VKORG_Exception
*&---------------------------------------------------------------------*
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD BEGIN.
FORM authority_vkorg_exception  TABLES p_vkorg.

*  TABLES: tvko.
  DATA BEGIN OF t_tvko  OCCURS 0,
          vkorg   LIKE vbak-vkorg,
         END   OF t_tvko.

  SELECT vkorg FROM tvko INTO TABLE t_tvko
           WHERE vkorg IN p_vkorg.

  LOOP AT t_tvko.
    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
      ID 'VKORG' FIELD t_tvko-vkorg.
    IF sy-subrc NE 0.
      READ TABLE gt_class WITH KEY vkorg t_tvko-vkorg.
      IF sy-subrc NE 0.
        MESSAGE e023(sdWITH t_tvko-vkorg.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " AUTHORITY_VKORG_Exception
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_WERKS_exception
*&---------------------------------------------------------------------*
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD BEGIN.
FORM authority_werks_exception  TABLES   p_werks.

  DATA BEGIN OF t_t001w  OCCURS 0,
          werks   LIKE t001w-werks,
         END   OF t_t001w.

  SELECT werks FROM t001w INTO TABLE t_t001w
           WHERE werks IN p_werks.

  LOOP AT t_t001w.
    AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
      ID 'WERKS' FIELD t_t001w-werks.
    IF sy-subrc <> 0.
      READ TABLE gt_class WITH KEY werks t_t001w-werks.
      IF sy-subrc NE 0.
        MESSAGE e023(sdWITH t_t001w-werks.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " AUTHORITY_WERKS_exception
*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_WERKS_exception_p
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*[SD-1060] 거래처 예외권한체크 2012.12.03 DAL2100 ADD BEGIN.
FORM authority_werks_exception_p  USING    p_werks.

  AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
    ID 'WERKS' FIELD p_werks.
*  IF sy-subrc EQ 0.
  IF sy-subrc NE 0.
    READ TABLE gt_class WITH KEY werks p_werks.
    IF sy-subrc NE 0.
      MESSAGE e023(sdWITH p_werks.
    ENDIF.
  ENDIF.

ENDFORM.                    " AUTHORITY_WERKS_exception_p

*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_VKBUR_S
*&---------------------------------------------------------------------*
FORM authority_vkbur_s  TABLES p_vkbur.

  DATA BEGIN OF t_tvbur OCCURS 0,
          vkbur   LIKE vbak-vkbur,
         END   OF t_tvbur.
  DATA t_index type sy-tabix.
  CLEAR t_index.
  DESCRIBE TABLE p_vkbur LINES t_index.
  CHECK t_index <> 0.
  SELECT vkbur FROM tvbur INTO TABLE t_tvbur
           WHERE vkbur IN p_vkbur.

  LOOP AT t_tvbur.
    AUTHORITY-CHECK OBJECT 'V_VBKA_VKO'
      ID 'VKBUR' FIELD t_tvbur-vkbur.
    IF sy-subrc <> 0.
      MESSAGE e023(sdWITH t_tvbur-vkbur.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " AUTHORITY_VKORG_S


*&---------------------------------------------------------------------*
*&  Include           ZMMR0820_CLS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      CLASS DEFINITIAL
*&---------------------------------------------------------------------*
  CLASS LCL_EVENT_RECEIVER DEFINITION.
    PUBLIC SECTION.
      METHODS:
        HANDLE_DATA_CHANGED
           FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
               IMPORTING ER_DATA_CHANGED,
        HANDLE_HOTSPOT_CLICK
           FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
               IMPORTING E_ROW_ID E_COLUMN_ID,
        HANDLE_DOUBLE_CLICK
           FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
               IMPORTING E_ROW E_COLUMN.
  ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
  CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
    METHOD HANDLE_DATA_CHANGED.

    ENDMETHOD.                    "HANDLE_DATA_CHANGED
    METHOD HANDLE_HOTSPOT_CLICK.
      PERFORM METHOD_HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID.
    ENDMETHOD.                    "HANDLE_HOTSPOT_CLICK
    METHOD HANDLE_DOUBLE_CLICK.
*      PERFORM METHOD_DOUBLE_CLICK USING E_ROW-INDEX
*                                        E_COLUMN-FIELDNAME.
    ENDMETHOD.                    "HANDLE_DOUBLE_CLICK

  ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
* LOCAL CLASSES: Definition
*---------------------------------------------------------------------*
  CLASS LCL_ALV_GRID DEFINITION INHERITING FROM CL_GUI_ALV_GRID.
    PUBLIC SECTION.
      METHODSSET_OPTIMIZE_ALL_COLS.
  ENDCLASS.                    "LCL_AlV_GRID DEFINITION
*---------------------------------------------------------------------*
* CLASS LCL_AlV_GRID IMPLEMENTATION
*---------------------------------------------------------------------*
  CLASS LCL_ALV_GRID IMPLEMENTATION.
    METHOD SET_OPTIMIZE_ALL_COLS.
      CALL METHOD ME->OPTIMIZE_ALL_COLS
        EXPORTING
          INCLUDE_HEADER 1.
    ENDMETHOD.                    "SET_OPTIMIZE_ALL_COLS
  ENDCLASS.                    "LCL_ALV_GRID IMPLEMENTATION


*&---------------------------------------------------------------------*
*&  Include           ZMMR0820_TOP
*&---------------------------------------------------------------------*
TYPE-POOLSICON,SLIS.

* Tables
TABLESMSEGMKPFEKKOEKPOEKETT024LFA1,
        LFB1LFM1LFBKBNKAADRC,
        ADR6.

TYPESBEGIN OF TY_MARA,
      MATNR  TYPE  MATNR,
      GROES  TYPE  GROES,
      MAKTX  TYPE  MAKTX,
END OF TY_MARA.

TYPESBEGIN OF TY_LFA1,
      LIFNR      TYPE  LIFNR,
      DATE_FROM  TYPE  AD_DATE_FR,
      NATION     TYPE  AD_NATION,
      DATE_TO    TYPE  AD_DATE_TO,
      NAME1      TYPE  AD_NAME1,
      NAME2      TYPE  AD_NAME2,
      NAME3      TYPE  AD_NAME3,
      NAME4      TYPE  AD_NAME4,
END OF TY_LFA1.

TYPESBEGIN OF TY_EKPO,
      EBELN  TYPE  EBELN,
      EBELP  TYPE  EBELP,
      TXZ01  TYPE  TXZ01,
END OF TY_EKPO.

DATABEGIN OF GT_ITAB OCCURS 0,
    MBLNR    LIKE  MKPF-MBLNR,
    BLDAT    LIKE  MKPF-BLDAT,
    LIFNR    LIKE  EKKO-LIFNR,
    EBELN    LIKE  MSEG-EBELN,
    BEDAT    LIKE  EKKO-BEDAT,
    EBELP    LIKE  EKPO-EBELP,
    TXZ01    LIKE  EKPO-TXZ01,
    MATNR    LIKE  EKPO-MATNR,
    MENGE    LIKE  EKPO-MENGE,
    MEINS    LIKE  EKPO-MEINS,    " unit
    ERFMG    LIKE  MSEG-ERFMG,
    ERFME    LIKE  MSEG-ERFME,    " unit
END OF GT_ITAB.

DATABEGIN OF GT_LIST OCCURS 0,
    COUNT(5TYPE  C,
    MBLNR    LIKE  MKPF-MBLNR,
    BLDAT    LIKE  MKPF-BLDAT,
    LIFNR    LIKE  EKKO-LIFNR,
    NAME1    LIKE  ADRC-NAME1,
    NAME2    LIKE  ADRC-NAME2,
    NAME3    LIKE  ADRC-NAME3,
    NAME4    LIKE  ADRC-NAME4,
    EBELN    LIKE  MSEG-EBELN,
    EBELP    LIKE  EKPO-EBELP,
    BEDAT    LIKE  EKKO-BEDAT,
    MATNR    LIKE  EKPO-MATNR,
    MAKTX    LIKE  MAKT-MAKTX,
    MENGE    LIKE  EKPO-MENGE,
    MEINS    LIKE  EKPO-MEINS,    " unit
    ERFMG    LIKE  MSEG-ERFMG,
    ERFME    LIKE  MSEG-ERFME,    " unit
END OF GT_LIST.

DATABEGIN OF ITAB OCCURS 0,
    COUNT(5TYPE  C,
    MBLNR    LIKE  MKPF-MBLNR,
    BLDAT    LIKE  MKPF-BLDAT,
    LIFNR    LIKE  EKKO-LIFNR,
    NAME1    LIKE  ADRC-NAME1,
*    NAME2    LIKE  ADRC-NAME2,
*    NAME3    LIKE  ADRC-NAME3,
*    NAME4    LIKE  ADRC-NAME4,
    EBELN    LIKE  MSEG-EBELN,
    EBELP    LIKE  EKPO-EBELP,
    BEDAT    LIKE  EKKO-BEDAT,
    MATNR    LIKE  EKPO-MATNR,
    MAKTX    LIKE  MAKT-MAKTX,
    MENGE    LIKE  EKPO-MENGE,
    MEINS    LIKE  EKPO-MEINS,    " unit
    ERFMG    LIKE  MSEG-ERFMG,
    ERFME    LIKE  MSEG-ERFME,    " unit
END OF ITAB.

DATAG_EBELN TYPE EBELN,
      G_MBLNR TYPE MBLNR.

DATAGS_EKKO  TYPE          EKKO,
      GS_T024  TYPE          T024,
      GS_LFA   TYPE          LFA1,
      GS_LFB   TYPE          LFB1,
      GS_LFM   TYPE          LFM1,
      GS_T052U TYPE          T052U,
      GS_LFBK  TYPE          LFBK,
      GS_BNKA  TYPE          BNKA,
      GS_ADRC  TYPE          ADRC,
      GS_ADRT  TYPE          ADRT,
      GS_ADR6  TYPE          ADR6,
      GT_MARA  TYPE TABLE OF TY_MARA,
      GS_MARA  TYPE          TY_MARA,
      GT_LFA1  TYPE TABLE OF TY_LFA1,
      GS_LFA1  TYPE          TY_LFA1,
      GT_EKPO  TYPE TABLE OF TY_EKPO,
      GS_EKPO  TYPE          TY_EKPO.

DATAL_FORM(30TYPE VALUE 'TABLE_CREATE'.
DATAL_LENGTH TYPE LVC_OUTLEN.

* 기본 SET
DATA GV_SEL_FIELD   LIKE  HELP_INFO-FIELDNAME,
       GT_FIELDS      LIKE  HELP_VALUE OCCURS WITH HEADER LINE,
       GV_SEL_VALUE   LIKE  HELP_INFO-FLDVALUE,
       GV_TABIX       LIKE  SY-TABIX.

DATA G_LNO          TYPE   I.

* 화면 필드 선언. -> 선택된 값을 화면 필드에 뿌려줄 때 사용.
* 화면 필드 선언. -> 선택된 값을 화면 필드에 뿌려줄 때 사용.
DATA GT_DYNP  LIKE DYNPREAD OCCURS WITH HEADER LINE.
"NO ENTER ENTRY

DATA BEGIN OF FIELDS OCCURS 0.
        INCLUDE STRUCTURE HELP_VALUE.
DATA END OF FIELDS.

DATA BEGIN OF DYNPFIELDS OCCURS 0.
        INCLUDE STRUCTURE DYNPREAD.
DATA END OF DYNPFIELDS.

DATA BEGIN OF VALUETAB OCCURS 0,
          VALUE(80).
DATA END OF VALUETAB.

DATA BEGIN OF SELECT_VALUES OCCURS 0.
        INCLUDE STRUCTURE HELP_VTAB.
DATA END OF SELECT_VALUES.
DATARAD_CP,
      RAD_PP.
DATATYPE I.

***************** 광역 변수 선언
DATA OK_CODE      LIKE SY-UCOMM,
       OK_CODE_200  LIKE SY-UCOMM,
       SAVE_OK LIKE SY-UCOMM,
       G_RFCDEST LIKE RFCDES-RFCDEST,
       G_RTUN_C(2),            "RFC Return code
       G_RTUN_T(100).          "RFD Return Text
***************** ALV
TYPE-POOLS VRM,                " for Dropdown Listbox
             SLIS.
*----------------------------------------------------------------------*
*  TYPE
*----------------------------------------------------------------------*
DATA GS_CUSTOM_CONTAINER  TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       GS_CUSTOM_CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       GS_ALV_GRID       TYPE REF TO LCL_ALV_GRID,  " Local alv grid
       GS_ALV_GRID2      TYPE REF TO LCL_ALV_GRID,  " Local alv grid
       GS_VARIANT        TYPE DISVARIANT,    " Layout (External Use)
       GS_LAYOUT         TYPE LVC_S_LAYO,    " ALV control: Layout
       GT_FIELDCAT       TYPE LVC_T_FCAT,    " Field Catalog for List
       GT_FIELDCAT2      TYPE LVC_T_FCAT,    " Field Catalog for List
       GT_SLIS           TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
       GT_SLIS2          TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
       GS_FIELDCATALOG   TYPE LVC_T_FCAT WITH HEADER LINE,
       GS_FIELDCAT       TYPE LVC_S_FCAT,
       G2_FIELDCAT2      TYPE LVC_S_FCAT,
       GS_SORT           TYPE TABLE OF LVC_S_SORT,        "Field sort
       GS_EXCLUDE        TYPE UI_FUNCTIONS,          "ALV Toolbar dim
       GS_COLOR          TYPE LVC_T_SCOL WITH HEADER LINE"ALV color
       GS_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,   "ALV Event
       GS_SELFIELD       TYPE SLIS_SELFIELD,            "ALV Selected
       GS_DROPDOWN       TYPE LVC_T_DROP,               "ALV List box
       GS_CELLTAB        TYPE LVC_T_STYL WITH HEADER LINE,"ALVControl
       GS_ROWS           TYPE LVC_T_ROW,           "ALV 제어: 테이블행
       GS_ROW            TYPE LVC_S_ROW,           "ALV 제어: 라인내역
       GS_ROID           TYPE LVC_T_ROID,     "라인 ID에 라인번호 지정
       GS_STBL           TYPE LVC_S_STBL.     "최신표시 안정성

*&---------------------------------------------------------------------*
*> OFFICE FILE I/F .
*&---------------------------------------------------------------------*
* EXCEL로 PRINT하기 위한 VARIABLES
INCLUDE <CTLDEF>.
INCLUDE OLE2INCL.

TYPES  :   BEGIN        OF      TY_EXDAT,
               ROW      TYPE    I,
               COL      TYPE    I,
               VALUE(256),
           END          OF      TY_EXDAT.

DATA  :  GS_EXDAT       TYPE    TY_EXDAT,
         GT_EXDAT       TYPE    TY_EXDAT  OCCURS   20.
DATA  :  GC_CONTROL     TYPE    REF  TO   I_OI_CONTAINER_CONTROL,
         GC_SHEET       TYPE    REF  TO   I_OI_SPREADSHEET,
         GC_DOCPROXY    TYPE    REF  TO   I_OI_DOCUMENT_PROXY,
         GC_CONTAINER   TYPE    REF  TO   CL_GUI_CUSTOM_CONTAINER.
DATA  :  G_TEMPLATE(20)  TYPE C,
         G_LOTNAME(10)   TYPE C,
         G_SPRAS         LIKE QPMT-SPRACHE.
CLASS    C_OI_ERRORS    DEFINITION  LOAD.
DATAEXCEL     TYPE OLE2_OBJECT,
      WORKBOOK  TYPE OLE2_OBJECT,
      BOOKS     TYPE OLE2_OBJECT,
      BOOK      TYPE OLE2_OBJECT,
      SHEETS    TYPE OLE2_OBJECT,
      SHEET     TYPE OLE2_OBJECT,
      ACTIVESHEET TYPE OLE2_OBJECT,
      CELLS     TYPE OLE2_OBJECT,
      CELL      TYPE OLE2_OBJECT,
      ROW       TYPE OLE2_OBJECT,
      TEXTBOX   TYPE OLE2_OBJECT,
      BUFFER    TYPE OLE2_OBJECT,
      G_OBJID   LIKE WWWDATA-OBJID ,
      G_FILE    LIKE RLGRAP-FILENAME.
*----------------------------------------------------------------------*
*  VARIABLE
*----------------------------------------------------------------------*
DATA :  G_POS         TYPE I,                   "ALV Display position
        G_IND         LIKE SY-TABIX.            "Possible entry index

DATA :  G_TEXT(50)    TYPE C,                   "Process percentage info
        G_LINES       TYPE VALUE 1,           "Indicator line
        G_PERCENTAGE  TYPE P,                    "Indicator percentage
        G_GREEN       LIKE ICONS-L4 VALUE '@08@',"녹색
        G_YELLOW      LIKE ICONS-L4 VALUE '@09@',"노란색
        G_RED         LIKE ICONS-L4 VALUE '@0A@',"붉은색
        G_MOD         TYPE I,                    "Line 홀수/짝수
        G_CHAR        TYPE C,                    "색깔 정보
        G_CONSTANT(1TYPE VALUE 'C',          "Color constants
        G_ON(1)       TYPE VALUE 1,            "Intensified on
        G_OFF(1)      TYPE VALUE 0.            "Intensified off

*----------------------------------------------------------------------*
* CONSTANT
*----------------------------------------------------------------------*
CONSTANTS C_CONTAINER     TYPE SCRFNAME     VALUE 'G_ALV_GRID'"ALV
            C_CONTAINER2    TYPE SCRFNAME     VALUE 'G_ALV_GRID2'"ALV
*           C_GT_ITAB       TYPE SLIS_TABNAME VALUE '<GT_TABLE>',
            C_GT_TEMP       TYPE SLIS_TABNAME VALUE 'ITAB',
            C_GT_LIST(7)    TYPE VALUE 'GT_LIST',
            C_(1)           TYPE VALUE ' ',               "Empty flag
            C_INFO(4)       TYPE VALUE 'INFO',            "INFO
            C_COLINFO(7)    TYPE VALUE 'COLINFO',         "COLINFO
            C_STYLE(5)      TYPE VALUE 'STYLE',           "STYLE

*           ALV FIELD NAME
            C_EBELN(5)      TYPE VALUE 'EBELN',
            C_MATNR(5)      TYPE VALUE 'MATNR',
            C_MBLNR(5)      TYPE VALUE 'MBLNR',
            C_AUFNR(5)      TYPE VALUE 'AUFNR',
            C_GLSNO(5)      TYPE VALUE 'GLSNO',

*           ALV DATA LENGTH
            C_18(2)         TYPE VALUE '18',

*           DATA TYPE
            C_CHAR(4)       TYPE VALUE 'CHAR',
            C_QUAN(4)       TYPE VALUE 'QUAN',
            C_DEC(3)        TYPE VALUE 'DEC',
            C_CURR(6)       TYPE VALUE 'C_CURR',

*           STATUS TYPE
            C_BACK(4)       TYPE VALUE 'BACK',
            C_EXIT(4)       TYPE VALUE 'EXIT',
            C_CANC(4)       TYPE VALUE 'CANC',

*           알파벳
            C_A(1)          TYPE VALUE 'A',
            C_B(1)          TYPE VALUE 'B',
            C_C(1)          TYPE VALUE 'C',
            C_D(1)          TYPE VALUE 'D',
            C_E(1)          TYPE VALUE 'E',
            C_F(1)          TYPE VALUE 'F',
            C_G(1)          TYPE VALUE 'G',
            C_H(1)          TYPE VALUE 'H',
            C_I(1)          TYPE VALUE 'I',
            C_J(1)          TYPE VALUE 'J',
            C_K(1)          TYPE VALUE 'K',
            C_L(1)          TYPE VALUE 'L',
            C_M(1)          TYPE VALUE 'M',
            C_N(1)          TYPE VALUE 'N',
            C_O(1)          TYPE VALUE 'O',
            C_P(1)          TYPE VALUE 'P',
            C_Q(1)          TYPE VALUE 'Q',
            C_R(1)          TYPE VALUE 'R',
            C_S(1)          TYPE VALUE 'S',
            C_T(1)          TYPE VALUE 'T',
            C_U(1)          TYPE VALUE 'U',
            C_V(1)          TYPE VALUE 'V',
            C_W(1)          TYPE VALUE 'W',
            C_X(1)          TYPE VALUE 'X',
            C_Y(1)          TYPE VALUE 'Y',
            C_Z(1)          TYPE VALUE 'Z',

*           숫자
            C_1(1)          TYPE VALUE '1',
            C_2(1)          TYPE VALUE '2',
            C_3(1)          TYPE VALUE '3',
            C_4(1)          TYPE VALUE '4',
            C_5(1)          TYPE VALUE '5',
            C_6(1)          TYPE VALUE '6',
            C_7(1)          TYPE VALUE '7',
            C_8(1)          TYPE VALUE '8',
            C_9(1)          TYPE VALUE '9',
            C_0(1)          TYPE VALUE '0',
            C_0000000000(10VALUE '0000000000'.

***************** 광역 변수 선언
DATA G_OK_CODE LIKE SY-UCOMM.
*해더 관련
DATA G_DD_DOC           TYPE REF TO CL_DD_DOCUMENT,
       G_DD_IMAGE         TYPE REF TO CL_DD_IMAGE_NAME_CACHE.

***************** ALV
DATAFILENAME(80TYPE C,
      FILENAME1 LIKE RLGRAP-FILENAME,
      FILENAME2 LIKE RLGRAP-FILENAME,
      FILE_LENGTH TYPE I.

***********************************************************************
*조회조건 입력화면
***********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS S_WERKS FOR MSEG-WERKS  OBLIGATORY
                                         MEMORY ID WRK
                                         NO-EXTENSION.
SELECT-OPTIONS S_MBLNR FOR MKPF-MBLNR NO INTERVALS.
SELECTION-SCREEN END OF BLOCK BLOCK1.

SELECTION-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS S_EBELN  FOR MSEG-EBELN,
                 S_LIFNR  FOR MSEG-LIFNR,
                 S_MATNR  FOR MSEG-MATNR,
                 S_BLDAT  FOR MKPF-BLDAT,
                 S_USNAM  FOR MKPF-USNAM DEFAULT SY-UNAME
                          MATCHCODE OBJECT USER_COMP.
SELECTION-SCREEN END OF BLOCK BLOCK2.


*&---------------------------------------------------------------------*
*&  Include           ZMMR0820_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS '100'.
  SET TITLEBAR '100'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  ALV_DISPLAY  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE ALV_DISPLAY OUTPUT.
  IF GS_CUSTOM_CONTAINER IS INITIAL.
    IF NOT GS_CUSTOM_CONTAINER IS INITIAL.
      CALL METHOD GS_CUSTOM_CONTAINER->FREE.
    ENDIF.

    CREATE OBJECT GS_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME C_CONTAINER.
    CREATE OBJECT GS_ALV_GRID
      EXPORTING
        I_PARENT GS_CUSTOM_CONTAINER.

    PERFORM ALV_VARIANT.         "<-- ALV Variant
    PERFORM ALV_SORT.            "<-- SORT
    PERFORM ALV_LAYOUT.          "<-- General Layout

    PERFORM ALV_FIELDCATALOG.    "<-- Field Attribute
    PERFORM ALV_TOOLBAR_EXCLUDE"CHANGING G_EXCLUDE. "<-- Toolbar Dim

    CALL METHOD GS_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_DEFAULT            C_X
        IS_LAYOUT            GS_LAYOUT
        IS_VARIANT           GS_VARIANT
        IT_TOOLBAR_EXCLUDING GS_EXCLUDE
        I_SAVE               C_A
      CHANGING
        IT_OUTTAB            GT_LIST[]
        IT_FIELDCATALOG      GT_FIELDCAT[]
        IT_SORT              GS_SORT.

    CREATE OBJECT GS_EVENT_RECEIVER.

*--// ALV 변경사항 관리
    SET HANDLER
       GS_EVENT_RECEIVER->HANDLE_DATA_CHANGED  FOR GS_ALV_GRID.

*--// HOTSPOT click event
    SET HANDLER
       GS_EVENT_RECEIVER->HANDLE_HOTSPOT_CLICK FOR GS_ALV_GRID.

*--// DOUBLE click event
    SET HANDLER
      GS_EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR GS_ALV_GRID.

  ELSE.
    GS_STBL-ROW C_X.  "행기준 안정적 최신표시
    GS_STBL-COL C_X.  "열기준 정적 최신표시
    CALL METHOD GS_ALV_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE GS_STBL.
  ENDIF.

***//EDIT (0: EIDT 불가, 1: EDIT 가능)
  CALL METHOD GS_ALV_GRID->SET_READY_FOR_INPUT
    EXPORTING
      I_READY_FOR_INPUT 0.

* 변경시점에 이벤트발생...........................
* ENTER시점은 CL_GUI_ALV_GRID=>MC_EVT_ENTER로.....
  CALL METHOD GS_ALV_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

  CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
    EXPORTING
      CONTROL GS_ALV_GRID.

  CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMODULE.                 " ALV_DISPLAY  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PBO_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE PBO_0200 OUTPUT.
  SET       PF-STATUS    '0200'.
  PERFORM   BUILD_EXCEL_CONTAINER.

  PERFORM   BUILD_EXCEL_DATA_0200.
  PERFORM   SET_EXCEL_DATA.

ENDMODULE.                 " PBO_0200  OUTPUT


*&---------------------------------------------------------------------*
*&  Include           ZMMR0820_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
  CASE OK_CODE.
    WHEN 'BACK' OR 'CANC'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " EXIT  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  DATAL_ANSWER.

* 여기에 따로 명령 때리고 싶은거 넣으면됨..
  CASE OK_CODE.
    WHEN 'DOWN'.
      PERFORM     CHECK_ITAB_FOR_MARK.
      PERFORM     PRINT_GR_DOCUMENT.
  ENDCASE.

  CLEAR OK_CODE.
*-----> ALV Refresh - Column & line fix
  GS_STBL-ROW C_X.  "행기준 안정적 최신표시
  GS_STBL-COL C_X.  "열기준 정적 최신표시
  CALL METHOD GS_ALV_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE GS_STBL.
*-----> COLUMN SIZE REOPTIMIZ
  CALL METHOD GS_ALV_GRID->SET_OPTIMIZE_ALL_COLS.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  PAI_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE PAI_0200 INPUT.
  CHECK     OK_CODE_200      =   'BACK'    OR
            OK_CODE_200      =   'EXIT'    OR
            OK_CODE_200      =   'CANC'.

  IF  NOT   GC_DOCPROXY  IS  INITIAL.
    CALL METHOD GC_DOCPROXY->CLOSE_DOCUMENT.
    FREE  GC_DOCPROXY.
  ENDIF.
  IF  NOT   GC_CONTROL   IS  INITIAL.
    CALL METHOD GC_CONTROL->DESTROY_CONTROL.
    FREE  GC_CONTROL.
  ENDIF.

  IF  NOT   GC_CONTAINER     IS  INITIAL.
    CALL METHOD GC_CONTAINER->FREE.
    FREE  GC_CONTAINER.
  ENDIF.

  LEAVE TO SCREEN 0.
ENDMODULE.                 " PAI_0200  INPUT


*&---------------------------------------------------------------------*
*&  Include           ZMMR0820_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  INITIAL_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INITIAL_SET .
  SELECT SINGLE PARVA INTO S_WERKS-LOW
         FROM USR05
        WHERE BNAME EQ SY-UNAME
          AND PARID EQ 'WRK'.
ENDFORM.                    " INITIAL_SET
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SELECT_DATA .
  DATALT_ITAB LIKE TABLE OF GT_ITAB.
  SELECT A~ERFMG A~ERFME
         B~MBLNR B~BLDAT
         C~LIFNR C~BEDAT
         D~EBELN D~EBELP D~MATNR D~MENGE D~MEINS D~TXZ01
    INTO CORRESPONDING FIELDS OF TABLE GT_ITAB
    FROM MSEG AS A
    INNER JOIN MKPF AS B
      ON B~MBLNR EQ A~MBLNR
    INNER JOIN EKKO AS C
      ON C~EBELN EQ A~EBELN
    INNER JOIN EKPO AS D
      ON D~EBELN EQ A~EBELN
     AND D~EBELP EQ A~EBELP
WHERE A~BWART EQ '101'
  AND A~WERKS IN S_WERKS
  AND B~MBLNR IN S_MBLNR
  AND A~EBELN IN S_EBELN
  AND A~LIFNR IN S_LIFNR
  AND A~MATNR IN S_MATNR
  AND B~BLDAT IN S_BLDAT
  AND B~USNAM IN S_USNAM.

  LT_ITAB[] GT_ITAB[].

  IF LT_ITAB[] IS NOT INITIAL.
    SORT LT_ITAB BY MATNR.
    SELECT  A~MATNR B~MAKTX A~GROES
                INTO CORRESPONDING FIELDS OF TABLE GT_MARA
             FROM MARA AS JOIN MAKT AS B
               ON A~MATNR B~MATNR
                 FOR ALL ENTRIES IN LT_ITAB
               WHERE A~MATNR LT_ITAB-MATNR
                 AND B~SPRAS SY-LANGU.
    SORT GT_MARA BY MATNR.

    SORT LT_ITAB BY LIFNR.
    SELECT  A~LIFNR
            B~DATE_FROM  B~NATION    B~DATE_TO
            B~NAME1      B~NAME2     B~NAME3     B~NAME4
                INTO CORRESPONDING FIELDS OF TABLE GT_LFA1
             FROM  LFA1 AS JOIN ADRC AS B
               ON A~ADRNR B~ADDRNUMBER
                 FOR ALL ENTRIES IN LT_ITAB
               WHERE A~LIFNR LT_ITAB-LIFNR.

    SORT GT_LFA1 BY LIFNR.
  ENDIF.

ENDFORM.                    " SELECT_DATA
*&---------------------------------------------------------------------*
*&      Form  MAKE_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAKE_LIST .
  DATALV_CNT(5TYPE C.
  SORT GT_ITAB BY MBLNR EBELN EBELP.

  LOOP AT GT_ITAB.
    MOVE-CORRESPONDING GT_ITAB TO GT_LIST.
    LV_CNT LV_CNT + 1.
    GT_LIST-COUNT LV_CNT.

    CLEAR GS_MARA.
    READ TABLE GT_MARA INTO GS_MARA
                             WITH KEY MATNR GT_ITAB-MATNR
                             BINARY SEARCH.
    IF SY-SUBRC IS INITIAL.
      MOVEGS_MARA-MAKTX   TO  GT_LIST-MAKTX.
    ELSE.
      MOVEGT_ITAB-TXZ01   TO  GT_LIST-MAKTX.
    ENDIF.

    CLEAR GS_LFA1.
    READ TABLE GT_LFA1 INTO GS_LFA1
                             WITH KEY LIFNR GT_ITAB-LIFNR
                            BINARY SEARCH.
    IF SY-SUBRC IS INITIAL.
      MOVEGS_LFA1-NAME1   TO  GT_LIST-NAME1,
            GS_LFA1-NAME2   TO  GT_LIST-NAME2,
            GS_LFA1-NAME3   TO  GT_LIST-NAME3,
            GS_LFA1-NAME4   TO  GT_LIST-NAME4.
    ENDIF.

    APPEND GT_LIST.
    CLEARGT_LISTGT_ITAB.

  ENDLOOP.

ENDFORM.                    " MAKE_LIST
*&---------------------------------------------------------------------*
*&      Form  INIT_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT_DATE .
  REFRESH S_BLDATCLEAR S_BLDAT.
  S_BLDAT-SIGN 'I'.
  S_BLDAT-OPTION 'BT'.
  S_BLDAT-HIGH   SY-DATLO.

  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      DATE      SY-DATLO
      DAYS      '07'
      MONTHS    '00'
      SIGNUM    '-'
      YEARS     '00'
    IMPORTING
      CALC_DATE S_BLDAT-LOW.

  APPEND S_BLDAT.
ENDFORM.                    " INIT_DATE
*&---------------------------------------------------------------------*
*&      Form  CHECK_ITAB_FOR_MARK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_ITAB_FOR_MARK .
  DATA LT_ROWS TYPE LVC_T_ROW,  "라인열
         LS_ROWS TYPE LVC_S_ROW,
         TMP TYPE I,
         L_CNT TYPE I.

  CLEAR LT_ROWS[]TMPL_CNT.

  CALL METHOD GS_ALV_GRID->GET_SELECTED_ROWS
    IMPORTING
      ET_INDEX_ROWS LT_ROWS.

  DELETE LT_ROWS WHERE ROWTYPE <> SPACE.
  DESCRIBE TABLE LT_ROWS LINES L_CNT.
  IF L_CNT > 1.
    MESSAGE E000(ZMMWITH 'Only one entry chosen'.
*. Only one entry chosen.
  ENDIF.

  IF L_CNT 0.
    MESSAGE    E000(ZMMWITH 'No selected data.'.
*. No selected data.
    LEAVE SCREEN.
  ENDIF.

  READ TABLE LT_ROWS INTO LS_ROWS INDEX 1.

  CLEAR G_EBELN.
  READ TABLE GT_LIST  INDEX  LS_ROWS-INDEX.
  MOVEGT_LIST-EBELN TO G_EBELN,
        GT_LIST-MBLNR TO G_MBLNR.

ENDFORM.                    " CHECK_ITAB_FOR_MARK
*&---------------------------------------------------------------------*
*&      Form  PRINT_GR_DOCUMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PRINT_GR_DOCUMENT .
  CLEAROK_CODE.
  CALL SCREEN '0200'.
ENDFORM.                    " PRINT_GR_DOCUMENT
*&---------------------------------------------------------------------*
*&      Form  ALV_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_VARIANT .
  CLEAR GS_VARIANT.
  GS_VARIANT-REPORT    SY-REPID.     "프로그램명
  GS_VARIANT-USERNAME  SY-UNAME.     "사용자
ENDFORM.                    " ALV_VARIANT
*&---------------------------------------------------------------------*
*&      Form  ALV_SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_SORT .
*  CLEAR : GS_SORT, GS_SORT[].
*  PERFORM SORT_FIELD TABLES GS_SORT USING :
*    1  'EBELN'  C_X C_ C_X.
ENDFORM.                    " ALV_SORT
*&---------------------------------------------------------------------*
*&      Form  SORT_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_SORT  text
*      -->P_1      text
*      -->P_0359   text
*      -->P_C_X  text
*      -->P_C_  text
*      -->P_C_X  text
*----------------------------------------------------------------------*
FORM SORT_FIELD  TABLES P_GS_SORT TYPE LVC_T_SORT
                 USING    P_SPOS
                          P_FIELDNAME
                          P_UP
                          P_DOWN
                          P_SUBTOT.
  P_GS_SORT-SPOS      P_SPOS.
  P_GS_SORT-FIELDNAME P_FIELDNAME.
  P_GS_SORT-UP        P_UP.
  P_GS_SORT-DOWN      P_DOWN.
  P_GS_SORT-SUBTOT    P_SUBTOT.

  APPEND P_GS_SORT.
ENDFORM.                    " SORT_FIELD
*&---------------------------------------------------------------------*
*&      Form  ALV_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_LAYOUT .
  CLEAR GS_LAYOUT.
  GS_LAYOUT-SEL_MODE   C_A.
  GS_LAYOUT-ZEBRA      C_X.          " LINE COLOR
  GS_LAYOUT-CWIDTH_OPT C_.           " ALV 제어: 열너비최적화
*  gs_layout-info_fname = c_info.       " ROW COLOR.
*  gs_layout-ctab_fname = c_colinfo.    " COLUMN COLOR.
*  gs_layout-stylefname = c_style.
  GS_LAYOUT-NO_ROWMARK ' '.
* GS_LAYOUT-GRID_TITLE = SY-TITLE.
ENDFORM.                    " ALV_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  ALV_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_FIELDCATALOG .
  CLEARGS_FIELDCATGT_FIELDCAT[]G_POS,
         GT_SLISGT_SLIS[].

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME     SY-REPID
      I_INTERNAL_TABNAME C_GT_TEMP
      I_INCLNAME         SY-REPID
    CHANGING
      CT_FIELDCAT        GT_SLIS[].

  CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
    EXPORTING
      IT_FIELDCAT_ALV GT_SLIS[]
    IMPORTING
      ET_FIELDCAT_LVC GT_FIELDCAT
    TABLES
      IT_DATA         ITAB
    EXCEPTIONS
      IT_DATA_MISSING 1
      OTHERS          2.

  LOOP AT  GT_FIELDCAT INTO GS_FIELDCAT.
    CASE GS_FIELDCAT-FIELDNAME.
      WHEN 'COUNT'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'NO'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ 'R' C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'MBLNR'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'GR NO'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_X C_ C_ C_ C_ C_ C_.

      WHEN 'BLDAT'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'GR DOC Date'
                GS_FIELDCAT-DATATYPE
                '10'
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'LIFNR'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'Vendor'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_X C_ C_ C_ C_ C_ C_.

      WHEN 'NAME1'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'NAME'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'EBELN'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'PO NO'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_X C_ C_ C_ C_ C_ C_.

      WHEN 'EBELP'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'PO ITEM'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'BEDAT'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'PO DATE'
                GS_FIELDCAT-DATATYPE
                '10'
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'MATNR'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'Material'
                GS_FIELDCAT-DATATYPE
                '8'
                C_X C_ C_ C_ C_ C_X C_ C_ C_ C_X C_ C_.

      WHEN 'MAKTX'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'Material Desc'
                GS_FIELDCAT-DATATYPE
                '32'
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'MENGE'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'PO Qty'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ 'MEINS'.

      WHEN 'MEINS'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'PO Qty Unit'
                GS_FIELDCAT-DATATYPE
                '8'
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

      WHEN 'ERFMG'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'GR Qty'
                GS_FIELDCAT-DATATYPE
                GS_FIELDCAT-INTLEN
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ 'MEINS'.

      WHEN 'ERFME'.
        PERFORM ALV_FIELDCAT_INSERT_RTN USING:
                GS_FIELDCAT-FIELDNAME
                'GR Qty Unit'
                GS_FIELDCAT-DATATYPE
                '8'
                C_X C_ C_ C_ C_ C_ C_ C_ C_ C_ C_ C_.

*      WHEN 'COUNT'.
*        PERFORM  FIELDCAT_SET USING: 'X'       " key
*                                     ' '
*                                     'NO'.      " Text

*      WHEN 'MBLNR'.
*        PERFORM  FIELDCAT_SET USING: 'X'       " key
*                                     'ALPHA'
*                                     'GR NO'.  " Text

*      WHEN 'BLDAT'.
*        PERFORM  FIELDCAT_SET USING: ' '       " key
*                                     ' '
*                                     'GR DOC Date'. " Text

*      WHEN 'LIFNR'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     'ALPHA'
*                                     'Vendor'.
*
*      WHEN 'NAME1'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'Name1'.
*      WHEN 'NAME2'.
*      WHEN 'NAME3'.
*      WHEN 'NAME4'.
*      WHEN 'EBELN'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     'ALPHA'
*                                     'PO NO'.
*      WHEN 'EBELP'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     'ALPHA'
*                                     ' '.
*      WHEN 'BEDAT'.
*        PERFORM  FIELDCAT_SET USING: ' '       " key
*                                     ' '
**                                     'PO Date'. " Text
*      WHEN 'MATNR'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     'MATN1'
*                                     'Material'.
*      WHEN 'MAKTX'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'Material Desc'.

*      WHEN 'MENGE'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'PO Qty'.
*      WHEN 'MENGE'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'PO Qty Unit'.
*      WHEN 'ERFMG'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'GR Qty'.
*      WHEN 'MEINS'.
*        PERFORM  FIELDCAT_SET USING: ' '
*                                     ' '
*                                     'GR Qty Unit'.
    ENDCASE.
    MODIFY GT_FIELDCAT FROM GS_FIELDCAT.
  ENDLOOP.
ENDFORM.                    " ALV_FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  ALV_TOOLBAR_EXCLUDE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_TOOLBAR_EXCLUDE .
  DATA LS_EXCLUDE TYPE UI_FUNC.

*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXCL_ALL. " ** 툴바 모두제거 **
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO" 실행취소 &LOCAL&UNDO
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_AUF. " 소계확장 &AUF
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_AVERAGE. " &AVERAGE
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_BACK_CLASSIC.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_ABC. " &ABC
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_CHAIN.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_CRBATCH.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_CRWEB.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_LINEITEMS.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_MASTER_DATA.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_MORE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_REPORT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_XINT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_XXL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_COL_INVISIBLE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_COL_OPTIMIZE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CURRENT_VARIANT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_DATA_SAVE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_DELETE_FILTER.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_DESELECT_ALL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_DETAIL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXPCRDATA.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXPCRDESIG.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXPCRTEMPL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXPMDB.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_EXTEND.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_F4.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FILTER.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIND.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIX_COLUMNS.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_GRAPH.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_HELP.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOAD_VARIANT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.     " 행 카피.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_HTML.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW" 행 카피.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.      " 가위.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW" 행삭제.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW" 행삽입.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW" 라인생성.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.      " 겹쳐쓰기.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW" 겹쳐쓰기.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAINTAIN_VARIANT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_MINIMUM.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PC_FILE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT_BACK.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT_PREV.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
  LS_EXCLUDE CL_GUI_ALV_GRID=>MC_FC_REFRESH" 새로고침.
  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REPREP.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SAVE_VARIANT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SELECT_ALL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SEND.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SEPARATOR.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SORT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SORT_ASC.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SORT_DSC.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SUBTOT.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SUM.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_TO_OFFICE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_TO_REP_TREE.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_UNFIX_COLUMNS.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_VIEWS.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_VIEW_CRYSTAL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_VIEW_EXCEL.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_VIEW_GRID.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_WORD_PROCESSOR.
*  APPEND LS_EXCLUDE TO GS_EXCLUDE.

ENDFORM.                    " ALV_TOOLBAR_EXCLUDE
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0474   text
*      -->P_0475   text
*      -->P_0476   text
*----------------------------------------------------------------------*
FORM FIELDCAT_SET  USING    P_KEY
                            P_CONV
                            P_TEXT.

  GS_FIELDCAT-KEY       P_KEY.
  GS_FIELDCAT-CONVEXIT  P_CONV.
  IF P_TEXT IS NOT INITIAL.
    GS_FIELDCAT-COLTEXT   P_TEXT.
    GS_FIELDCAT-SCRTEXT_L P_TEXT.
    GS_FIELDCAT-SCRTEXT_M P_TEXT.
    GS_FIELDCAT-SCRTEXT_S P_TEXT.
  ENDIF.

ENDFORM.                    " FIELDCAT_SET
*&---------------------------------------------------------------------*
*&      Form  BUILD_EXCEL_CONTAINER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_EXCEL_CONTAINER .
  DATA  :  L_AVAIL         TYPE       I.
  DATA  :  LC_ERROR        TYPE  REF  TO  I_OI_ERROR.

  CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
    IMPORTING
      CONTROL GC_CONTROL
      ERROR   LC_ERROR.
  CALL METHOD LC_ERROR->RAISE_MESSAGE
    EXPORTING
      TYPE 'E'.

  CREATE OBJECT GC_CONTAINER
    EXPORTING
      CONTAINER_NAME 'CONTAINER'.
  CALL METHOD GC_CONTROL->INIT_CONTROL
    EXPORTING
      R3_APPLICATION_NAME      'JPN'
      INPLACE_ENABLED          'X'
      INPLACE_SCROLL_DOCUMENTS 'X'
      PARENT                   GC_CONTAINER
      REGISTER_ON_CLOSE_EVENT  'X'
      REGISTER_ON_CUSTOM_EVENT 'X'
      NO_FLUSH                 'X'
    IMPORTING
      ERROR                    LC_ERROR.
  CALL METHOD LC_ERROR->RAISE_MESSAGE
    EXPORTING
      TYPE 'E'.

  PERFORM   LOAD_EXCEL_FILE.

  CALL METHOD GC_DOCPROXY->HAS_SPREADSHEET_INTERFACE
    EXPORTING
      NO_FLUSH     'X'
    IMPORTING
      IS_AVAILABLE L_AVAIL
      ERROR        LC_ERROR.

  CALL METHOD GC_DOCPROXY->GET_SPREADSHEET_INTERFACE
    EXPORTING
      NO_FLUSH        SPACE
    IMPORTING
      SHEET_INTERFACE GC_SHEET
      ERROR           LC_ERROR.
ENDFORM.                    " BUILD_EXCEL_CONTAINER
*&---------------------------------------------------------------------*
*&      Form  BUILD_EXCEL_DATA_0200
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_EXCEL_DATA_0200 .
  DATAL_CNT TYPE C.
  DATAL_DATE(15).
  DATAL_STRING TYPE STRING,
        L_TEXT(50TYPE C.

  READ TABLE GT_LIST  WITH KEY MBLNR G_MBLNR.
* GR NO
  PERFORM EXCEL_ASSIGN_DATA USING 6    GT_LIST-MBLNR.

* GR DOC DATE
  CLEARL_DATE.
  PERFORM CONVERSION_EXIT_PDATE_OUTPUT USING GT_LIST-BLDAT
                                    CHANGING L_DATE.
  PERFORM EXCEL_ASSIGN_DATA USING 9    L_DATE.

* VENDOR NAME
  PERFORM EXCEL_ASSIGN_DATA USING 4    GT_LIST-NAME1.

* PO NO
  PERFORM EXCEL_ASSIGN_DATA USING 4    GT_LIST-EBELN.

* PO DATE
  CLEARL_DATE.
  PERFORM CONVERSION_EXIT_PDATE_OUTPUT USING GT_LIST-BEDAT
                                    CHANGING L_DATE.
  PERFORM EXCEL_ASSIGN_DATA USING 6    L_DATE.

  12.
  CLEAR L_CNT.
  LOOP AT GT_LIST WHERE MBLNR G_MBLNR.
    1.
    ADD TO L_CNT.
    PERFORM EXCEL_ASSIGN_DATA USING 2   GT_LIST-MAKTX.
    PERFORM EXCEL_ASSIGN_DATA USING 5   GT_LIST-MATNR.

    CLEAR L_TEXT.
    WRITEGT_LIST-MENGE TO L_TEXT UNIT GT_LIST-MEINS.
    PERFORM EXCEL_ASSIGN_DATA USING 7   L_TEXT.

    CLEAR L_TEXT.
    WRITEGT_LIST-ERFMG TO L_TEXT UNIT GT_LIST-ERFME.
    PERFORM EXCEL_ASSIGN_DATA USING 8   L_TEXT.

    PERFORM EXCEL_ASSIGN_DATA USING 6   GT_LIST-MEINS.
  ENDLOOP.
ENDFORM.                    " BUILD_EXCEL_DATA_0200
*&---------------------------------------------------------------------*
*&      Form  SET_EXCEL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_EXCEL_DATA .
  DATA  :  L_RNAME(128),
           L_TABIX(05)      TYPE     N.
  DATA  :  WA_EXDAT         TYPE     TY_EXDAT.
  DATA  :  LC_RITEM         TYPE     SOI_RANGE_ITEM,
           LC_RLIST         TYPE     SOI_RANGE_LIST,
           LC_GITEM         TYPE     SOI_GENERIC_ITEM,
           LC_GTABL         TYPE     SOI_GENERIC_TABLE.

  LC_RITEM-ROWS        =    1.
  LC_RITEM-COLUMNS     =    1.
  LC_GITEM-ROW         =    1.
  LC_GITEM-COLUMN      =    1.

  LOOP AT     GT_EXDAT  INTO     WA_EXDAT.
    L_TABIX     =    SY-TABIX.
    CONCATENATE      'DATA'   L_TABIX   INTO   L_RNAME.
    PERFORM   DEFINE_RANGES   USING     L_RNAME  WA_EXDAT.
    LC_RITEM-NAME    =        L_RNAME.
    APPEND    LC_RITEM        TO        LC_RLIST.
    LC_GITEM-VALUE   =        WA_EXDAT-VALUE.
    APPEND    LC_GITEM        TO        LC_GTABL.
  ENDLOOP.

  CALL METHOD GC_SHEET->SET_RANGES_DATA
    EXPORTING
      RANGES   LC_RLIST
      CONTENTS LC_GTABL
      NO_FLUSH 'X'.
ENDFORM.                    " SET_EXCEL_DATA
*&---------------------------------------------------------------------*
*&      Form  LOAD_EXCEL_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LOAD_EXCEL_FILE .
  DATAMESSAGE(100),
          ANS.

* Declare an instance for the central object of the office integration
  DATA:  BDS_DOCUMENT TYPE REF TO CL_BDS_DOCUMENT_SET,
         ERRORS       TYPE REF TO I_OI_ERROR OCCURS WITH HEADER LINE.

* BDS Document File
  DATADOC_CLASSNAME   TYPE SBDST_CLASSNAME  VALUE 'ZMM',
        DOC_CLASSTYPE   TYPE SBDST_CLASSTYPE  VALUE 'OT',
        DOC_OBJECT_KEY  TYPE SBDST_OBJECT_KEY VALUE SPACE.

  DATADOC_DESCR(40VALUE 'ZMM'.

  DATADOC_SIGNATURE     TYPE SBDST_SIGNATURE,
        DOC_SIGNATURE_2   TYPE SBDST_SIGNATURE,
        DOC_COMPONENTS    TYPE SBDST_COMPONENTS,
        DOC_PROPERTIES    TYPE SBDST_PROPERTIES,
        DOC_URIS          TYPE SBDST_URI,
        DOC_MIMETYPE      TYPE BAPICOMPON-MIMETYPE,
        DOC_URL           LIKE BAPIURI-URI,
        DOCUMENT_MIMETYPE TYPE BAPICOMPON-MIMETYPE,
        WA_DOC_SIGNATURE  LIKE LINE OF DOC_SIGNATURE,
        WA_DOC_COMPONENTS LIKE LINE OF DOC_COMPONENTS,
        WA_DOC_PROPERTIES LIKE LINE OF DOC_PROPERTIES,
        WA_DOC_URIS       LIKE LINE OF DOC_URIS.

* Data
  TYPESMY_ROW(500)    TYPE C.                " Excel Range
  DATA:  EXCEL_TABLE_WA TYPE MY_ROW,
         EXCEL_TABLE    TYPE TABLE OF MY_ROW.

* spreadsheet interface structures for excel data input
  DATA:  CELLITEM       TYPE SOI_GENERIC_ITEM,
         RANGEITEM      TYPE SOI_RANGE_ITEM,
         RANGES         TYPE SOI_RANGE_LIST,
         EXCEL_INPUT    TYPE SOI_GENERIC_TABLE,
         EXCEL_INPUT_WA TYPE SOI_GENERIC_ITEM,
         INITIALIZED    TYPE C.

  DATAFIELDS_TABLE      TYPE TABLE OF RFC_FIELDS,
        W_FIELDS_TABLE    TYPE RFC_FIELDS.

* Define Data
  DATAOKCODE(04).
  DATARETCODE           TYPE SOI_RET_STRING.
  DATADOCUMENT_TYPE     TYPE SOI_DOCUMENT_TYPE.
  DATADOCUMENT_FORMAT   TYPE SOI_DOCUMENT_TYPE.
  DATADATA_TABLE        TYPE SBDST_CONTENT,
        DATA_SIZE         TYPE I.


  CREATE OBJECT BDS_DOCUMENT.

  CALL METHOD BDS_DOCUMENT->GET_INFO
    EXPORTING
      CLASSNAME       DOC_CLASSNAME
      CLASSTYPE       DOC_CLASSTYPE
      OBJECT_KEY      DOC_OBJECT_KEY
    CHANGING
      COMPONENTS      DOC_COMPONENTS
      SIGNATURE       DOC_SIGNATURE
    EXCEPTIONS
      NOTHING_FOUND   1
      ERROR_KPRO      2
      INTERNAL_ERROR  3
      PARAMETER_ERROR 4
      NOT_AUTHORIZED  5
      NOT_ALLOWED     6.

  DOC_SIGNATURE_2 DOC_SIGNATURE.

  READ TABLE DOC_SIGNATURE_2 INTO WA_DOC_SIGNATURE
          WITH KEY PROP_VALUE 'GOODS_RECEIPT_FORM'.

  CLEAR DOC_SIGNATURE.
  APPEND WA_DOC_SIGNATURE TO DOC_SIGNATURE.
  CLEAR DOC_SIGNATURE_2.
  CLEAR WA_DOC_SIGNATURE.

* retrieving the choosen document:
  CALL METHOD BDS_DOCUMENT->GET_WITH_URL
    EXPORTING
      CLASSNAME       DOC_CLASSNAME
      CLASSTYPE       DOC_CLASSTYPE
      OBJECT_KEY      DOC_OBJECT_KEY
    CHANGING
      URIS            DOC_URIS
      SIGNATURE       DOC_SIGNATURE
    EXCEPTIONS
      NOTHING_FOUND   1
      ERROR_KPRO      2
      INTERNAL_ERROR  3
      PARAMETER_ERROR 4
      NOT_AUTHORIZED  5
      NOT_ALLOWED     6.

* Get the correct 'doc_component'-Data that correspond to the choosen
* 'doc_signature':
  CLEAR DOC_COMPONENTS.
  CALL METHOD BDS_DOCUMENT->GET_INFO
    EXPORTING
      CLASSNAME       DOC_CLASSNAME
      CLASSTYPE       DOC_CLASSTYPE
      OBJECT_KEY      DOC_OBJECT_KEY
    CHANGING
      COMPONENTS      DOC_COMPONENTS
      SIGNATURE       DOC_SIGNATURE
    EXCEPTIONS
      NOTHING_FOUND   1
      ERROR_KPRO      2
      INTERNAL_ERROR  3
      PARAMETER_ERROR 4
      NOT_AUTHORIZED  5
      NOT_ALLOWED     6.

  READ TABLE DOC_SIGNATURE INTO WA_DOC_SIGNATURE INDEX 1.
  READ TABLE DOC_COMPONENTS INTO WA_DOC_COMPONENTS INDEX 1.
  READ TABLE DOC_URIS INTO WA_DOC_URIS INDEX 1.

* Just to put the right description on the dynpro:
  LOOP AT DOC_SIGNATURE INTO WA_DOC_SIGNATURE
        WHERE PROP_NAME 'DESCRIPTION'.
    DOC_DESCR WA_DOC_SIGNATURE-PROP_VALUE.
  ENDLOOP.

  DOC_MIMETYPE WA_DOC_COMPONENTS-MIMETYPE.            " MIME Type
  DOC_URL WA_DOC_URIS-URI.

  G_FILE DOC_URL.

  CASE DOC_MIMETYPE.
    WHEN 'application/x-rtf' OR 'text/rtf'.
      DOCUMENT_FORMAT SOI_DOCFORMAT_RTF.
    WHEN 'application/x-oleobject'.
      DOCUMENT_FORMAT SOI_DOCFORMAT_COMPOUND.
    WHEN 'text/plain'.
      DOCUMENT_FORMAT SOI_DOCFORMAT_TEXT.
    WHEN OTHERS.
      DOCUMENT_FORMAT SOI_DOCFORMAT_NATIVE.
  ENDCASE.

  IF NOT GC_DOCPROXY IS INITIAL.
    DATAIS_CLOSED TYPE I.
    CALL METHOD GC_DOCPROXY->IS_DESTROYED
      IMPORTING
        RET_VALUE IS_CLOSED.
  ENDIF.

  CALL METHOD GC_CONTROL->GET_DOCUMENT_PROXY
    EXPORTING
      DOCUMENT_TYPE   DOCUMENT_TYPE
      DOCUMENT_FORMAT DOCUMENT_FORMAT
    IMPORTING
      DOCUMENT_PROXY  GC_DOCPROXY
      RETCODE         RETCODE.
  IF RETCODE NE C_OI_ERRORS=>RET_OK.
    EXIT.
  ENDIF.

  CALL METHOD GC_DOCPROXY->OPEN_DOCUMENT
    EXPORTING
      DOCUMENT_URL  DOC_URL
      OPEN_INPLACE  'X'
      OPEN_READONLY ' '
    IMPORTING
      RETCODE       RETCODE.
  CALL METHOD C_OI_ERRORS=>RAISE_MESSAGE
    EXPORTING
      TYPE 'E'.

ENDFORM.                    " LOAD_EXCEL_FILE
*&---------------------------------------------------------------------*
*&      Form  DEFINE_RANGES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_RNAME  text
*      -->P_WA_EXDAT  text
*----------------------------------------------------------------------*
FORM DEFINE_RANGES  USING    PA_RNAME
                             PS_EXDAT   STRUCTURE   GS_EXDAT.

  CALL METHOD GC_SHEET->INSERT_RANGE_DIM
    EXPORTING
      NAME     PA_RNAME
      TOP      PS_EXDAT-ROW
      LEFT     PS_EXDAT-COL
      ROWS     1
      COLUMNS  1
      NO_FLUSH 'X'.
ENDFORM.                    " DEFINE_RANGES
*&---------------------------------------------------------------------*
*&      Form  EXCEL_ASSIGN_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I  text
*      -->P_2      text
*      -->P_GT_LIST_MAKTX  text
*----------------------------------------------------------------------*
FORM EXCEL_ASSIGN_DATA  USING    PA_ROW  PA_COL  PA_VALUE.

  DATA  :  WA_EXDAT TYPE TY_EXDAT.

  WA_EXDAT-ROW        =     PA_ROW.
  WA_EXDAT-COL        =     PA_COL.
  WA_EXDAT-VALUE      =     PA_VALUE.
  APPEND   WA_EXDAT   TO    GT_EXDAT.
ENDFORM.                    " EXCEL_ASSIGN_DATA
*&---------------------------------------------------------------------*
*&      Form  CONVERSION_EXIT_PDATE_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_LIST_BLDAT  text
*      <--P_L_DATE  text
*----------------------------------------------------------------------*
FORM CONVERSION_EXIT_PDATE_OUTPUT  USING    P_IN_DATE TYPE SY-DATUM
                                   CHANGING P_OUT_DATE.
  CLEAR P_OUT_DATE.
  CALL FUNCTION 'CONVERSION_EXIT_PDATE_OUTPUT'
    EXPORTING
      INPUT  P_IN_DATE
    IMPORTING
      OUTPUT P_OUT_DATE.

ENDFORM.                    " CONVERSION_EXIT_PDATE_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_FIELDCAT_INSERT_RTN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_FIELDCAT_FIELDNAME  text
*      -->P_0555   text
*      -->P_GT_FIELDCAT_DATATYPE  text
*      -->P_GT_FIELDCAT_INTLEN  text
*      -->P_C_X  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*      -->P_C_  text
*----------------------------------------------------------------------*
FORM ALV_FIELDCAT_INSERT_RTN  USING
   P_FNAM P_TEXT P_TYPE P_OUTLEN  P_FIXCOLUMN P_NOOUT
   P_KEY  P_JUST P_SUM  P_HOTSPOT P_F4 P_EDIT P_BOX
   P_ZERO P_CURR P_UNIT.

  CLEARG_POS.

  G_POS                        G_POS + 1.
  GS_FIELDCATALOG-COL_POS      G_POS.      "colum position
  GS_FIELDCATALOG-FIELDNAME    P_FNAM.      "Field name
  GS_FIELDCATALOG-REPTEXT      P_TEXT.      "Field Description
  GS_FIELDCATALOG-DATATYPE     P_TYPE.      "Data Type
  GS_FIELDCATALOG-OUTPUTLEN    P_OUTLEN.    "Data Length
  GS_FIELDCATALOG-FIX_COLUMN   P_FIXCOLUMN"Fix Column
  GS_FIELDCATALOG-NO_OUT       P_NOOUT.     "Hidden Field
  GS_FIELDCATALOG-KEY          P_KEY.       "Key.
  GS_FIELDCATALOG-JUST         P_JUST.      "위치.
  GS_FIELDCATALOG-DO_SUM       P_SUM.       "Do sum.
  GS_FIELDCATALOG-HOTSPOT      P_HOTSPOT.   "Hotspot.
  GS_FIELDCATALOG-F4AVAILABL   P_F4.        "Search help
  GS_FIELDCATALOG-EDIT         P_EDIT.      "Edit.
  GS_FIELDCATALOG-CHECKBOX     P_BOX.       "BOX.
  GS_FIELDCATALOG-NO_ZERO      P_ZERO.      "NO-ZERO.
  GS_FIELDCATALOG-CFIELDNAME   P_CURR.      "NO-ZERO.
  GS_FIELDCATALOG-QFIELDNAME   P_UNIT.      "unit.

  MOVE-CORRESPONDING GS_FIELDCATALOG TO GS_FIELDCATCLEAR GS_FIELDCATALOG.

ENDFORM.                    " ALV_FIELDCAT_INSERT_RTN
*&---------------------------------------------------------------------*
*&      Form  METHOD_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW_ID  text
*      -->P_E_COLUMN_ID  text
*----------------------------------------------------------------------*
FORM METHOD_HOTSPOT_CLICK  USING P_ROW
                                 P_COLUMN.


  CASE P_COLUMN.
    WHEN 'MBLNR'.
      READ TABLE GT_LIST INDEX P_ROW.

      IF GT_LIST-MBLNR IS NOT INITIAL.
        SET PARAMETER ID 'MBN' FIELD GT_LIST-MBLNR.
        SET PARAMETER ID 'MJA' FIELD GT_LIST-BLDAT(4).

        CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
      ENDIF.

    WHEN 'LIFNR'.
      READ TABLE GT_LIST INDEX P_ROW.

      IF GT_LIST-LIFNR IS NOT INITIAL.
        SET PARAMETER ID 'LIF' FIELD GT_LIST-LIFNR.

        CALL TRANSACTION 'XK03' AND SKIP FIRST SCREEN.
      ENDIF.

    WHEN 'EBELN'.
      READ TABLE GT_LIST INDEX P_ROW.

      IF GT_LIST-EBELN IS NOT INITIAL.
        SET PARAMETER ID 'BES' FIELD GT_LIST-EBELN.

        CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
      ENDIF.

    WHEN 'MATNR'.
      READ TABLE GT_LIST INDEX P_ROW.

      IF GT_LIST-MATNR IS NOT INITIAL.
        SET PARAMETER ID 'MAT' FIELD GT_LIST-MATNR.

        CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
      ENDIF.

  ENDCASE.

ENDFORM.                    " METHOD_HOTSPOT_CLICK





댓글 없음:

댓글 쓰기