diff --git a/src/zcl_copa_topdown.clas.xml b/src/zcl_copa_topdown.clas.xml
new file mode 100644
index 0000000..745da12
--- /dev/null
+++ b/src/zcl_copa_topdown.clas.xml
@@ -0,0 +1,389 @@
+
+
+
+
+
+ ZCL_COPA_TOPDOWN
+ E
+ CO-PA 하향식 배부
+ 1
+ X
+ X
+ X
+
+
+ -
+ I
+ 001
+ 경영단위를 등록하십시요.
+ 23
+
+ -
+ I
+ 002
+ VARIANT 코드를 등록하십시요.
+ 29
+
+ -
+ I
+ 003
+ VARIANT 정보를 확인하십시요.
+ 29
+
+ -
+ I
+ 004
+ Data saved successfully.
+ 48
+
+ -
+ I
+ 005
+ Error saving data.
+ 28
+
+ -
+ I
+ 006
+ 등록된 데이타가 존재합니다. 삭제 후 재 처리 하시겠습니까?
+ 66
+
+ -
+ I
+ 007
+ 데이타가 존재하지 않습니다. 확인 후 다시 처리 하십시요.
+ 64
+
+ -
+ I
+ 008
+ 클래스 환경 구성을 위한 Data Elements (Domain) 생성 오류
+ 84
+
+ -
+ I
+ 009
+ 클래스 환경 구성을 위한 관리 테이블 생성 오류
+ 52
+
+ -
+ I
+ 010
+ 클래스 환경 구성을 위한 함수 생성 오류
+ 44
+
+ -
+ I
+ 011
+ 클래스 운영을 위한 환경 구성이 완료되었습니다.
+ 52
+
+ -
+ I
+ 012
+ 필수 Import 파라메타 값을 지정하여야 합니다.
+ 56
+
+ -
+ I
+ 013
+ 클래스 환경 구성 정보 추출 성공하였습니다.
+ 48
+
+ -
+ I
+ 014
+ 클래스 환경 구성 정보 조회시 오류가 발생하였습니다.
+ 58
+
+ -
+ I
+ 015
+ 데이타 조회 과정에서 오류가 발생하였습니다.
+ 48
+
+ -
+ I
+ 016
+ 요청 작업을 성공적으로 완료하였습니다.
+ 42
+
+ -
+ I
+ 017
+ 요청 작업 수행 중 오류가 발생하였습니다.
+ 46
+
+ -
+ I
+ 018
+ 전표 발행이 완료되어 요청 작업을 처리 할 수 없습니다.
+ 62
+
+ -
+ I
+ 019
+ 현재 지원하지 않는 기능 영역입니다.
+ 40
+
+ -
+ I
+ 020
+ 이미 처리된 내역이 존재합니다.
+ 27
+
+ -
+ I
+ 021
+ 레코드 유형이 존재하지 않습니다. 다시 확인 바랍니다.
+ 60
+
+ -
+ I
+ 022
+ 관리 테이블 정보 조회 오류
+ 25
+
+ -
+ I
+ 023
+ 전표 발행 과정을 진행하지 않았습니다. CO-PA전표 발행 후, 수행하십시요.
+ 86
+
+ -
+ I
+ 024
+ CO-PA 전표가 존재하지 않습니다.
+ 40
+
+
+
+
+ BUILD_DYNAMIC_QUERY
+ E
+ 데이타 추출을 위한 쿼리 수행
+
+
+ CONSTRUCTOR
+ E
+ CONSTRUCTOR
+
+
+ DELETE_TOPDOWN_TB_DATA
+ E
+ TYPE별(센더, 리시버, 결과, 전표발행) 테이블 데이타 삭제
+
+
+ EXECUTE_TOPDOWN_DISTRIBUTE
+ E
+ 하향식 배부 실행(Templete)
+
+
+ GENERATE_DYNAMIC_NEW_SQL
+ E
+ 데이타 추출을 위한 쿼리 수행
+
+
+ GET_COPA_DOC_LIST
+ E
+ CO-PA 전표 조회(배부 수행 결과 전표)
+
+
+ GET_CUSTOM_TABLE_INFO
+ E
+ 센더, 리시버 테이블 정보(사용 X)
+
+
+ GET_FIELD_CATALOG
+ E
+ Variant별 사용 Field-Catalog 정보 조회
+
+
+ GET_SENDER_RECEIVER_DATA
+ E
+ 센더, 리시버 데이타 생성(Templete)
+
+
+ GET_TABNAME
+ E
+ TABNAME 조회
+
+
+ GET_TB_DATA_EXIST_YN
+ E
+ 테이블 데이타 존재 여부
+
+
+ GET_VARIANT_INFO
+ E
+ 변형 정보 조회
+
+
+ GET_VARIANT_LIST
+ E
+ 하향식 배부 변형 리스트 조회
+
+
+ GV_DISTINFO
+ E
+ 배부 기준 세부 정보 테이블
+
+
+ GV_DISTRULE
+ E
+ 배부 조건 Customizing
+
+
+ GV_MANAGER
+ E
+ Package 전용 테이블 관리 테이블 명
+
+
+ GV_RECEIVER
+ E
+ 리시버(배부기준) 테이블 명
+
+
+ GV_RESULT
+ E
+ 배부 결과 테이블 명
+
+
+ GV_SENDER
+ E
+ 센더 테이블 명
+
+
+ GV_SOURCE
+ E
+ 경영단위 CE1 테이블
+
+
+ GV_TARGET
+ E
+ 전표 발행 대상 테이블 명
+
+
+ GV_VARIANT
+ E
+ 월별 배부 기준 정보 테이블 명
+
+
+ MANAGER_STRUCT_DESC
+ E
+ 관리 테이블 구조
+
+
+ POST_ACTUAL_TOPDOWN_DOCUMENTS
+ E
+ 배주 전표 전기
+
+
+ RECEIVER_STRUCT_DESC
+ E
+ 리시버 테이블 구조
+
+
+ RESULT_STRUCT_DESC
+ E
+ 결과 테이블 구조
+
+
+ SENDER_STRUCT_DESC
+ E
+ 센더 테이블 구조
+
+
+ SET_AUDIT_FIELDS
+ E
+ Data 생성자(수정자) 정보
+
+
+ SET_INFO
+ E
+ 공용정보 지정
+
+
+ SET_SOURCE_INFO
+ E
+ 소스 테이블 지정(CE1)
+
+
+ SET_VARIANT_DESC
+ E
+ 하향식 배부 변형 설정 값 저장
+
+
+ SOURCE_STRUCT_DESC
+ E
+ 소스(CE1) 테이블 구조
+
+
+ TARGET_STRUCT_DESC
+ E
+ 전표 발행 대상
+
+
+ TT_SENDER
+ E
+ 센더 데이타(구조)
+
+
+ TY_DISTINFO
+ E
+ 배부 기준 세부 정보(구조)
+
+
+ TY_DISTRULE
+ E
+ 배부 조건 Customizing(구조)
+
+
+ TY_MNG_TABLE
+ E
+ 관리 테이블 정보
+
+
+ TY_RECEIVER
+ E
+ 배부 기준 데이타(구조)
+
+
+ TY_RESULT
+ E
+ 배부 결과 데이타(구조)
+
+
+ TY_SENDER
+ E
+ 센더 데이타(구조)
+
+
+ TY_TARGET
+ E
+ 전표 발행 대상 데이타(구조)
+
+
+ TY_VARIANT
+ E
+ 배부 기준 정보(월별)(구조)
+
+
+ TY_WORKING_INFO
+ E
+ 클래스 메소드 수행을 위한 공용 정보
+
+
+ VARIANT_STRUCT_DESC
+ E
+ 배부기준 테이블 구조
+
+
+ WORKING_INFO
+ E
+ 클래스 메소드 수행을 위한 공용 정보
+
+
+
+
+
diff --git a/src/zcl_copa_topdown_install.clas.abap b/src/zcl_copa_topdown_install.clas.abap
new file mode 100644
index 0000000..2f9da0d
--- /dev/null
+++ b/src/zcl_copa_topdown_install.clas.abap
@@ -0,0 +1,2056 @@
+class ZCL_COPA_TOPDOWN_INSTALL definition
+ public
+ create public .
+
+public section.
+
+ types:
+ BEGIN OF ty_bpsel,
+ sort TYPE rke_lfd4,
+ fnam TYPE fieldname,
+ sign TYPE raldb_sign,
+ option TYPE raldb_opti,
+ low TYPE rke_low_l,
+ high TYPE rke_high_l,
+ END OF ty_bpsel .
+ types:
+* types:
+* ty_zcotd_tab TYPE STANDARD TABLE OF zcotd1200 WITH EMPTY KEY .
+ ty_bpsel_tab TYPE STANDARD TABLE OF ty_bpsel WITH EMPTY KEY .
+
+ methods CONSTRUCTOR .
+ methods CREATE_INIT_TABLE
+ importing
+ !ERKRS type ERKRS .
+ methods START_PACKAGE_INSTALL
+ importing
+ value(ERKRS) type ERKRS
+ value(TABNAME) type TABNAME default 'ZCOTD1000'
+ value(FUNCTION_GROUP) type RS38L_AREA
+ value(CREATE_ELEMENT_YN) type BOE_BOOL default 'X'
+ value(CREATE_TABLE_YN) type BOE_BOOL default 'X'
+ value(CREATE_FUNCTION_YN) type BOE_BOOL default 'X'
+ exporting
+ !RESULT type BAPIRET2 .
+ PROTECTED SECTION.
+
+private section.
+
+ types:
+ BEGIN OF ty_mng_table,
+ type TYPE db2type,
+ tb_name TYPE tabname,
+ text TYPE mssviewortable,
+ END OF ty_mng_table .
+ types:
+ tt_dfies TYPE STANDARD TABLE OF dfies WITH DEFAULT KEY .
+ types:
+ tt_bdcdata TYPE STANDARD TABLE OF bdcdata WITH DEFAULT KEY .
+ types:
+ " 클래스내에서 필요한 기본 정보
+ BEGIN OF ty_working_info,
+ perio TYPE jahrper,
+ variant TYPE covariant,
+ END OF ty_working_info .
+ types:
+ BEGIN OF ty_key_map,
+ key_string TYPE string,
+ dist_id TYPE PBR_SEQRE,
+ END OF ty_key_map .
+ types:
+ tt_key_map TYPE HASHED TABLE OF ty_key_map
+ WITH UNIQUE KEY key_string .
+ types:
+ tt_dd03p TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY .
+
+ data:
+ gt_mng_table TYPE TABLE OF ty_mng_table .
+ data MT_SENDER_KEYS type TT_KEY_MAP .
+ data:
+ gv_dist_counter TYPE n LENGTH 9 value '000000000' ##NO_TEXT.
+ data GV_TABNAME type COVAD-TABNAME .
+ data GV_MESSAGE type STRING .
+ data GV_SOURCE type TABNAME .
+ data GV_MANAGER type TABNAME .
+ data GV_VARIANT type TABNAME .
+ data GV_SENDER type TABNAME .
+ data GV_RECEIVER type TABNAME .
+ data GV_RESULT type TABNAME .
+ data GV_TARGET type TABNAME .
+ data GV_DISTINFO type TABNAME .
+ data GV_DISTRULE type TABNAME .
+ data WORKING_INFO type TY_WORKING_INFO .
+
+ methods CREATE_INIT_DATA_ELEMENTS
+ returning
+ value(RESULT) type BAPIRET2 .
+ methods CREATE_INIT_DATA_TABLE
+ importing
+ value(ERKRS) type ERKRS
+ value(TABNAME) type TABNAME
+ returning
+ value(RESULT) type BAPIRET2 .
+ methods CREATE_INIT_FUNCTION
+ importing
+ value(FUNCTION_GROUP) type RS38L_AREA
+ value(TABNAME) type TABNAME
+ returning
+ value(RESULT) type BAPIRET2 .
+ methods GET_PACKAGE_INFO
+ importing
+ value(ERKRS) type ERKRS
+ returning
+ value(RESULT) type BAPIRET2 .
+ methods GENERATE_TABLE_FIELD
+ importing
+ value(TABNAME) type TABNAME
+ value(TYPE) type DB2TYPE
+ value(POSITION_START) type TABFDPOS
+ exporting
+ !CBO_DD03P type TT_DD03P
+ !FIELD_EXCEPTS type TT_DD03P
+ returning
+ value(POSITION) type TABFDPOS .
+ methods CREATE_INIT_STRUCTURE
+ importing
+ !ERKRS type ERKRS .
+ methods CREATE_INIT_STRUCTURE_EX_MANDT
+ importing
+ !ERKRS type ERKRS .
+ENDCLASS.
+
+
+
+CLASS ZCL_COPA_TOPDOWN_INSTALL IMPLEMENTATION.
+
+
+ METHOD constructor.
+ CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
+ EXPORTING
+ titel = '주의'
+ textline1 = TEXT-017
+ textline2 = TEXT-018.
+ ENDMETHOD.
+
+
+ METHOD create_init_data_elements.
+ DATA: ls_domain TYPE dd01v,
+ ls_element TYPE dd04v,
+ lt_domain_values TYPE TABLE OF dd07v,
+ ls_domain_value TYPE dd07v,
+ lv_message TYPE string,
+ lx_error TYPE REF TO cx_root.
+
+ DATA : iv_domain_name TYPE dom_ref VALUE 'ZTBLS',
+ iv_elemnt_name TYPE rollname VALUE 'ZTBLS'.
+* DATA : iv_domain_name TYPE dom_ref VALUE 'ZTST', "테스트
+* iv_elemnt_name TYPE rollname VALUE 'ZTST'. "테스트
+
+* 1. Domain 생성
+
+ " Domain 속성 정의
+* ls_domain-domname = iv_domain_name.
+* ls_domain-ddlanguage = sy-langu.
+* ls_domain-datatype = 'CHAR'.
+* ls_domain-leng = 1.
+* ls_domain-ddtext = '테이블 유형'.
+
+ ls_domain = VALUE #(
+ domname = iv_domain_name
+ ddlanguage = sy-langu
+ datatype = 'CHAR'
+ leng = '1'
+ ddtext = '테이블 유형'
+ ).
+
+ " 값 범위 설정
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0001' ddlanguage = sy-langu
+ domvalue_l = '1' ddtext = 'CBO 테이블 관리 테이블' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0002' ddlanguage = sy-langu
+ domvalue_l = '2' ddtext = '배부 기준 정보(월별)' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0003' ddlanguage = sy-langu
+ domvalue_l = '3' ddtext = '배부 대상 테이블' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0004' ddlanguage = sy-langu
+ domvalue_l = '4' ddtext = '배부 기준 테이블' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0005' ddlanguage = sy-langu
+ domvalue_l = '5' ddtext = '배부 결과 테이블' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0006' ddlanguage = sy-langu
+ domvalue_l = '6' ddtext = '전표 발행 테이블' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0007' ddlanguage = sy-langu
+ domvalue_l = '7' ddtext = '배부 조건 세부 정보' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ ls_domain_value = VALUE #(
+ domname = iv_domain_name valpos = '0008' ddlanguage = sy-langu
+ domvalue_l = '8' ddtext = '배부 조건 Customizing' ).
+ APPEND ls_domain_value TO lt_domain_values.
+
+ " 도메인 생성
+ CALL FUNCTION 'DDIF_DOMA_PUT'
+ EXPORTING
+ name = ls_domain-domname
+ dd01v_wa = ls_domain
+ TABLES
+ dd07v_tab = lt_domain_values.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Domain 생성 중 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+ " 도메인 활성화
+ CALL FUNCTION 'DDIF_DOMA_ACTIVATE'
+ EXPORTING
+ name = ls_domain-domname.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Domain 활성화 과정에서 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+
+
+
+* 2. Data Elements 생성
+
+ " 데이터 엘리먼트 속성 정의
+ ls_element = VALUE #(
+ rollname = iv_elemnt_name
+ domname = iv_domain_name
+ ddlanguage = sy-langu
+ ddtext = '유형'
+ headlen = 55
+ scrlen1 = 10
+ scrlen2 = 20
+ scrlen3 = 40 ).
+
+ " 데이터 엘리먼트 생성/업데이트
+ CALL FUNCTION 'DDIF_DTEL_PUT'
+ EXPORTING
+ name = ls_element-rollname
+ dd04v_wa = ls_element
+ EXCEPTIONS
+ element_not_found = 1
+ illegal_action = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Data Elements 생성 중 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+ " 데이터 엘리먼트 활성화
+ CALL FUNCTION 'DDIF_DTEL_ACTIVATE'
+ EXPORTING
+ name = ls_element-rollname
+ EXCEPTIONS
+ not_found = 1
+ put_failure = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Data Elements 활성화 과정에서 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+ " 성공 메시지 추가
+ result = VALUE #(
+ type = 'S'
+ id = 'SUCCESS'
+ number = '000'
+ message = 'Domain과 Data Element가 성공적으로 생성되었습니다' ).
+
+
+
+ ENDMETHOD.
+
+
+ METHOD create_init_data_table.
+ " 데이터 선언
+ DATA: lt_dd02v TYPE TABLE OF dd02v,
+ ls_dd02v TYPE dd02v,
+ lt_dd03p TYPE TABLE OF dd03p,
+ ls_dd03p TYPE dd03p,
+ lv_rc TYPE sy-subrc,
+ ls_dd09v TYPE dd09v. " 기술 설정 구조체 추가.
+
+ DATA : lv_tbtext TYPE as4text VALUE 'CO-PA Top-Down 배부 관련 테이블'.
+
+ " 테이블 헤더 정보 설정
+ ls_dd02v = VALUE #(
+ tabname = tabname
+ ddlanguage = sy-langu
+ tabclass = 'TRANSP'
+ clidep = 'X' " 클라이언트 종속
+ ddtext = lv_tbtext
+ contflag = 'A' " 활성
+ mainflag = 'X' " 메인 테이블
+ ).
+ APPEND ls_dd02v TO lt_dd02v.
+
+ " 테이블 필드 정보 설정
+ CLEAR ls_dd03p.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'MANDT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'MANDT'
+ ddlanguage = sy-langu
+ position = '0001'
+ ddtext = '클라이언트'
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'ERKRS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'ERKRS'
+ ddlanguage = sy-langu
+ position = '0002'
+ ddtext = '경영단위'
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TYPE'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'ZTBLS'
+ ddlanguage = sy-langu
+ position = '0003'
+ ddtext = '유형'
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TBNAME'
+* keyflag = 'X'
+* notnull = 'X'
+ rollname = 'P15_ORIGT'
+ ddlanguage = sy-langu
+ position = '0004'
+ ddtext = 'Source table'
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TEXT'
+* keyflag = 'X'
+* notnull = 'X'
+ rollname = 'MSSVIEWORTABLE'
+ ddlanguage = sy-langu
+ position = '0005'
+ ddtext = 'View or table name'
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ " 기술 설정(DD09L) 정보 설정
+ CLEAR ls_dd09v.
+ ls_dd09v-tabname = tabname.
+ ls_dd09v-as4local = 'A'. " 활성화 상태
+ ls_dd09v-tabkat = '3'. " 일반 테이블
+ ls_dd09v-tabart = 'APPL1'. " 응용 프로그램 테이블
+
+ " DDIC 함수를 사용하여 테이블 생성
+ CALL FUNCTION 'DDIF_TABL_PUT'
+ EXPORTING
+ name = tabname
+ dd02v_wa = ls_dd02v
+ TABLES
+ dd03p_tab = lt_dd03p
+ EXCEPTIONS
+ tabl_not_found = 1
+ name_inconsistent = 2
+ tabl_inconsistent = 3
+ put_failure = 4
+ put_refused = 5
+ OTHERS = 6.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'TABLE 생성 중 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+ " 테이블 활성화
+ DATA: lv_as4local TYPE dd02l-as4local.
+
+ " DDIF_TABL_ACTIVATE 함수 사용하여 테이블 활성화
+ CALL FUNCTION 'DDIF_TABL_ACTIVATE'
+ EXPORTING
+ name = tabname
+ auth_chk = 'X'
+ EXCEPTIONS
+ not_found = 1
+ put_failure = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'TABLE 활성화 과정에서 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+
+* 관리테이블의 기본 데이타를 등록한다.
+ DATA : wa_ref TYPE REF TO data, " 동적 워크에어리어
+ tab_ref TYPE REF TO data, " 동적 테이블 참조
+ lt_fcat TYPE lvc_t_fcat, " 필드카탈로그
+ ls_fcat TYPE lvc_s_fcat.
+
+ FIELD-SYMBOLS: TYPE STANDARD TABLE, " 동적 테이블용 필드심볼
+ TYPE any, " 동적 워크에어리어 필드심볼
+ TYPE any. " 필드값 세팅용
+
+* 1. 테이블 구조 메타데이터 가져오기
+ CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
+ EXPORTING
+ i_structure_name = tabname
+ CHANGING
+ ct_fieldcat = lt_fcat.
+
+* 2. 동적 내부테이블과 워크에어리어 생성
+ CALL METHOD cl_alv_table_create=>create_dynamic_table
+ EXPORTING
+ it_fieldcatalog = lt_fcat
+ IMPORTING
+ ep_table = tab_ref.
+
+ ASSIGN tab_ref->* TO .
+
+ CREATE DATA wa_ref LIKE LINE OF .
+ ASSIGN wa_ref->* TO .
+
+* 3. 필드값 세팅
+ ASSIGN COMPONENT 'ERKRS' OF STRUCTURE TO .
+ IF sy-subrc = 0. = erkrs. ENDIF.
+
+ ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO .
+ IF sy-subrc = 0. = '1'. ENDIF.
+
+ ASSIGN COMPONENT 'TBNAME' OF STRUCTURE TO .
+ IF sy-subrc = 0. = tabname. ENDIF.
+
+ ASSIGN COMPONENT 'TEXT' OF STRUCTURE TO .
+ IF sy-subrc = 0. = 'CBO테이블관리'. ENDIF.
+
+** 4. 동적 테이블에 데이터 삽입
+ INSERT (tabname) FROM .
+
+ IF sy-subrc NE 0.
+ gv_message = TEXT-005.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '005'
+ message = gv_message ).
+ EXIT.
+ ELSE.
+ " 성공 메시지 추가
+ result = VALUE #(
+ type = 'S'
+ id = 'SUCCESS'
+ number = '000'
+ message = '관리용 TABLE이 성공적으로 생성되었습니다' ).
+
+ ENDIF.
+ ENDMETHOD.
+
+
+ METHOD create_init_function.
+ TYPES: ty_rssource TYPE TABLE OF rssource.
+
+ DATA: lv_function_group TYPE rs38l-area,
+ lv_function_name TYPE rs38l-name VALUE 'ZTOPDOWN_ENV',
+ lv_short_text TYPE tftit-stext VALUE '테이블명 반환 함수',
+ lt_source TYPE ty_rssource,
+ lt_export TYPE TABLE OF rsexp.
+
+ DATA:
+ ls_export TYPE rsexp, " RSEXP 구조체 사용
+ lv_include TYPE rs38l-include.
+ DATA: ls_source TYPE rssource.
+
+ LV_function_group = function_group.
+
+ "function 그룹 존재 여부 확인
+ SELECT SINGLE area FROM tlibg INTO @DATA(lv_exists)
+ WHERE area = @function_group.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Function 그룹이 존재하지 않습니다.' ).
+ EXIT.
+ ENDIF.
+
+
+ " Export 파라미터 정의 (정확한 RSEXP 구조체 필드만 사용)
+ CLEAR ls_export.
+ ls_export-parameter = 'TB_NAME'. " 파라미터명
+ ls_export-typ = 'TABNAME'. " DB 필드명 (필수)
+
+ " OPTIONAL/DEFAULT 필드 제거 (RSEXP 구조체에 없음)
+ APPEND ls_export TO lt_export.
+
+ "생성할 function 소스
+ ls_source-line = | tb_name = '{ tabname }'.|.
+ APPEND ls_source TO lt_source.
+
+ " 함수 모듈 생성
+ CALL FUNCTION 'RS_FUNCTIONMODULE_INSERT'
+ EXPORTING
+ funcname = lv_function_name
+ function_pool = lv_function_group
+ short_text = lv_short_text
+ TABLES
+ export_parameter = lt_export
+ source = lt_source
+ EXCEPTIONS
+ function_already_exists = 1
+ OTHERS = 2.
+
+ IF sy-subrc <> 0.
+ " 실패 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = 'Function 생성 중 오류가 발생하였습니다.' ).
+ EXIT.
+ ENDIF.
+
+
+
+ " 성공 메시지 추가
+ result = VALUE #(
+ type = 'S'
+ id = 'SUCCESS'
+ number = '000'
+ message = '성공적으로 Function이 생성되었습니다.' ).
+
+ ENDMETHOD.
+
+
+ METHOD create_init_structure.
+
+ DATA : result TYPE bapiret2,
+ lt_dfies TYPE TABLE OF dfies.
+
+ " 데이터 선언
+ DATA: lt_dd02v TYPE TABLE OF dd02v,
+ ls_dd02v TYPE dd02v,
+ lt_dd03p TYPE TABLE OF dd03p, "MANDT 포함한 구조(Table과 일치)
+ ls_dd03p TYPE dd03p,
+
+ lv_position TYPE tabfdpos VALUE '0000'. "필드 순번
+
+
+ LOOP AT gt_mng_table INTO DATA(ls_struct) WHERE type <> 1. "관리테이블은 생성 제외
+ CLEAR : ls_dd02v, lt_dd03p.
+
+ " 1. 소스 구조 조회
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = ls_struct-tb_name
+ TABLES
+ dfies_tab = lt_dfies
+ EXCEPTIONS
+ not_found = 1
+ OTHERS = 2.
+
+ "타입별로 패키지 내부 고정 명 지정(Rename)
+ CASE ls_struct-type.
+ WHEN '2'.
+ ls_struct-tb_name = 'ZSTOP_VARIANT'.
+ WHEN '3'.
+ ls_struct-tb_name = 'ZSTOP_SENDER'.
+ WHEN '4'.
+ ls_struct-tb_name = 'ZSTOP_RECEIVER'.
+ WHEN '5'.
+ ls_struct-tb_name = 'ZSTOP_RESULT'.
+ WHEN '6'.
+ ls_struct-tb_name = 'ZSTOP_TARGET'.
+ WHEN '7'.
+ ls_struct-tb_name = 'ZSTOP_DISTINFO'.
+ WHEN '8'.
+ ls_struct-tb_name = 'ZSTOP_DISTRULE'.
+ ENDCASE.
+
+ CONCATENATE ls_struct-text '(구조)' INTO ls_struct-text.
+
+ " 1. 구조 헤더 정보 설정
+ ls_dd02v = VALUE #(
+ tabname = ls_struct-tb_name
+ ddlanguage = sy-langu
+ tabclass = 'INTTAB' " 구조체
+ clidep = 'X' " 클라이언트 종속
+ ddtext = ls_struct-text
+ contflag = 'A' " 활성
+ mainflag = 'X' " 메인 테이블
+ ).
+
+ LOOP AT lt_dfies INTO DATA(dfies).
+ CLEAR ls_dd03p.
+ lv_position = lv_position + 1.
+
+ ls_dd03p = VALUE #(
+ tabname = ls_struct-tb_name
+ fieldname = dfies-fieldname
+ rollname = dfies-rollname
+
+ datatype = dfies-datatype
+ leng = dfies-leng
+
+ reftable = SWITCH #( dfies-reftable WHEN '' THEN ''
+ ELSE ls_struct-tb_name )
+ reffield = dfies-reffield
+ ddlanguage = sy-langu
+ position = lv_position
+ ddtext = dfies-fieldtext
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ ENDLOOP.
+
+ "1. DDIC 함수를 사용하여 테이블 생성(MANDT 포함 - CRUD시 주요 사용)
+ CALL FUNCTION 'DDIF_TABL_PUT'
+ EXPORTING
+ name = ls_struct-tb_name
+ dd02v_wa = ls_dd02v
+ TABLES
+ dd03p_tab = lt_dd03p
+ EXCEPTIONS
+ tabl_not_found = 1
+ name_inconsistent = 2
+ tabl_inconsistent = 3
+ put_failure = 4
+ put_refused = 5
+ OTHERS = 6.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ " 테이블 활성화
+ CALL FUNCTION 'DDIF_TABL_ACTIVATE'
+ EXPORTING
+ name = ls_struct-tb_name
+ auth_chk = 'X'
+ EXCEPTIONS
+ not_found = 1
+ put_failure = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+
+ METHOD create_init_structure_ex_mandt.
+ DATA : result TYPE bapiret2,
+ lt_dfies TYPE TABLE OF dfies.
+
+ " 데이터 선언
+ DATA: lt_dd02v TYPE TABLE OF dd02v,
+ ls_dd02v TYPE dd02v,
+ lt_dd03p TYPE TABLE OF dd03p, "MANDT 포함한 구조(Table과 일치)
+ ls_dd03p TYPE dd03p,
+
+ lv_position TYPE tabfdpos VALUE '0000'. "필드 순번
+
+
+ LOOP AT gt_mng_table INTO DATA(ls_struct) WHERE type <> 1. "관리테이블은 생성 제외
+ CLEAR : ls_dd02v, lt_dd03p.
+
+ " 1. 소스 구조 조회
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = ls_struct-tb_name
+ TABLES
+ dfies_tab = lt_dfies
+ EXCEPTIONS
+ not_found = 1
+ OTHERS = 2.
+
+ "타입별로 패키지 내부 고정 명 지정(Rename)
+ CASE ls_struct-type.
+ WHEN '2'.
+ ls_struct-tb_name = 'ZSTOP_VARIANT_M'.
+ WHEN '3'.
+ ls_struct-tb_name = 'ZSTOP_SENDER_M'.
+ WHEN '4'.
+ ls_struct-tb_name = 'ZSTOP_RECEIVER_M'.
+ WHEN '5'.
+ ls_struct-tb_name = 'ZSTOP_RESULT_M'.
+ WHEN '6'.
+ ls_struct-tb_name = 'ZSTOP_TARGET_M'.
+ WHEN '7'.
+ ls_struct-tb_name = 'ZSTOP_DISTINFO_M'.
+ WHEN '8'.
+ ls_struct-tb_name = 'ZSTOP_DISTRULE_M'.
+ ENDCASE.
+
+ CONCATENATE ls_struct-text '(구조-MANDT제외)' INTO ls_struct-text.
+
+ " 1. 구조 헤더 정보 설정
+ ls_dd02v = VALUE #(
+ tabname = ls_struct-tb_name
+ ddlanguage = sy-langu
+ tabclass = 'INTTAB' " 구조체
+ clidep = 'X' " 클라이언트 종속
+ ddtext = ls_struct-text
+ contflag = 'A' " 활성
+ mainflag = 'X' " 메인 테이블
+ ).
+
+ LOOP AT lt_dfies INTO DATA(dfies).
+ CHECK dfies-fieldname NE 'MANDT'. "클라이언트 필드 제외
+
+ CLEAR ls_dd03p.
+ lv_position = lv_position + 1.
+
+ ls_dd03p = VALUE #(
+ tabname = ls_struct-tb_name
+ fieldname = dfies-fieldname
+ rollname = dfies-rollname
+
+ datatype = dfies-datatype
+ leng = dfies-leng
+
+ reftable = SWITCH #( dfies-reftable WHEN '' THEN ''
+ ELSE ls_struct-tb_name )
+ reffield = dfies-reffield
+ ddlanguage = sy-langu
+ position = lv_position
+ ddtext = dfies-fieldtext
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+
+ ENDLOOP.
+
+ "1. DDIC 함수를 사용하여 테이블 생성(MANDT 포함 - CRUD시 주요 사용)
+ CALL FUNCTION 'DDIF_TABL_PUT'
+ EXPORTING
+ name = ls_struct-tb_name
+ dd02v_wa = ls_dd02v
+ TABLES
+ dd03p_tab = lt_dd03p
+ EXCEPTIONS
+ tabl_not_found = 1
+ name_inconsistent = 2
+ tabl_inconsistent = 3
+ put_failure = 4
+ put_refused = 5
+ OTHERS = 6.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ " 테이블 활성화
+ CALL FUNCTION 'DDIF_TABL_ACTIVATE'
+ EXPORTING
+ name = ls_struct-tb_name
+ auth_chk = 'X'
+ EXCEPTIONS
+ not_found = 1
+ put_failure = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ ENDLOOP.
+ ENDMETHOD.
+
+
+ METHOD create_init_table.
+ DATA: lv_source_table TYPE tabname,
+ lt_dfies TYPE TABLE OF dfies.
+
+ DATA : result TYPE bapiret2.
+
+ " 데이터 선언
+ DATA: lt_dd02v TYPE TABLE OF dd02v,
+ ls_dd02v TYPE dd02v,
+ lt_dd03p TYPE TABLE OF dd03p,
+ ls_dd03p TYPE dd03p,
+ lt_exceipt TYPE TABLE OF dd03p, "제외할 필드
+ lv_rc TYPE sy-subrc,
+ ls_dd09v TYPE dd09v, " 기술 설정 구조체 추가
+ lv_as4local TYPE dd02l-as4local,
+ lv_position TYPE tabfdpos VALUE '0000'. "필드 순번
+
+* DATA : ls_crtable-tb_name TYPE tabname VALUE 'ZCOTD1300'.
+
+ " 관리 테이블 정보를 전역 Internal 테이블(gt_mng_table)에 업데이트. (생성 테이블 목록)
+ CALL METHOD me->get_package_info
+ EXPORTING
+ erkrs = erkrs
+ RECEIVING
+ result = result.
+
+ IF result-type NE 'S'.
+ "오류 발생.
+ gv_message = TEXT-010.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ " 1. 소스 구조 조회
+ CALL FUNCTION 'DDIF_FIELDINFO_GET'
+ EXPORTING
+ tabname = gv_source
+ TABLES
+ dfies_tab = lt_dfies
+ EXCEPTIONS
+ not_found = 1
+ OTHERS = 2.
+
+ IF sy-subrc <> 0.
+ "오류 발생.
+ gv_message = TEXT-015.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ LOOP AT gt_mng_table INTO DATA(ls_crtable) WHERE type <> '1'. "관리테이블은 생성된 상태이므로 제외.
+ CLEAR : ls_dd02v, lt_dd02v[], lt_dd03p.
+
+
+ " 1. 테이블 헤더 정보 설정
+ ls_dd02v = VALUE #(
+ tabname = ls_crtable-tb_name
+ ddlanguage = sy-langu
+ tabclass = 'TRANSP' " 투명 테이블
+ clidep = 'X' " 클라이언트 종속
+ ddtext = ls_crtable-text
+ contflag = 'A' " 활성
+ mainflag = 'X' " 메인 테이블
+ ).
+* APPEND ls_dd02v TO lt_dd02v.
+
+ " 2. 테이블 필드 정보 설정
+ CLEAR : ls_dd03p, lv_position.
+
+ CALL METHOD me->generate_table_field
+ EXPORTING
+ tabname = ls_crtable-tb_name
+ type = ls_crtable-type
+ position_start = lv_position
+ IMPORTING
+ cbo_dd03p = lt_dd03p
+ field_excepts = lt_exceipt
+ RECEIVING
+ position = lv_position.
+
+ "배부 관련 테이블은 경영단위 구조를 참조하여 추가한다.
+ IF ls_crtable-type = '3' OR ls_crtable-type = '4' OR ls_crtable-type = '5' OR ls_crtable-type = '6'.
+ LOOP AT lt_dfies INTO DATA(dfies). "참조 테이블 필드 추가(센더/리시버/결과/전표발행 테이블 ONly)
+
+ READ TABLE lt_exceipt WITH KEY tabname = ls_crtable-tb_name
+ fieldname = dfies-fieldname
+ TRANSPORTING NO FIELDS.
+ CHECK sy-subrc NE 0. " 제외 필드 인 경우에는 제외.
+
+ CLEAR ls_dd03p.
+ lv_position = lv_position + 1.
+ ls_dd03p = VALUE #(
+ tabname = ls_crtable-tb_name
+ fieldname = dfies-fieldname
+ keyflag = dfies-keyflag
+ notnull = dfies-keyflag
+ rollname = dfies-rollname
+ reftable = SWITCH #( dfies-reftable WHEN '' THEN ''
+ ELSE ls_crtable-tb_name )
+ reffield = dfies-reffield
+ ddlanguage = sy-langu
+ position = lv_position
+ ddtext = dfies-fieldtext
+ ).
+ APPEND ls_dd03p TO lt_dd03p.
+ ENDLOOP.
+ ENDIF.
+
+ " 기술 설정(DD09L) 정보 설정
+ CLEAR ls_dd09v.
+ ls_dd09v-tabname = ls_crtable-tb_name.
+ ls_dd09v-as4local = 'A'. " 활성화 상태
+ ls_dd09v-tabkat = '3'. " 일반 테이블
+ ls_dd09v-tabart = 'APPL1'. " 응용 프로그램 테이블
+
+ " DDIC 함수를 사용하여 테이블 생성
+ CALL FUNCTION 'DDIF_TABL_PUT'
+ EXPORTING
+ name = ls_crtable-tb_name
+ dd02v_wa = ls_dd02v
+ dd09l_wa = ls_dd09v " 기술설정 추가
+ TABLES
+ dd03p_tab = lt_dd03p
+ EXCEPTIONS
+ tabl_not_found = 1
+ name_inconsistent = 2
+ tabl_inconsistent = 3
+ put_failure = 4
+ put_refused = 5
+ OTHERS = 6.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ " 테이블 활성화
+ CALL FUNCTION 'DDIF_TABL_ACTIVATE'
+ EXPORTING
+ name = ls_crtable-tb_name
+ auth_chk = 'X'
+ EXCEPTIONS
+ not_found = 1
+ put_failure = 2
+ OTHERS = 3.
+
+ IF sy-subrc <> 0.
+ "오류 메시지
+ gv_message = TEXT-016.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+
+ ENDLOOP.
+
+ "배부 관련 테이블 구조 생성
+ CALL METHOD me->create_init_structure
+ EXPORTING
+ erkrs = erkrs.
+
+ "배부 관련 테이블 구조 생성(mandt 제외)
+ CALL METHOD me->create_init_structure_ex_mandt
+ EXPORTING
+ erkrs = erkrs.
+
+ "정상 처리 완료 메시지
+ gv_message = TEXT-011.
+ MESSAGE gv_message TYPE 'S'.
+ ENDMETHOD.
+
+
+ METHOD generate_table_field.
+ DATA : ls_dd03p TYPE dd03p.
+
+ position = position_start.
+
+ "공통 필드
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'MANDT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'MANDT'
+ ddlanguage = sy-langu
+ position = '0001'
+ ddtext = '클라이언트'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+
+ CASE type.
+ WHEN '2'. "배부 기준 정보(월별) 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'ERKRS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'ERKRS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '경영 단위'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'PERIO'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'JAHRPER'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기간/연도'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'APPLCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'APPLCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SUBCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'SUBCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '어플리케이션 클래스별 하위그룹'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TABNAME'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'TABNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '테이블이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'FUNC'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COFUNC'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기능'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VTEXT'
+ keyflag = ''
+ notnull = ''
+ rollname = 'COVARITXT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SENDER'
+ datatype = 'CHAR'
+ INTTYPE = 'C'
+* INTLEN = '1'
+ LENG = '1'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '센더 데이타 추출 진행 여부'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'RECEIVER'
+ datatype = 'CHAR'
+ INTTYPE = 'C'
+* INTLEN = '1'
+ LENG = '1'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부 기준 데이타 추출 진행 여부'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'PROC_DIST'
+ datatype = 'CHAR'
+ INTTYPE = 'C'
+* INTLEN = '1'
+ LENG = '1'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부 수행 여부'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'POST'
+ datatype = 'CHAR'
+ INTTYPE = 'C'
+* INTLEN = '1'
+ LENG = '1'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '전표 발행 수행 여부'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+
+
+ WHEN '3'. "센더 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'DIST_ID'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PBR_SEQRE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부키'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+
+
+ WHEN '4'. "리시버/배부 기준 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'DIST_ID'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PBR_SEQRE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부키'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SEQ'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PU12_SEQNR'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '순번'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+
+
+ WHEN '5'. "배부 결과 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'DIST_ID'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PBR_SEQRE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부키'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SEQ'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PU12_SEQNR'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '순번'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+
+
+ WHEN '6'. "전표 발행 대상 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'DIST_ID'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'PBR_SEQRE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '배부키'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+ APPEND ls_dd03p TO field_excepts.
+
+
+
+ WHEN '7'. "배부 기준 세부 정보 테이블(STD->CBO)
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'ERKRS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'ERKRS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '경영 단위'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'PERIO'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'JAHRPER'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기간/연도'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'APPLCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'APPLCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SUBCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'SUBCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '어플리케이션 클래스별 하위그룹'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TABNAME'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'TABNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '테이블이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'FUNC'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COFUNC'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기능'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SORT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_LFD4'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '순번'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'FNAM'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'FIELDNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '필드 이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SIGN'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RALDB_SIGN'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'SELECT-OPTIONS 테이블생성에서 부호필드'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'OPTIONN'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RALDB_OPTI'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'SELECT-OPTIONS 테이블구조의 OPTION 필드'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'LOW'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_LOW_L'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '특성 값 하한'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'HIGH'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_HIGH_L'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '특성값 상한선 (간격내에서만)'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'LOWTX'
+ keyflag = ''
+ notnull = ''
+ rollname = 'SCRTEXT_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '중간 필드 레이블'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'HIGHTX'
+ keyflag = ''
+ notnull = ''
+ rollname = 'SCRTEXT_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '중간 필드 레이블'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CDATE'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CDATE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성일'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CTIME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CTME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성 시간'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CNAME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CRNAM'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성자'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UDATE'
+ keyflag = ''
+ notnull = ''
+ rollname = 'RTC_DATE_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '수정일'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UTIME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'AEZET'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '최종변경시간'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UNAME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'UPNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '최종변경인'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+
+
+
+ WHEN '8'. "배부 조건 Custimizing 테이블
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'ERKRS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'ERKRS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '경영 단위'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'PERFROM'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'JAHRPER'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기간/연도 FROM'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'PERTO'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'JAHRPER'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기간/연도 TO'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'APPLCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'APPLCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'DD 오브젝트에 대한 어플리케이션 클래스 (사용되지 않음)'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SUBCLASS'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'SUBCLASS'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '어플리케이션 클래스별 하위그룹'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'TABNAME'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'TABNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '테이블이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'FUNC'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COFUNC'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '기능'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'VARIANT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'COVARIANT'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '변형'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SORT'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_LFD4'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '순번'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'FNAM'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'FIELDNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '필드 이름'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'SIGN'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RALDB_SIGN'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'SELECT-OPTIONS 테이블생성에서 부호필드'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'OPTIONN'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RALDB_OPTI'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = 'SELECT-OPTIONS 테이블구조의 OPTION 필드'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'LOW'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_LOW_L'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '특성 값 하한'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'HIGH'
+ keyflag = 'X'
+ notnull = 'X'
+ rollname = 'RKE_HIGH_L'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '특성값 상한선 (간격내에서만)'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'LOWTX'
+ keyflag = ''
+ notnull = ''
+ rollname = 'SCRTEXT_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '중간 필드 레이블'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'HIGHTX'
+ keyflag = ''
+ notnull = ''
+ rollname = 'SCRTEXT_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '중간 필드 레이블'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CDATE'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CDATE'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성일'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CTIME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CTME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성 시간'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'CNAME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'CRNAM'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '생성자'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UDATE'
+ keyflag = ''
+ notnull = ''
+ rollname = 'RTC_DATE_M'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '수정일'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UTIME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'AEZET'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '최종변경시간'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ position = position + 1.
+ ls_dd03p = VALUE #(
+ tabname = tabname
+ fieldname = 'UNAME'
+ keyflag = ''
+ notnull = ''
+ rollname = 'UPNAME'
+ ddlanguage = sy-langu
+ position = position
+ ddtext = '최종변경인'
+ ).
+ APPEND ls_dd03p TO cbo_dd03p.
+
+ ENDCASE.
+ ENDMETHOD.
+
+
+ METHOD get_package_info.
+ DATA: ls_mng_table TYPE ty_mng_table,
+ lv_tabname TYPE tabname.
+
+ FIELD-SYMBOLS: TYPE ANY TABLE.
+
+ IF erkrs IS INITIAL .
+ gv_message = TEXT-012.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+ gv_source = |CE1{ erkrs }|.
+
+ CALL FUNCTION 'ZTOPDOWN_ENV'
+ IMPORTING
+ tb_name = lv_tabname.
+
+ SELECT type,
+ tbname,
+ text
+ FROM (lv_tabname)
+ WHERE erkrs = @erkrs
+ INTO TABLE NEW @DATA(lt_mng_table). "런타임시 구조 결정
+
+ IF sy-subrc NE 0.
+ " 오류 메시지 추가
+ result = VALUE #(
+ type = 'E'
+ id = 'FAIL'
+ number = '000'
+ message = '관리 테이블 정보 조회 오류' ).
+ EXIT.
+ ENDIF.
+
+ ASSIGN lt_mng_table->* TO .
+
+ FIELD-SYMBOLS : TYPE any,
+ TYPE any,
+ TYPE any.
+
+ LOOP AT ASSIGNING FIELD-SYMBOL().
+ "TYPE 필드 동적 할당
+ ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO .
+ ASSIGN COMPONENT 'TBNAME' OF STRUCTURE TO .
+ ASSIGN COMPONENT 'TEXT' OF STRUCTURE TO .
+ CASE .
+ WHEN '1'.
+ gv_manager = .
+ WHEN '2'.
+ gv_variant = .
+ WHEN '3'.
+ gv_sender = .
+ WHEN '4'.
+ gv_receiver = .
+ WHEN '5'.
+ gv_result = .
+ WHEN '6'.
+ gv_target = .
+ WHEN '7'.
+ gv_distinfo = .
+ WHEN '8'.
+ gv_distrule = .
+ ENDCASE.
+
+ ls_mng_table = VALUE #(
+ type =
+ tb_name =
+ text = ).
+ APPEND ls_mng_table TO gt_mng_table.
+
+ ENDLOOP.
+
+ " 성공 메시지 추가
+ gv_message = TEXT-013.
+ result = VALUE #(
+ type = 'S'
+ id = 'SUCCESS'
+ number = '000'
+ message = gv_message ).
+ ENDMETHOD.
+
+
+ METHOD start_package_install.
+
+ IF erkrs IS INITIAL OR tabname IS INITIAL OR function_group IS INITIAL.
+ gv_message = TEXT-012.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+
+
+
+* 1. Domain & Data Elements 생성
+ IF create_element_yn EQ 'X'.
+ CALL METHOD me->create_init_data_elements
+ RECEIVING
+ result = result.
+
+ IF result-type <> 'S'.
+ "오류 발생.
+ gv_message = TEXT-008.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+ ENDIF.
+
+* 2. 관리 테이블 생성
+ IF create_table_yn EQ 'X'.
+ CALL METHOD me->create_init_data_table
+ EXPORTING
+ erkrs = erkrs
+ tabname = tabname
+ RECEIVING
+ result = result.
+
+ IF result-type <> 'S'.
+ "오류 발생.
+ gv_message = TEXT-009.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+ ENDIF.
+
+* 3. 관리 테이블 코드값 리턴 함수 생성.
+ IF create_function_yn EQ 'X'.
+ CALL METHOD me->create_init_function
+ EXPORTING
+ function_group = function_group
+ tabname = tabname
+ RECEIVING
+ result = result.
+
+ IF result-type <> 'S'.
+ "오류 발생.
+ gv_message = TEXT-010.
+ MESSAGE gv_message TYPE 'E'.
+ ENDIF.
+ ENDIF.
+
+
+
+ "정상 처리 완료 메시지
+ gv_message = TEXT-011.
+ MESSAGE gv_message TYPE 'S'.
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/zcl_copa_topdown_install.clas.xml b/src/zcl_copa_topdown_install.clas.xml
new file mode 100644
index 0000000..7851161
--- /dev/null
+++ b/src/zcl_copa_topdown_install.clas.xml
@@ -0,0 +1,203 @@
+
+
+
+
+
+ ZCL_COPA_TOPDOWN_INSTALL
+ E
+ ZCL_COPA_TOPDOWN 환경 구성(초기세팅)
+ 1
+ X
+ X
+ X
+
+
+ -
+ I
+ 001
+ 경영단위를 등록하십시요.
+ 23
+
+ -
+ I
+ 002
+ VARIANT 코드를 등록하십시요.
+ 29
+
+ -
+ I
+ 003
+ VARIANT 정보를 확인하십시요.
+ 29
+
+ -
+ I
+ 004
+ Data saved successfully.
+ 48
+
+ -
+ I
+ 005
+ Error saving data.
+ 28
+
+ -
+ I
+ 006
+ 등록된 데이타가 존재합니다. 삭제 후 재 처리 하시겠습니까?
+ 66
+
+ -
+ I
+ 007
+ 데이타가 존재하지 않습니다. 확인 후 다시 처리 하십시요.
+ 64
+
+ -
+ I
+ 008
+ 클래스 환경 구성을 위한 Data Elements (Domain) 생성 오류
+ 84
+
+ -
+ I
+ 009
+ 클래스 환경 구성을 위한 관리 테이블 생성 오류
+ 52
+
+ -
+ I
+ 010
+ 클래스 환경 구성을 위한 함수 생성 오류
+ 44
+
+ -
+ I
+ 011
+ 클래스 운영을 위한 환경 구성이 완료되었습니다.
+ 52
+
+ -
+ I
+ 012
+ 필수 Import 파라메타 값을 지정하여야 합니다.
+ 56
+
+ -
+ I
+ 013
+ 클래스 환경 구성 정보 추출 성공하였습니다.
+ 48
+
+ -
+ I
+ 014
+ 클래스 환경 구성 정보 조회시 오류가 발생하였습니다.
+ 58
+
+ -
+ I
+ 015
+ 데이타 조회 과정에서 오류가 발생하였습니다.
+ 48
+
+ -
+ I
+ 016
+ 처리 중 오류가 발생하였습니다.
+ 27
+
+ -
+ I
+ 017
+ CO-PA 하향식 배부 추가 기능을 지원하기 위한 환경 구축 작업을 수행합니다.
+ 88
+
+ -
+ I
+ 018
+ 이미 서비스를 사용중인 경우에는 다시 수행하지 마십시요. 재 수행시 심각한 문제가 발생할 수 있습니다.
+ 114
+
+
+
+
+ CONSTRUCTOR
+ E
+ CONSTRUCTOR
+
+
+ CREATE_INIT_STRUCTURE
+ E
+ 2-1. 구조(Structure) 생성
+
+
+ CREATE_INIT_STRUCTURE_EX_MANDT
+ E
+ 2-1. 구조(Structure) 생성(MANDT제외)
+
+
+ CREATE_INIT_TABLE
+ E
+ 2. 패키지 운영 DB TABLE 생성
+
+
+ GV_DISTINFO
+ E
+ 배부 기준 세부 정보 테이블
+
+
+ GV_DISTRULE
+ E
+ 배부 조건 Customizing
+
+
+ GV_MANAGER
+ E
+ Package 전용 테이블 관리 테이블 명
+
+
+ GV_RECEIVER
+ E
+ 리시버(배부기준) 테이블 명
+
+
+ GV_RESULT
+ E
+ 배부 결과 테이블 명
+
+
+ GV_SENDER
+ E
+ 센더 테이블 명
+
+
+ GV_SOURCE
+ E
+ 경영단위 CE1 테이블
+
+
+ GV_TARGET
+ E
+ 전표 발행 대상 테이블 명
+
+
+ GV_VARIANT
+ E
+ 월별 배부 기준 정보 테이블 명
+
+
+ START_PACKAGE_INSTALL
+ E
+ 1. 패키지 기본 환경 구축
+
+
+ WORKING_INFO
+ E
+ 클래스 메소드 수행을 위한 공용 정보
+
+
+
+
+