본문 바로가기
ABAP/소스코드

[Report] 엑셀 데이터로 Table Insert(Modify) 프로그램

by name_text 2023. 9. 6.

엑셀 데이터로 Table Insert(Modify) 프로그램

ZCM_EXCEL_UPLOAD 활용

2023.07.10 - [ABAP/소스코드] - [Function] ZCM_EXCEL_UPLOAD - 필드 점검 및 변환 엑셀 업로드

 

[Function] ZCM_EXCEL_UPLOAD - 필드 점검 및 변환 엑셀 업로드

ZCM_EXCEL_UPLOAD 필드 점검 및 변환 엑셀 업로드 ALSM_EXCEL_TO_INTERNAL_TABLE # 2023.09.06 수정 : 소스코드를 좀더 간결하게 수정, 금액필드의 통화에따른 Input형식 변환 추가 ABAP에서 엑셀 업로드 프로그램 개

playabap.tistory.com

 

SE16N 에서 다운받은 Excel 데이터를 이용하여 Table에 Modify하는 간단한 프로그램입니다.

* 해당 Table에 MANDT 필드가 있다면 SE16N에서 Excel 다운로드 후 MANDT 항목은 추가해야 합니다

 

# 소스코드

*&---------------------------------------------------------------------*
*& Report Y_TABLE_ENTRY_INSERT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Y_TABLE_ENTRY_INSERT LINE-COUNT 0 LINE-SIZE 80
       NO STANDARD PAGE HEADING.

DATA: GV_ANSWER TYPE RSNEWLENG-FCODE.
FIELD-SYMBOLS <LFT> TYPE STANDARD TABLE.

CLASS LCL_HANDLE_EVENTS DEFINITION.
  PUBLIC SECTION.
    METHODS:
      ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS
        IMPORTING E_SALV_FUNCTION.
ENDCLASS.

CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
  METHOD ON_USER_COMMAND.
    MOVE E_SALV_FUNCTION TO GV_ANSWER.
    LEAVE TO SCREEN 0.
  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT 1(15) TXT_TAB.
  PARAMETERS: P_TAB TYPE TABNAME MEMORY ID DTB OBLIGATORY.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN ULINE.

SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT 1(15) TXT_SEL.
  PARAMETERS P_INS RADIOBUTTON GROUP RB1.
  SELECTION-SCREEN COMMENT (10) TXT_INS FOR FIELD P_INS.
*
  PARAMETERS P_MOD RADIOBUTTON GROUP RB1.
  SELECTION-SCREEN COMMENT (10) TXT_MOD FOR FIELD P_MOD.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  TXT_TAB = 'Table name'.
  TXT_SEL = 'Processing'.
  TXT_INS = 'Insert'.
  TXT_MOD = 'Modify'.

AT SELECTION-SCREEN ON P_TAB.
  IF P_TAB(1) NE 'Z' AND P_TAB(1) NE 'Y'.
    MESSAGE E000(0K) WITH 'CBO 테이블만 가능합니다'.
  ENDIF.

START-OF-SELECTION.
  PERFORM READ_EXCEL_DATA.

*&---------------------------------------------------------------------*
*&      Form  READ_EXCEL_DATA
*&---------------------------------------------------------------------*
FORM READ_EXCEL_DATA .
  DATA: LD_DATA TYPE REF TO DATA.
  CREATE DATA LD_DATA TYPE TABLE OF (P_TAB).
  ASSIGN LD_DATA->* TO <LFT>.

  CALL FUNCTION 'ZCM_EXCEL_UPLOAD'
    EXPORTING
*     I_FILENAME                =
      I_BEGIN_COL               = 1
      I_BEGIN_ROW               = 2
*     I_END_COL                 =
*     I_END_ROW                 =
*     I_FIELD_ELEMENT_MSG       = 'X'
*     I_ENABLE_CONV_EXIT        = 'X'
*     I_CHECK_CONV_EXIT         = ' '
*     I_STOP_FIRST_ERROR        = ' '
    TABLES
      OUTTAB                    = <LFT>
*     INTERN                    =
            .
  IF <LFT>[] IS NOT INITIAL.
    "미리보기
    DATA: LT_USER_BUTTONS TYPE STANDARD TABLE OF SMP_DYNTXT,
          LV_TITLE TYPE SYTITLE.

    LV_TITLE = |Table : { P_TAB } / { CONV STRING( LINES( <LFT> ) ) } Records - { COND #( WHEN P_INS IS NOT INITIAL THEN TXT_INS ELSE TXT_MOD ) }|.
    LT_USER_BUTTONS = VALUE #(  ( TEXT = '실행' ICON_ID = '@0V@'  ICON_TEXT = '실행' QUICKINFO = '실행' )
                                ( TEXT = '취소' ICON_ID = '@0W@'  ICON_TEXT = '취소' QUICKINFO = '취소' ) ).
    CALL FUNCTION 'BKK_POPUP_DISPLAY_LIST'
      EXPORTING
        I_CALLBACK_PROGRAM            = SY-REPID
        I_CALLBACK_WRITE_FORM         = 'DISPLAY_DATA'
        I_TITLE                       = LV_TITLE
        I_START_COLUMN                = 5
        I_START_ROW                   = 5
        I_END_COLUMN                  = 70
        I_END_ROW                     = 15
        I_DISPLAY_OK_BUTTON           = 'N'
        I_DISPLAY_CANCEL_BUTTON       = SPACE
*      IMPORTING
*        ANSWER                        = LV_ANSWER
      TABLES
        USER_BUTTONS                  = LT_USER_BUTTONS
              .
  IF GV_ANSWER EQ 'BUTTON1'.
    CASE ABAP_TRUE.
      WHEN P_INS.
        INSERT (P_TAB) CLIENT SPECIFIED FROM TABLE <LFT> ACCEPTING DUPLICATE KEYS.
      WHEN P_MOD.
        MODIFY (P_TAB) CLIENT SPECIFIED FROM TABLE <LFT>.
    ENDCASE.

    IF SY-SUBRC EQ 0.
      COMMIT WORK.
      MESSAGE I000(0K) WITH 'RESULT' CONV STRING( SY-DBCNT ) DISPLAY LIKE 'S'.
    ELSE.
      MESSAGE I000(0K) WITH 'ERROR' DISPLAY LIKE 'E'.
    ENDIF.
  ENDIF.
  ENDIF.
ENDFORM.

FORM DISPLAY_DATA.
CALL METHOD CL_SALV_TABLE=>FACTORY
   IMPORTING
     R_SALV_TABLE = DATA(LR_SALV)
   CHANGING
     T_TABLE      = <LFT>.      "ALV로 출력할 Internal Table

  LR_SALV->SET_SCREEN_STATUS(
    PFSTATUS      =  'USER_BUTTONS'
    REPORT        =  'SAPLFBK_TOOLS' ).

  LR_SALV->GET_DISPLAY_SETTINGS( )->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).  "줄무늬 패턴
  LR_SALV->GET_COLUMNS( )->SET_OPTIMIZE( ABAP_TRUE ).   "열 너비 최적화

  "ALV 이벤트
  DATA(LR_EVENT_TAB) = LR_SALV->GET_EVENT( ).
  DATA LR_EVENTS TYPE REF TO LCL_HANDLE_EVENTS.
  CREATE OBJECT LR_EVENTS.
  SET HANDLER LR_EVENTS->ON_USER_COMMAND FOR LR_EVENT_TAB.
  LR_SALV->DISPLAY( ).            "ALV 출력
ENDFORM.

 

댓글