IT WORK/SAP FI and ABAP

[FI/ABAP] S/4 HANA 선급비용 마스터 일괄 변경 CL_ACE_MDO_SUBOBJ_FACTORY

Bathildis 2025. 5. 22. 15:55
반응형

S/4 HANA에서는 ACAC_OBJECT_MODIFY_EXT를 이용할 수 없다.

ECC까지는 사용이 가능하니 ECC는 다른 소스를 참고하시길....

 

3061898 - BAPI ACAC_OBJECT_MODIFY_EXT를 S/4 HANA에서 사용할 수 없음 - SAP for Me

 

https://me.sap.com/notes/0003061898

 

me.sap.com

 

 

CL_ACE_MDO_SUBOBJ_FACTORY를 이용해서 Assignment를 수정하는 소스는 아래 참고.....

엑셀파일을 업로드 해서 선급비용 마스터의 내부오더, 코스트센터를 일괄 변경하는 소스입니다.

 

REPORT ZFIR9999 MESSAGE-ID ZFIM01.

INCLUDE ZFIR9999_TOP.
INCLUDE ZFIR9999_CLS.
INCLUDE ZFIR9999_F01.
INCLUDE ZFIR9999_PBO.
INCLUDE ZFIR9999_PAI.

*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
  PERFORM INITIALIZATION.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      PERFORM DOWNLOAD_EXCEL_TEMPLATE.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILENM.
  PERFORM GET_FILE_PATH USING 'O' P_FILENM.

AT SELECTION-SCREEN OUTPUT.

*----------------------------------------------------------------------*

* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM GET_DATA.

*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
  IF GT_MAIN[] IS NOT INITIAL.
    DATA(LV_LINES) = LINES( GT_MAIN ).
    MESSAGE S004 WITH LV_LINES.

    CALL SCREEN 100.
  ELSE.
    MESSAGE S006 DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

 

 

*&---------------------------------------------------------------------*
*& Include          ZFIR9999_TOP
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Tables
*----------------------------------------------------------------------*
TABLES : ACAC_OBJECTS, AUFK, CSKT,
         SSCRFIELDS.  "선택화면의 필드


*----------------------------------------------------------------------*
* Internal Table
*----------------------------------------------------------------------*

DATA : BEGIN OF GT_MAIN OCCURS 0,
         ICON(4),                 " 상태
         BUKRS          LIKE ANLA-BUKRS, " 회사코드
         ACAC_OBJTYPE   LIKE ACAC_OBJECTS-ACAC_OBJTYPE, " 발생오브젝트 범주
         ACAC_OBJNUMBER LIKE ACAC_OBJECTS-ACAC_OBJNUMBER, " 발생오브젝트 번호
         REF_KEY        LIKE ACAC_OBJECTS-REF_KEY,
         REF_SUBKEY     LIKE ACAC_OBJECTS-REF_SUBKEY,
         TEXT           LIKE ACAC_OBJECTS-TEXT, " 발생오브젝트명
         AUFNR_B        LIKE AUFK-AUFNR, " 내부오더 BEFORE
         ATEXT_B        LIKE AUFK-KTEXT, " 내부오더명 BEFORE
         AUFNR_A        LIKE AUFK-AUFNR, " 내부오더 AFTER
         ATEXT_A        LIKE AUFK-KTEXT, " 내부오더명 AFTER
         KOSTL_B        LIKE ANLZ-KOSTL, " 코스트센터 BEFORE
         KTEXT_B        LIKE CSKT-KTEXT, " 코스트센터명 BEFORE
         KOSTL_A        LIKE ANLZ-KOSTL, " 코스트센터 AFTER
         KTEXT_A        LIKE CSKT-KTEXT, " 코스트센터명 AFTER
         MSG(100).
         INCLUDE STRUCTURE ACESOBJ_ASSGMT_ATTRIBUTES.
DATA:
       END OF GT_MAIN.

DATA: BEGIN OF GT_UPLOAD OCCURS 0,
        ACAC_OBJTYPE(10),   " 발생 오브젝트 범주
        ACAC_OBJNUMBER(22), " 발생 오브젝트 번호
        AUFNR(12),          " 내부오더 번호
        KOSTL(10),          " 코스트센터
      END OF GT_UPLOAD.

*&---------------------------------------------------------------------*
*& TYPE-POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS : SILS.

DATA GV_ANSWER.
*&---------------------------------------------------------------------*
*& Class definition
*&---------------------------------------------------------------------*
*[ALV LVC]
CLASS LCL_EVENT_HANDLER DEFINITION DEFERRED.

*---------------------------------------------------------------------*
* Class definition
*---------------------------------------------------------------------*
DATA: GO_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.

*----------------------------------------------------------------------*
* ALV Global Data
*----------------------------------------------------------------------*
*& CONTAINERS

DATA: GO_CONTAINER TYPE REF TO CL_GUI_CONTAINER,
      GO_CUSTOM    TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      GO_DOCKING   TYPE REF TO CL_GUI_DOCKING_CONTAINER,
      GO_SPLITTER  TYPE REF TO CL_GUI_SPLITTER_CONTAINER,

*& HTML DOCUMENT
      GO_DOCUMENT  TYPE REF TO CL_DD_DOCUMENT,

*& ALV GRID
      GO_GRID      TYPE REF TO CL_GUI_ALV_GRID.

*& ALV VARIABLES
DATA: GV_CON_NAME1 TYPE SCRFNAME VALUE 'CON1',
      GT_EXCLUDE   TYPE UI_FUNCTIONS,
      GS_VARIANT   TYPE DISVARIANT,
      GS_LAYOUT    TYPE LVC_S_LAYO,
      GT_FCAT      TYPE LVC_T_FCAT,
      GS_FCAT      TYPE LVC_S_FCAT,
      GT_FIELDCAT  TYPE LVC_T_FCAT,
      GS_FIELDCAT  TYPE LVC_S_FCAT,
      GT_SORT      TYPE LVC_T_SORT,
      GS_SORT      TYPE LVC_S_SORT,
      GT_SCOL      TYPE LVC_T_SCOL,
      GT_STYL      TYPE LVC_T_STYL,
      GT_ROWS      TYPE LVC_T_ROW,
      GS_ROWS      TYPE LVC_S_ROW,
      GT_COLUMNS   TYPE LVC_T_COL,
      GS_COLUMNS   TYPE LVC_S_COL,
      GT_F4        TYPE LVC_T_F4,
      GS_F4        TYPE LVC_S_F4,
      GT_DROPDOWN  TYPE LVC_T_DROP,
      GS_DROPDOWN  TYPE LVC_S_DROP,
      GS_SCROLL    TYPE LVC_S_STBL,

      GT_ERR       TYPE LVC_T_ERR,
      GS_ERR       TYPE LVC_S_ERR.

DATA : GS_FUNCTIONS TYPE UI_FUNCTIONS.


DATA : GT_INDEX TYPE LVC_T_ROW,
       GT_ROW   TYPE LVC_T_ROID.

*&---------------------------------------------------------------------*
*& CONSTANTS
*&---------------------------------------------------------------------*
CONSTANTS : C_LEFT   TYPE I VALUE 1,
            C_TOP    TYPE I VALUE 2,
            C_BOTTOM TYPE I VALUE 4,
            C_RIGHT  TYPE I VALUE 8.

CONSTANTS :C_FILTER TYPE STRING
                         VALUE 'Excel files (*.XLS;*.XLSX)|*.XLS;*.XLSX|'.
CONSTANTS :C_PATH TYPE RLGRAP-FILENAME
                         VALUE 'C:\'. "upload_data.xls'.
CONSTANTS : GC_WAERS TYPE WAERS VALUE 'KRW'.
DATA SADASD.

*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
DATA : OK_CODE TYPE SY-UCOMM.

DATA : GV_DATE  TYPE DATUM,
       GV_BUTXT LIKE T001-BUTXT,
       GV_WAERS LIKE T001-WAERS.

DATA : GS_FUNCTEXT TYPE SMP_DYNTXT.

DATA : XLS_DATA TYPE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE.

DATA : ITAB_STR LIKE RSTRUCINFO OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF IFIELD OCCURS 200,
        COL(4)    TYPE N,
        FIELD(30).
DATA: END OF IFIELD.


DATA: GV_S_COL TYPE I,
      GV_S_ROW TYPE I,
      GV_E_COL TYPE I,
      GV_E_ROW TYPE I.

FIELD-SYMBOLS  <FS>.
FIELD-SYMBOLS: <FS0>.

DATA: GV_F0(90).

*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
  PARAMETERS: P_BUKRS  LIKE BKPF-BUKRS OBLIGATORY DEFAULT '1000'.
  PARAMETERS: P_FILENM LIKE RLGRAP-FILENAME OBLIGATORY DEFAULT C_PATH.
  PARAMETERS: P_DFROM  LIKE ACESOBJ_ASSGMT-DATE_FROM OBLIGATORY DEFAULT SY-DATUM.
  SELECTION-SCREEN SKIP 1.
  SELECTION-SCREEN COMMENT /1(79) TEXT-001.
  SELECTION-SCREEN COMMENT /1(79) TEXT-002.
  SELECTION-SCREEN COMMENT /1(79) TEXT-003.
  SELECTION-SCREEN COMMENT /1(79) TEXT-004.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN FUNCTION KEY 1 . "엑셀업로드 버튼생성

 

*&---------------------------------------------------------------------*
*& Include          ZFIR2999_CLS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Class(Definition) LCL_EVENT_HANDLER
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.

  PUBLIC SECTION.
    DATA: GV_OBJ_TEXT TYPE CHAR30.

**-- CONSTRUCTOR
    METHODS: CONSTRUCTOR IMPORTING E_OBJ_TEXT TYPE C.

*-- HANDLE_TOP_OF_PAGE
    METHODS HANDLE_TOP_OF_PAGE FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID
      IMPORTING E_DYNDOC_ID SENDER.

*-- HANDLE_TOOLBAR
    METHODS: HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
      IMPORTING E_OBJECT E_INTERACTIVE.

*-- HANDLE_DOUBLE_CLICK
    METHODS: HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW E_COLUMN.

*-- HANDLE_HOTSPOT_CLICK
    METHODS: HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW_ID E_COLUMN_ID.

*-- HANDLE_USER_COMMAND
    METHODS: HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
      IMPORTING SENDER
                E_UCOMM.

*-- HANDLE_DATA_CHANGED
    METHODS: HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
      IMPORTING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM.

**-- HANDLE_ON_F4
    METHODS: HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
      IMPORTING E_FIELDNAME
                E_FIELDVALUE
                ES_ROW_NO
                ER_EVENT_DATA
                ET_BAD_CELLS
                E_DISPLAY.

ENDCLASS. "LCL_EVENT_HANDLER


*&---------------------------------------------------------------------*
*& Class(Implementation)  LCL_EVENT_HANDLER
*&---------------------------------------------------------------------*

CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*-- CONSTRUCTOR
  METHOD CONSTRUCTOR.
    CALL METHOD SUPER->CONSTRUCTOR.
    GV_OBJ_TEXT = E_OBJ_TEXT.
  ENDMETHOD.

  METHOD HANDLE_TOP_OF_PAGE.
*    PERFORM HANDLE_TOP_OF_PAGE   USING E_DYNDOC_ID
*                                       SENDER.
  ENDMETHOD.

*-- HANDLE_TOOLBAR
  METHOD HANDLE_TOOLBAR.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.
*        PERFORM TOOLBAR  USING E_OBJECT E_INTERACTIVE.
    ENDCASE.
  ENDMETHOD.

*-- HANDLE_DOUBLE_CLICK
  METHOD HANDLE_DOUBLE_CLICK.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.

        PERFORM DOUBLE_CLICK USING E_ROW E_COLUMN.

    ENDCASE.
  ENDMETHOD.

*-- HANDLE_HOTSPOT_CLICK
  METHOD HANDLE_HOTSPOT_CLICK.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.
*        PERFORM HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID.
    ENDCASE.
  ENDMETHOD.

*-- HANDLE_USER_COMMAND
  METHOD HANDLE_USER_COMMAND.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.
*        PERFORM USER_COMMAND USING SENDER E_UCOMM.

    ENDCASE.
  ENDMETHOD.

*-- HANDLE_DATA_CHANGED
  METHOD HANDLE_DATA_CHANGED.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.
*        PERFORM DATA_CHANGED USING ER_DATA_CHANGED
*                                   E_ONF4
*                                   E_ONF4_BEFORE
*                                   E_ONF4_AFTER
*                                   E_UCOMM.
    ENDCASE.
  ENDMETHOD.


**-- HANDLE_ON_F4
  METHOD HANDLE_ONF4.
    CASE GV_OBJ_TEXT.
      WHEN 'GRID'.

*        PERFORM ONF4 USING E_FIELDNAME
*                           E_FIELDVALUE
*                           ES_ROW_NO
*                           ER_EVENT_DATA
*                           ET_BAD_CELLS
*                           E_DISPLAY.

    ENDCASE.
  ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Form TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_E_OBJECT  text
*      -->P_E_INTERACTIVE  text
*&---------------------------------------------------------------------*
FORM TOOLBAR USING PO_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
                        PV_INTERACTIVE.

*  PERFORM CREATE_TOOLBAR USING PO_OBJECT PV_INTERACTIVE.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_DOCKING_CONTAINTER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CREATE_DOCKING_CONTAINER USING
                          P_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER
                          P_SIDE.

  CREATE OBJECT P_DOCKING
    EXPORTING
      REPID                       = SY-REPID
      DYNNR                       = SY-DYNNR
      SIDE                        = P_SIDE
      EXTENSION                   = 3000
    EXCEPTIONS
      CNTL_ERROR                  = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      LIFETIME_ERROR              = 4
      LIFETIME_DYNPRO_DYNPRO_LINK = 5
      OTHERS                      = 6.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_GRID
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GO_DOCKING  text
*      -->P_GO_GRID  text
*&---------------------------------------------------------------------*
FORM CREATE_GRID USING P_CON
                        P_GRID  TYPE REF TO CL_GUI_ALV_GRID.

  CREATE OBJECT P_GRID
    EXPORTING
      I_PARENT          = P_CON
    EXCEPTIONS
      ERROR_CNTL_CREATE = 1
      ERROR_CNTL_INIT   = 2
      ERROR_CNTL_LINK   = 3
      ERROR_DP_CREATE   = 4
      OTHERS            = 5.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FCAT_MERGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GT_FIELDCAT  text
*      -->P_GT_DATA00  text
*&---------------------------------------------------------------------*
FORM GET_FCAT_MERGE TABLES PT_FCAT TYPE LVC_T_FCAT
                             PT_TABLE  TYPE TABLE.

  DATA: LO_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR,
        LO_DATA     TYPE REF TO DATA,
        LT_DFIES    TYPE DDFIELDS,
        LS_DFIES    TYPE DFIES,
        LS_FCAT     TYPE LVC_S_FCAT.

  CLEAR: LS_DFIES,         LT_DFIES,
         LS_FCAT,
         PT_FCAT[].

* ITAB 의 HEADER  LINE 구조 생성
  CREATE DATA LO_DATA LIKE LINE OF PT_TABLE.

* 생성된 구조의 정보 추출
  LO_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA_REF( LO_DATA ).

  LT_DFIES = CL_SALV_DATA_DESCR=>READ_STRUCTDESCR( LO_TABDESCR ).

* 필드카탈로그 정보 반환
  MOVE-CORRESPONDING LT_DFIES[] TO PT_FCAT[].

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SORT_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GT_SORT  text
*      -->P_ENDCASE  text
*&---------------------------------------------------------------------*
FORM SORT_FIELD TABLES P_SORT TYPE LVC_T_SORT
                   USING  P_COL_POS
                          P_FIELDNAME
                          P_UP
                          P_DOWN
                          P_SUBTOT.

  DATA: LS_SORT   TYPE LVC_S_SORT.

*  P_COL_POS         = P_COL_POS + 1.

  LS_SORT-SPOS      = P_COL_POS.
  LS_SORT-FIELDNAME = P_FIELDNAME.
  LS_SORT-UP        = P_UP.
  LS_SORT-DOWN      = P_DOWN.
  LS_SORT-SUBTOT    = P_SUBTOT.

  APPEND LS_SORT TO P_SORT.
  CLEAR  LS_SORT.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GO_GRID  text
*      -->P_       text
*&---------------------------------------------------------------------*
FORM SET_EVENT USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
                     P_GUBUN.

  IF P_GUBUN <> '2'.
    CALL METHOD P_GRID->REGISTER_EDIT_EVENT
      EXPORTING
        I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
  ELSE.
    CALL METHOD P_GRID->REGISTER_EDIT_EVENT
      EXPORTING
        I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
  ENDIF.

  CREATE OBJECT GO_EVENT_HANDLER
    EXPORTING
      E_OBJ_TEXT = 'GRID'.

  SET HANDLER: GO_EVENT_HANDLER->HANDLE_TOOLBAR               FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_USER_COMMAND          FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_HOTSPOT_CLICK         FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_DATA_CHANGED          FOR P_GRID,
*               GO_EVENT_HANDLER->HANDLE_DATA_CHANGED_FINISHED FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_ONF4                  FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_DOUBLE_CLICK          FOR P_GRID,
               GO_EVENT_HANDLER->HANDLE_TOP_OF_PAGE           FOR P_GRID.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LIST_PROC_EVENTS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GO_GRID  text
*      -->P_GO_DOCUMENT  text
*&---------------------------------------------------------------------*
FORM SET_LIST_PROC_EVENTS USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
                           P_DYNDOC TYPE REF TO CL_DD_DOCUMENT.

  CALL METHOD P_GRID->LIST_PROCESSING_EVENTS
    EXPORTING
      I_EVENT_NAME = 'TOP_OF_PAGE'
      I_DYNDOC_ID  = P_DYNDOC.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_EXCLD_BTN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_<TABLE>  text
*      -->P_CL_GUI_ALV_GRID=>MC_FC_LOC_UND  text
*&---------------------------------------------------------------------*
FORM ADD_EXCLD_BTN TABLES P_TABLE
                     USING  P_VALUE.

  DATA: LV_EXCLUDE TYPE UI_FUNC.

  LV_EXCLUDE = P_VALUE.
  APPEND LV_EXCLUDE TO P_TABLE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_TABLE_FOR_FIRST_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GV_GRID_1  text
*      -->P_GT_LIST  text
*      -->P_GS_LAYOCAT1  text
*      -->P_ALV_VARIANT1  text
*      -->P_GT_EXCLUDE1[]  text
*      -->P_GT_FIELDCAT1[]  text
*      -->P_GT_SORT1[]  text
*&---------------------------------------------------------------------*
FORM SET_TABLE_FOR_FIRST_DISPLAY USING
                       P_GRID     TYPE  REF TO CL_GUI_ALV_GRID
                       P_DATA     TYPE  TABLE
                       P_LAYOUT   TYPE  LVC_S_LAYO
                       P_VARIANT  TYPE  DISVARIANT
                       P_EXCLUDE  TYPE  UI_FUNCTIONS
                       P_FIELDCAT TYPE  LVC_T_FCAT
                       P_SORT     TYPE  LVC_T_SORT.

* PRINT 셋팅
  DATA: LS_PRINT TYPE LVC_S_PRNT.


  IF P_VARIANT IS INITIAL.
    CLEAR: P_VARIANT.
    P_VARIANT-REPORT = SY-REPID.
  ENDIF.

  LS_PRINT-PRINT_CTRL-PRI_PARAMS-LINSZ = 9999999.

  CALL METHOD P_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      I_DEFAULT                     = 'X'
      I_SAVE                        = 'A'
      IS_LAYOUT                     = P_LAYOUT
      IS_VARIANT                    = P_VARIANT
      IT_TOOLBAR_EXCLUDING          = P_EXCLUDE
      IS_PRINT                      = LS_PRINT
    CHANGING
      IT_OUTTAB                     = P_DATA
      IT_FIELDCATALOG               = P_FIELDCAT
      IT_SORT                       = P_SORT
    EXCEPTIONS
      INVALID_PARAMETER_COMBINATION = 1
      PROGRAM_ERROR                 = 2
      TOO_MANY_LINES                = 3
      OTHERS                        = 4.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_GO_GRID  text
*      -->P_GT_FIELDCAT[]  text
*      -->P_GS_LAYOUT  text
*      -->P_P_REFCAT  text
*&---------------------------------------------------------------------*
FORM REFRESH_ALV USING P_GRID TYPE REF TO CL_GUI_ALV_GRID
                       P_FIELDCAT TYPE LVC_T_FCAT
                       P_LAYOCAT  TYPE LVC_S_LAYO
                       P_FCATCHG.

* 필드카탈로그
  IF P_FCATCHG = ABAP_TRUE.
    CALL METHOD P_GRID->SET_FRONTEND_FIELDCATALOG
      EXPORTING
        IT_FIELDCATALOG = P_FIELDCAT[].
  ENDIF.

* 레이아웃
  CALL METHOD P_GRID->SET_FRONTEND_LAYOUT
    EXPORTING
      IS_LAYOUT = P_LAYOCAT.

  GS_SCROLL-ROW = 'X'.
  GS_SCROLL-COL = 'X'.

  CALL METHOD P_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      I_SOFT_REFRESH = ' '
      IS_STABLE      = GS_SCROLL.

  CALL METHOD CL_GUI_CFW=>FLUSH.

ENDFORM.

 

*&---------------------------------------------------------------------*
*& Include          ZFIR9999_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form INITIALIZATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM INITIALIZATION .

  GS_FUNCTEXT-ICON_ID   = ICON_EXPORT. " 아이콘
  GS_FUNCTEXT-ICON_TEXT = 'Excel Template'.
  GS_FUNCTEXT-QUICKINFO = 'Excel Template'.
  SSCRFIELDS-FUNCTXT_01 = GS_FUNCTEXT.

ENDFORM.

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

  DATA: BEGIN OF LT_CSKT OCCURS 0,
          KOSTL LIKE CSKT-KOSTL,
          KTEXT LIKE CSKT-KTEXT,
        END OF LT_CSKT.

  DATA: LT_ASSGMT LIKE TABLE OF ACESOBJ_ASSGMT WITH HEADER LINE.

* EXCEL 업로드
  PERFORM XLS_DATA_GET TABLES XLS_DATA
                        USING P_FILENM
                              GV_S_COL
                              GV_S_ROW
                              GV_E_COL
                              GV_E_ROW.

* EXCEL이 길이와 TYPE 계산
  CALL FUNCTION 'GET_COMPONENT_LIST'
    EXPORTING
      PROGRAM    = SY-CPROG
      FIELDNAME  = 'GT_UPLOAD'
    TABLES
      COMPONENTS = ITAB_STR.

* GT_UPLOAD 테이블에 저장
  LOOP AT XLS_DATA.
    ASSIGN COMPONENT XLS_DATA-COL OF STRUCTURE GT_UPLOAD TO <FS>.

    <FS> = XLS_DATA-VALUE.

    IF XLS_DATA-ROW = 1.
      READ TABLE ITAB_STR WITH KEY COMPNAME = XLS_DATA-VALUE.
      IF SY-SUBRC = 0.
        IFIELD-COL   = XLS_DATA-COL.
        IFIELD-FIELD = XLS_DATA-VALUE.

        APPEND IFIELD.
      ENDIF.
    ELSE.
      READ TABLE IFIELD WITH KEY COL = XLS_DATA-COL.
      IF SY-SUBRC = 0.
        CONCATENATE 'GT_UPLOAD-' IFIELD-FIELD INTO GV_F0.

        ASSIGN (GV_F0) TO <FS0>.

        <FS0> = XLS_DATA-VALUE.
      ENDIF.
    ENDIF.

    AT END OF ROW.

      APPEND GT_UPLOAD.
      CLEAR  GT_UPLOAD.
    ENDAT.
  ENDLOOP.

* 코스트센터 마스터
  SELECT SINGLE KOKRS INTO @DATA(LV_KOKRS)
    FROM TKA02
   WHERE BUKRS EQ @P_BUKRS.

  CLEAR: LT_CSKT, LT_CSKT[].
  SELECT KOSTL, KTEXT
    INTO TABLE @LT_CSKT
    FROM CSKT
   WHERE SPRAS EQ @SY-LANGU
     AND KOKRS EQ @LV_KOKRS.

  SELECT AUFNR, KTEXT
    INTO TABLE @DATA(LT_AUFK)
    FROM AUFK.
  SORT LT_AUFK BY AUFNR.

  CLEAR: LT_ASSGMT, LT_ASSGMT[].
  SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_ASSGMT
    FROM ACESOBJ_ASSGMT
   WHERE COMP    EQ 'ACAC'
     AND BUKRS   EQ P_BUKRS
     AND DATE_TO EQ '99991231'.
  SORT LT_ASSGMT BY COMP LOGSYS BUKRS REF_KEY REF_SUBKEY DATE_TO.

* GT_MAIN에 가공
  LOOP AT GT_UPLOAD.

    MOVE-CORRESPONDING GT_UPLOAD TO GT_MAIN.
    GT_MAIN-BUKRS   = P_BUKRS.
    GT_MAIN-AUFNR_A = GT_UPLOAD-AUFNR.
    GT_MAIN-KOSTL_A = GT_UPLOAD-KOSTL.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = GT_MAIN-AUFNR_A
      IMPORTING
        OUTPUT = GT_MAIN-AUFNR_A.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = GT_MAIN-KOSTL_A
      IMPORTING
        OUTPUT = GT_MAIN-KOSTL_A.

    IF GT_MAIN-ACAC_OBJTYPE IS INITIAL OR
       GT_MAIN-ACAC_OBJNUMBER IS INITIAL OR
       ( GT_MAIN-AUFNR_A IS INITIAL AND
         GT_MAIN-KOSTL_A IS INITIAL ).

      GT_MAIN-ICON = '@0A@'.
      GT_MAIN-MSG  = '발생오브젝트 범주/번호와 변경할 내부오더 혹은 코스트센터는 필수입니다.'.

    ELSE.

      SELECT SINGLE REF_KEY,
                    REF_SUBKEY,
                    TEXT
        INTO ( @GT_MAIN-REF_KEY, @GT_MAIN-REF_SUBKEY, @GT_MAIN-TEXT )
        FROM ACAC_OBJECTS
       WHERE BUKRS          EQ @P_BUKRS
         AND ACAC_OBJTYPE   EQ @GT_MAIN-ACAC_OBJTYPE
         AND ACAC_OBJNUMBER EQ @GT_MAIN-ACAC_OBJNUMBER.

      IF SY-SUBRC EQ 0.
        " 기존 assignment 백업
        CLEAR LT_ASSGMT.
        READ TABLE LT_ASSGMT WITH KEY BUKRS      = P_BUKRS
                                      REF_KEY    = GT_MAIN-REF_KEY
                                      REF_SUBKEY = GT_MAIN-REF_SUBKEY.
        IF SY-SUBRC EQ 0.
          MOVE-CORRESPONDING LT_ASSGMT TO GT_MAIN.
          GT_MAIN-AUFNR_B = GT_MAIN-AUFNR.
          GT_MAIN-KOSTL_B = GT_MAIN-KOSTL.
        ENDIF.
      ELSE.
        GT_MAIN-ICON = '@0A@'.
        GT_MAIN-MSG  = '정상적인 발생오브젝트 범주/번호가 아닙니다.'.
      ENDIF.

      IF GT_MAIN-AUFNR_B IS NOT INITIAL.
        READ TABLE LT_AUFK ASSIGNING FIELD-SYMBOL(<FS>) WITH KEY AUFNR = GT_MAIN-AUFNR_B BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_MAIN-ATEXT_B = <FS>-KTEXT.
        ENDIF.
      ENDIF.

      IF GT_MAIN-AUFNR_A IS NOT INITIAL.
        READ TABLE LT_AUFK ASSIGNING <FS> WITH KEY AUFNR = GT_MAIN-AUFNR_A BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_MAIN-ATEXT_A = <FS>-KTEXT.
        ELSE.
          GT_MAIN-ICON = '@0A@'.
          GT_MAIN-MSG  = '정상적인 내부오더가 아닙니다.'.
        ENDIF.
      ENDIF.

      CLEAR LT_CSKT.
      IF GT_MAIN-KOSTL_B IS NOT INITIAL.
        READ TABLE LT_CSKT WITH KEY KOSTL = GT_MAIN-KOSTL_B.
        IF SY-SUBRC EQ 0.
          GT_MAIN-KTEXT_B = LT_CSKT-KTEXT.
        ENDIF.
      ENDIF.

      CLEAR LT_CSKT.
      IF GT_MAIN-KOSTL_A IS NOT INITIAL.
        READ TABLE LT_CSKT WITH KEY KOSTL = GT_MAIN-KOSTL_A.
        IF SY-SUBRC EQ 0.
          GT_MAIN-KTEXT_A = LT_CSKT-KTEXT.
        ELSE.
          GT_MAIN-ICON = '@0A@'.
          GT_MAIN-MSG  = '정상적인 코스트센터가 아닙니다.'.
        ENDIF.
      ENDIF.

    ENDIF.

    IF GT_MAIN-ICON IS INITIAL.
      GT_MAIN-ICON = '@09@'.
    ENDIF.

    APPEND GT_MAIN. CLEAR GT_MAIN.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_FIELD_CATALOG .

  DATA : L_FIELD1(30),
         L_FIELD2(30),
         L_FIELD3(30),
         L_COLOR(10),
         L_INDEX(2) TYPE N.

  FIELD-SYMBOLS <FS> TYPE ANY.

  CASE SY-DYNNR.
    WHEN '0100'.
      CLEAR: GT_FIELDCAT,    GT_FIELDCAT[].

*     필드카탈로그 정보 조회
*      PERFORM GET_FCAT_MERGE:  TABLES GT_FIELDCAT
*                                      GT_DATA00.

      PERFORM MODIFY_FIELDCAT USING GT_FIELDCAT.

      PERFORM GRID_FIELDCAT TABLES GT_FIELDCAT
                             USING :
      'X' 'ICON '    ' '     ' '        TEXT-F08  ''   ''   ''  ''  '',
      'X' 'BUKRS '   'ACAC_OBJECTS'  'BUKRS'    TEXT-F01  ''   ''   ''  ''  '',
      'X' 'ACAC_OBJTYPE '   'ACAC_OBJECTS'  'ACAC_OBJTYPE'    TEXT-F02  ''   ''   ''  ''  '',
      'X' 'ACAC_OBJNUMBER '   'ACAC_OBJECTS'  'ACAC_OBJNUMBER'    TEXT-F03  ''   ''   ''  ''  '',
      ' ' 'TEXT'     'ACAC_OBJECTS' 'TEXT' TEXT-F10  ''   ''   ''  ''  '',
      ' ' 'AUFNR_B ' 'AUFK'  'AUFNR'    TEXT-F11  ''   ''   ''  ''  '',
      ' ' 'ATEXT_B ' 'AUFK'  'KTEXT'    TEXT-F12  ''   ''   ''  ''  '',
      ' ' 'AUFNR_A ' 'AUFK'  'AUFNR'    TEXT-F13  ''   ''   ''  ''  '',
      ' ' 'ATEXT_A ' 'AUFK'  'KTEXT'    TEXT-F14  ''   ''   ''  ''  '',
      ' ' 'KOSTL_B ' 'ANLZ'  'KOSTL'    TEXT-F04  ''   ''   ''  ''  '',
      ' ' 'KTEXT_B ' 'CSKT'  'KTEXT'    TEXT-F05  ''   ''   ''  ''  '',
      ' ' 'KOSTL_A ' 'ANLZ'  'KOSTL'    TEXT-F06  ''   ''   ''  ''  '',
      ' ' 'KTEXT_A ' 'CSKT'  'KTEXT'    TEXT-F07  ''   ''   ''  ''  '',
      ' ' 'MSG '     ' '     ' '        TEXT-F09  ''   ''   ''  ''  ''.

  ENDCASE.




ENDFORM.
*&---------------------------------------------------------------------*
*& Form MODIFY_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GT_FIELDCAT
*&---------------------------------------------------------------------*
FORM MODIFY_FIELDCAT USING PT_FCAT TYPE LVC_T_FCAT.
  DATA: LV_TXT(132)       TYPE C.
  DATA: LS_FCAT           TYPE LVC_S_FCAT.


  LOOP AT PT_FCAT INTO LS_FCAT.
    CLEAR: LV_TXT.

    CASE LS_FCAT-FIELDNAME.
      WHEN 'ICON'.
        LS_FCAT-COL_POS = 10.
        LV_TXT          = TEXT-F08.
        LS_FCAT-KEY     = 'X'.

      WHEN 'BUKRS'.
        LS_FCAT-COL_POS = 20.
        LV_TXT          = TEXT-F01.
        LS_FCAT-KEY     = 'X'.

      WHEN 'ACAC_OBJTYPE'.
        LS_FCAT-COL_POS = 30.
        LV_TXT          = TEXT-F02.
        LS_FCAT-KEY     = 'X'.

      WHEN 'ACAC_OBJNUMBER'.
        LS_FCAT-COL_POS = 40.
        LV_TXT          = TEXT-F03.

      WHEN 'TEXT'.
        LS_FCAT-COL_POS = 50.
        LV_TXT          = TEXT-F10.

      WHEN 'AUFNR_B'.
        LS_FCAT-COL_POS = 60.
        LV_TXT          = TEXT-F11.

      WHEN 'ATEXT_B'.
        LS_FCAT-COL_POS = 70.
        LV_TXT          = TEXT-F12.

      WHEN 'AUFNR_A'.
        LS_FCAT-COL_POS = 80.
        LV_TXT          = TEXT-F13.

      WHEN 'ATEXT_A'.
        LS_FCAT-COL_POS = 90.
        LV_TXT          = TEXT-F14.

      WHEN 'KOSTL_B'.
        LS_FCAT-COL_POS = 100.
        LV_TXT          = TEXT-F04.

      WHEN 'KTEXT_B'.
        LS_FCAT-COL_POS = 110.
        LV_TXT          = TEXT-F05.

      WHEN 'KOSTL_A'.
        LS_FCAT-COL_POS = 120.
        LV_TXT          = TEXT-F06.

      WHEN 'KTEXT_A'.
        LS_FCAT-COL_POS = 130.
        LV_TXT          = TEXT-F07.

      WHEN 'MSG'.
        LS_FCAT-COL_POS = 140.
        LV_TXT          = TEXT-F09.


      WHEN OTHERS.
        LS_FCAT-TECH = 'X'.

    ENDCASE.

*   공통셋팅 및 필드속성지정
    PERFORM SET_CAT_COMM USING LS_FCAT.

    IF LV_TXT IS NOT INITIAL.
      LS_FCAT-SCRTEXT_S
      = LS_FCAT-SCRTEXT_M
      = LS_FCAT-SCRTEXT_L
      = LS_FCAT-COLTEXT
      = LV_TXT.
    ENDIF.

    MODIFY PT_FCAT FROM LS_FCAT.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_CAT_COMM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_FCAT
*&---------------------------------------------------------------------*
FORM SET_CAT_COMM USING PS_FCAT TYPE LVC_S_FCAT.

* 타입에 따른 정렬
  IF PS_FCAT-INTTYPE = 'I' OR PS_FCAT-INTTYPE = 'P'.  "숫자
    PS_FCAT-JUST = 'R'.
  ELSEIF PS_FCAT-INTTYPE = 'D'.    "일자
    PS_FCAT-JUST = 'C'.
  ENDIF.

  IF PS_FCAT-DATATYPE = 'CURR'.
*    PS_FCAT-CFIELDNAME = 'GV_WAERS'.
    PS_FCAT-CURRENCY   = GV_WAERS.
    PS_FCAT-NO_ZERO    = 'X'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_SORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_SORT .

  CLEAR: GT_SORT,    GT_SORT[].

  CASE SY-DYNNR.
    WHEN '0100'.
      PERFORM SORT_FIELD TABLES GT_SORT USING :
         1  'BUKRS'     'X'    ''   '',
         2  'ACAC_OBJTYPE'     'X'    ''   '',
         3  'ACAC_OBJNUMBER'     'X'    ''   ''.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_LAYOUT .

  CASE SY-DYNNR.
    WHEN '0100'.
      CLEAR: GS_LAYOUT.

      GS_LAYOUT-SEL_MODE   = 'D'.
*      GS_LAYOUT-NO_ROWINS   = 'X'.
*      GS_LAYOUT-NO_ROWMARK = ABAP_TRUE.
*      GS_LAYOUT-ZEBRA      = ABAP_TRUE.
      GS_LAYOUT-CWIDTH_OPT = ABAP_TRUE.
      GS_LAYOUT-STYLEFNAME = 'CELLTAB'.
*      GS_LAYOUT-CTAB_FNAME = 'COLINFO'.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_VARIANT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_VARIANT .

  CLEAR: GS_VARIANT.

  CASE SY-DYNNR.
    WHEN '0100'.
      GS_VARIANT-HANDLE  = '1'.

  ENDCASE.

  GS_VARIANT-REPORT  = SY-REPID.

  CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
      I_SAVE     = 'A'
    CHANGING
      CS_VARIANT = GS_VARIANT
    EXCEPTIONS
      OTHERS     = 1.

  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_EVENT .

  CASE SY-DYNNR.
    WHEN '0100'.
      PERFORM SET_EVENT USING: GO_GRID  '1'.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SET_TOP_OF_PAGE .

  CASE SY-DYNNR.
    WHEN '0100'.
      PERFORM SET_LIST_PROC_EVENTS  USING GO_GRID
                                          GO_DOCUMENT.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_EXCLUDE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BUILD_EXCLUDE .

  DATA: LV_TAB_NAME LIKE FELD-NAME.

  FIELD-SYMBOLS: <TABLE> TYPE UI_FUNCTIONS.

  CASE SY-DYNNR.
    WHEN '0100'.
      LV_TAB_NAME = 'GT_EXCLUDE'.
      CONCATENATE LV_TAB_NAME '[]' INTO LV_TAB_NAME.
      ASSIGN (LV_TAB_NAME) TO <TABLE>.

      CLEAR: <TABLE>.

*     제거할 버튼 지정
      PERFORM ADD_EXCLD_BTN
               TABLES <TABLE>
               USING: "CL_GUI_ALV_GRID=>MC_FC_EXCL_ALL.
                      CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO,
                      CL_GUI_ALV_GRID=>MC_FC_AUF,
                      CL_GUI_ALV_GRID=>MC_FC_AVERAGE,
                      CL_GUI_ALV_GRID=>MC_FC_GRAPH,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_COPY,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_CUT,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE,
                      CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW,
                      CL_GUI_ALV_GRID=>MC_FC_INFO,
                      CL_GUI_ALV_GRID=>MC_FC_REFRESH.
*                      CL_GUI_ALV_GRID=>MC_MB_VARIANT.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_GIRD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM DISPLAY_ALV_GIRD .

  CASE SY-DYNNR.
    WHEN '0100'.
      PERFORM SET_TABLE_FOR_FIRST_DISPLAY:
                        USING  GO_GRID
                               GT_MAIN[]
                               GS_LAYOUT
                               GS_VARIANT
                               GT_EXCLUDE[]
                               GT_FIELDCAT[]
                               GT_SORT[].
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form REFRESH_TABLE_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM REFRESH_TABLE_DISPLAY USING P_REFCAT.

  CASE SY-DYNNR.
    WHEN '0100'.
      PERFORM REFRESH_ALV: USING GO_GRID
                                 GT_FIELDCAT[]
                                 GS_LAYOUT
                                 P_REFCAT.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> E_ROW
*&      --> E_COLUMN
*&---------------------------------------------------------------------*
FORM DOUBLE_CLICK USING P_ROW
                        P_COLUMN.

  DATA: LS_OBKEY TYPE ACE_TREE_INTERFACE,
        LT_OBKEY TYPE ACE_TREE_INTERFACE_T.

  CASE P_COLUMN.
    WHEN 'ACAC_OBJNUMBER'.
      CLEAR: GT_MAIN, LS_OBKEY, LT_OBKEY.
      READ TABLE GT_MAIN INDEX P_ROW.
      IF SY-SUBRC EQ 0.
        LS_OBKEY-BUKRS      = P_BUKRS.
        LS_OBKEY-REF_KEY    = GT_MAIN-REF_KEY.
        LS_OBKEY-REF_SUBKEY = GT_MAIN-REF_SUBKEY.
        APPEND LS_OBKEY TO LT_OBKEY.

        CALL FUNCTION 'ACE_HANDLE_ACCRUAL_OBJECT_S4'
          EXPORTING
            ID_ACE_COMP     = 'ACAC'
            ID_KEYDATE      = SY-DATUM
            ID_MODE         = '03'
            ID_DISPLAY_TREE = ABAP_FALSE
            IT_OBJECT_KEYS  = LT_OBKEY.
      ENDIF.
  ENDCASE.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form GRID_FIELDCAT
*&---------------------------------------------------------------------*
FORM GRID_FIELDCAT  TABLES   PT_FIELDCAT TYPE LVC_T_FCAT
                    USING    P_KEY
                             P_FIELDNAME
                             P_REF_TABLE
                             P_REF_FIELD
                             P_SCRTEXT
                             P_OUTPUTLEN
                             P_EDIT
                             P_DO_SUM
                             P_EMPHASIZE
                             P_CFIELDNAME.

  DATA: POS TYPE I.

  POS = POS + 1.
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS       = POS.
  GS_FIELDCAT-KEY           = P_KEY.
  GS_FIELDCAT-FIELDNAME     = P_FIELDNAME.
  GS_FIELDCAT-REF_TABLE     = P_REF_TABLE.
  GS_FIELDCAT-REF_FIELD     = P_REF_FIELD.
  GS_FIELDCAT-OUTPUTLEN     = P_OUTPUTLEN.
  GS_FIELDCAT-EDIT          = P_EDIT.
  GS_FIELDCAT-DO_SUM        = P_DO_SUM.
  GS_FIELDCAT-EMPHASIZE     = P_EMPHASIZE.

  IF P_FIELDNAME = 'MENGE'.
    GS_FIELDCAT-QFIELDNAME    = P_CFIELDNAME.
  ELSE.
    GS_FIELDCAT-CFIELDNAME = P_CFIELDNAME.
  ENDIF.

  GS_FIELDCAT-SCRTEXT_L = P_SCRTEXT.
  GS_FIELDCAT-SCRTEXT_M = P_SCRTEXT.
  GS_FIELDCAT-SCRTEXT_S = P_SCRTEXT.
  GS_FIELDCAT-COLDDICTXT   = 'L'.

  APPEND GS_FIELDCAT TO  PT_FIELDCAT.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form download_excel_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_TEMPLATE .


  DATA: LT_MIME LIKE W3MIME OCCURS 0 WITH HEADER LINE.

  DATA: LS_WWWDATA TYPE WWWDATATAB.

  DATA: LV_FILENAME     TYPE STRING,
        LV_PATH         TYPE STRING,
        LV_FULLPATH     TYPE STRING,
        LV_SIZE         TYPE I,
        LV_FILESIZE(10).

  DATA: LV_OBJID TYPE W3OBJID.

*& OBJID
  LV_OBJID = SY-REPID.

* 등록된 엑셀 양식 체크
  SELECT SINGLE
         RELID
         OBJID
         CHECKOUT
         CHECKNEW
         CHNAME
         TDATE
         TTIME
         TEXT
    INTO CORRESPONDING FIELDS OF LS_WWWDATA
    FROM WWWDATA
   WHERE OBJID = LV_OBJID.

  IF SY-SUBRC NE 0.
    MESSAGE S020 DISPLAY LIKE 'E'.  "등록된 엑셀양식이 존재하지 않습니다.
    EXIT.
  ENDIF.

* 엑셀 양식 다운로드
  CALL FUNCTION 'WWWDATA_IMPORT'
    EXPORTING
      KEY               = LS_WWWDATA
    TABLES
      MIME              = LT_MIME
    EXCEPTIONS
      WRONG_OBJECT_TYPE = 1
      IMPORT_ERROR      = 2
      OTHERS            = 3.

  CALL FUNCTION 'WWWPARAMS_READ'
    EXPORTING
      RELID = LS_WWWDATA-RELID
      OBJID = LS_WWWDATA-OBJID
      NAME  = 'filesize'
    IMPORTING
      VALUE = LV_FILESIZE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      DEFAULT_EXTENSION = 'XLS'
    CHANGING
      FILENAME          = LV_FILENAME
      PATH              = LV_PATH
      FULLPATH          = LV_FULLPATH.

  LV_SIZE = LV_FILESIZE.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      FILENAME     = LV_FULLPATH
      FILETYPE     = 'BIN'
      BIN_FILESIZE = LV_SIZE
    TABLES
      DATA_TAB     = LT_MIME.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_path
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&      --> P_FILENM
*&---------------------------------------------------------------------*
FORM GET_FILE_PATH USING VALUE(OPEN_MODE)
                                  FILE_PATH.
  DATA : LT_FILETABLE TYPE FILETABLE,
         LS_FILETABLE TYPE LINE OF FILETABLE.
  DATA : LV_FILTER   TYPE STRING,
         LV_DEFAILT  TYPE STRING,
         LV_NAME     TYPE STRING,
         LV_PATH     TYPE STRING,
         LV_FULLPATH TYPE STRING,
         LV_UACT     TYPE I,
         LV_RC       TYPE I.

  LV_DEFAILT = FILE_PATH.
  LV_FILTER  = C_FILTER. "'Excel files (*.XLS;*.XLSX)|*.XLS;*.XLSX|'.

  IF OPEN_MODE = 'O'.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
      EXPORTING
        DEFAULT_EXTENSION = 'TXT'
        DEFAULT_FILENAME  = LV_DEFAILT
        FILE_FILTER       = LV_FILTER
      CHANGING
        FILE_TABLE        = LT_FILETABLE
        RC                = LV_RC.

    READ TABLE LT_FILETABLE INDEX 1 INTO LS_FILETABLE.
    IF SY-SUBRC = 0.
      FILE_PATH = LS_FILETABLE-FILENAME.
    ELSE.
      MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E20. "'Please check your file!!'.
    ENDIF.
  ELSEIF OPEN_MODE = 'S'.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
      EXPORTING
        DEFAULT_EXTENSION = 'TXT'
        DEFAULT_FILE_NAME = LV_DEFAILT
        FILE_FILTER       = LV_FILTER
      CHANGING
        FILENAME          = LV_NAME
        PATH              = LV_PATH
        FULLPATH          = LV_FULLPATH
        USER_ACTION       = LV_UACT.

    FILE_PATH = LV_FULLPATH.

    IF LV_UACT <> 0.
      MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E21. "'Job canceled.'.
    ENDIF.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form XLS_DATA_GET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> XLS_DATA
*&      --> P_FILENM
*&      --> GV_S_COL
*&      --> GV_S_ROW
*&      --> GV_E_COL
*&      --> GV_E_ROW
*&---------------------------------------------------------------------*
FORM XLS_DATA_GET TABLES PT_XLS_DATA STRUCTURE ALSMEX_TABLINE
                   USING    P_FILENAME      " File Name.
                            VALUE(P_SCOL)   " Start Col.
                            VALUE(P_SROW)   " Start Row.
                            VALUE(P_ECOL)   " End Col.
                            VALUE(P_EROW).  " End Row.

*  EXCEL 길이 지정
  GV_S_COL = 1.
  GV_S_ROW = 2.
  GV_E_COL = 255.
  GV_E_ROW = 60002.

* 엑셀 컬럼 과 필드 ID 읽기
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILENAME
      I_BEGIN_COL             = GV_S_COL
      I_BEGIN_ROW             = GV_S_ROW
      I_END_COL               = GV_E_COL
      I_END_ROW               = GV_E_ROW
    TABLES
      INTERN                  = PT_XLS_DATA
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.

  IF SY-SUBRC <> 0.
    MESSAGE S001 DISPLAY LIKE 'E' WITH TEXT-E20. "'Please check your file!!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASSET_CHANGE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM MASTER_CHANGE .

  DATA: LO_ACAC_MDO_SUBOBJ TYPE REF TO CL_ACAC_MDO_SUBOBJ,
        LO_ACE_MDO_SUBOBJ  TYPE REF TO IF_ACE_MDO_SUBOBJ,
        LS_POSTING_PARAMS  TYPE        ACE_POSTING_PARAMS.

  DATA: LS_OBKEY TYPE ACESOBJ_KEY,
        LS_ASSMT TYPE ACESOBJ_ASSGMT_ATTRIBUTES.

  DATA: LV_TOTAL TYPE I,
        LV_SCNT  TYPE I,
        LV_ECNT  TYPE I.

* 오류건을 제외하고 모두 변경됩니다. 진행하시겠습니까?
  PERFORM POPUP_TO_CONFIRM USING TEXT-M01  TEXT-M02.
  CHECK GV_ANSWER = '1'. " 예

  CLEAR: LV_TOTAL, LV_SCNT, LV_ECNT.
  LOOP AT GT_MAIN WHERE ICON = '@09@'.

    ADD 1 TO LV_TOTAL.

    TRY.

        CLEAR LS_OBKEY.
        LS_OBKEY-COMP       = 'ACAC'.
        LS_OBKEY-BUKRS      = P_BUKRS.
        LS_OBKEY-REF_KEY    = GT_MAIN-REF_KEY.
        LS_OBKEY-REF_SUBKEY = GT_MAIN-REF_SUBKEY.

        LO_ACE_MDO_SUBOBJ = CL_ACE_MDO_SUBOBJ_FACTORY=>GET_MDO_SUBOBJ_INSTANCE( IS_ACESOBJ_KEY                 = LS_OBKEY
                                                                                IV_DETDATE                     = SY-DATUM
                                                                                IB_SAVE_FLAG                   = ABAP_FALSE  "prevent saving if errors occur
                                                                                IV_ACTIVITY                    = CONV #( IF_ACE_MDO_TYPES=>ACT_CHANGE )
                                                                                IB_INITIALIZE_NEW_IF_NOT_EXIST = ABAP_TRUE ).

        CHECK LO_ACE_MDO_SUBOBJ IS BOUND.
        LO_ACAC_MDO_SUBOBJ ?= LO_ACE_MDO_SUBOBJ.

        CLEAR LS_ASSMT.
        MOVE-CORRESPONDING GT_MAIN TO LS_ASSMT.
        LS_ASSMT-KOSTL = GT_MAIN-KOSTL_A.
        LS_ASSMT-AUFNR = GT_MAIN-AUFNR_A.

        LO_ACAC_MDO_SUBOBJ->ASSIGNMENTS_MODIFY(
          EXPORTING
            ID_DATEFROM    = P_DFROM  " From Date of an Entry
            IS_ASSIGNMENTS = LS_ASSMT " Account assignments for accrual subobject
            ID_TESTRUN     = SPACE    " Checkbox
        ).

        CLEAR LS_POSTING_PARAMS.
        LS_POSTING_PARAMS-KEYDATE = P_DFROM.
        LS_POSTING_PARAMS-BLDAT   = P_DFROM.
        LS_POSTING_PARAMS-BUDAT   = P_DFROM.
        LS_POSTING_PARAMS-GJAHR   = P_DFROM(4).
        CONCATENATE '0' P_DFROM+4(2) INTO LS_POSTING_PARAMS-POPER.
        CONDENSE LS_POSTING_PARAMS-POPER NO-GAPS.

        CL_ACE_MDO_SUBOBJ_FACTORY=>CHANGE_SAVE_PARAMETERS( IS_SUBOBJ_KEY     = LS_OBKEY
                                                           IB_SAVE_FLAG      = ABAP_TRUE
                                                           IS_POSTING_PARAMS = LS_POSTING_PARAMS ).

      CATCH CX_ACE INTO DATA(LX_ACE).
        CL_ACE_MESSAGE_HANDLER=>GET_INSTANCE( )->ADD_MESSAGE_INST( LX_ACE ).
    ENDTRY.

    DATA(LT_RESULT) = CL_ACE_MDO_SUBOBJ_FACTORY=>SAVE( ID_SAVEMODE = 'C' ).

    READ TABLE LT_RESULT INTO DATA(LS_RESULT) WITH KEY STATUS = 'E'.
    IF SY-SUBRC EQ 0 AND LS_RESULT IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ADD 1 TO LV_ECNT.
      GT_MAIN-ICON = '@0A@'.
      GT_MAIN-MSG  = '저장 중 오류가 발생하였습니다.'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      ADD 1 TO LV_SCNT.
      GT_MAIN-ICON = '@08@'.
    ENDIF.

    MODIFY GT_MAIN.

  ENDLOOP.

  MESSAGE S000 WITH '마스터 변경 완료. ' &&
                    '총 ' && LV_TOTAL && '건 중 성공: ' && LV_SCNT &&
                    ' / 실패: ' && LV_ECNT.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> TEXT_M01
*&      --> TEXT_M02
*&---------------------------------------------------------------------*
FORM POPUP_TO_CONFIRM USING P_TITLEBAR P_TEXT_QUESTION.
  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR       = P_TITLEBAR
      TEXT_QUESTION  = P_TEXT_QUESTION
      TEXT_BUTTON_1  = TEXT-M03 " '예'
      TEXT_BUTTON_2  = TEXT-M04 " '아니오'
      DEFAULT_BUTTON = '1'
      START_COLUMN   = 25
      START_ROW      = 6
    IMPORTING
      ANSWER         = GV_ANSWER.
ENDFORM. "POPUP_TO_CONFIRM

 

*&---------------------------------------------------------------------*
*& Include          ZFIR9999_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'S100'.
  SET TITLEBAR 'T100' .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_OBJECT_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE CREATE_OBJECT_0100 OUTPUT.

  IF GO_DOCKING IS INITIAL.

    PERFORM CREATE_DOCKING_CONTAINER USING GO_DOCKING C_LEFT.
    PERFORM CREATE_GRID              USING GO_DOCKING GO_GRID.

    PERFORM BUILD_FIELD_CATALOG.
    PERFORM BUILD_SORT.
    PERFORM BUILD_LAYOUT.
    PERFORM BUILD_VARIANT.
    PERFORM BUILD_EVENT.
    PERFORM SET_TOP_OF_PAGE.
    PERFORM BUILD_EXCLUDE.
    PERFORM DISPLAY_ALV_GIRD.

  ELSE.

    PERFORM REFRESH_TABLE_DISPLAY USING ''.

  ENDIF.

ENDMODULE.

 

*&---------------------------------------------------------------------*
*& Include          ZFIR9999_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  CASE OK_CODE.
    WHEN 'CHANGE'.
      PERFORM MASTER_CHANGE.
  ENDCASE.

ENDMODULE.

 

 

엑셀 업로드 양식

발생 오브젝트 범주 발생 오브젝트 번호 변경할 내부오더 번호 변경할 코스트센터
AC_ADV_SPT 2025100000189 500212 1010555
반응형