엑셀 데이터로 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.
'ABAP > 소스코드' 카테고리의 다른 글
[Class] Internal Table 엑셀 다운로드(XLSX 형식) (0) | 2023.11.15 |
---|---|
[Form] Report 프로그램에 백그라운드 작업 정보 표시 (0) | 2023.09.20 |
[Form] ALV Field catalog(필드 카탈로그) 생성 서브루틴 (0) | 2023.08.28 |
[Report] Customer Exit(SMOD) 및 BAdI 찾는 리포트 (0) | 2023.07.20 |
[Function] Internal Table 엑셀 다운로드(XLSX 형식) (0) | 2023.07.11 |
댓글