First Commit (2026.08.18)
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
*&---------------------------------------------------------------------*
|
||||
*& Report ZCREATETABLE
|
||||
*&---------------------------------------------------------------------*
|
||||
*& dd02v-tabclass 값으로 테이블과 구조체등 변경 가능
|
||||
*&---------------------------------------------------------------------*
|
||||
REPORT zcreatetable.
|
||||
|
||||
" 데이터 선언
|
||||
*DATA: lv_tabname TYPE tabname VALUE 'ZTESTEMPLOYEE',
|
||||
DATA: lv_tabname TYPE tabname VALUE 'ZTY_EMPLOYEE',
|
||||
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_dd02v-tabname = lv_tabname.
|
||||
ls_dd02v-ddlanguage = sy-langu.
|
||||
*ls_dd02v-tabclass = 'TRANSP'. " 투명 테이블
|
||||
ls_dd02v-tabclass = 'INTTAB'. " 구조
|
||||
ls_dd02v-clidep = 'X'. " 클라이언트 종속
|
||||
ls_dd02v-ddtext = '직원 테스트 테이블'.
|
||||
ls_dd02v-contflag = 'A'. " 활성
|
||||
ls_dd02v-mainflag = 'X'. " 메인 테이블
|
||||
APPEND ls_dd02v TO lt_dd02v.
|
||||
|
||||
* 아래 형식으로 사용해도 됨. 신 문법
|
||||
* ls_dd02v = VALUE #(
|
||||
* tabname = lv_tabname
|
||||
* ddlanguage = sy-langu
|
||||
* tabclass = 'TRANSP' " 투명 테이블
|
||||
* clidep = 'X' " 클라이언트 종속
|
||||
* ddtext = '직원 테스트 테이블'
|
||||
* contflag = 'A' " 활성
|
||||
* mainflag = 'X' " 메인 테이블
|
||||
* ).
|
||||
* APPEND ls_dd02v TO lt_dd02v.
|
||||
|
||||
" 테이블 필드 정보 설정
|
||||
CLEAR ls_dd03p.
|
||||
|
||||
" 1. 클라이언트 필드
|
||||
ls_dd03p = VALUE #(
|
||||
tabname = lv_tabname
|
||||
fieldname = 'MANDT'
|
||||
keyflag = 'X'
|
||||
notnull = 'X'
|
||||
rollname = 'MANDT'
|
||||
ddlanguage = sy-langu
|
||||
position = '0001'
|
||||
ddtext = '클라이언트'
|
||||
).
|
||||
APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" 2. 직원 번호 필드
|
||||
CLEAR ls_dd03p.
|
||||
ls_dd03p-tabname = lv_tabname.
|
||||
ls_dd03p-fieldname = 'EMPNO'.
|
||||
ls_dd03p-keyflag = 'X'.
|
||||
ls_dd03p-mandatory = 'X'.
|
||||
ls_dd03p-datatype = 'NUMC'.
|
||||
ls_dd03p-leng = 8.
|
||||
ls_dd03p-ddlanguage = sy-langu.
|
||||
ls_dd03p-position = '0002'.
|
||||
ls_dd03p-ddtext = '직원번호'.
|
||||
APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" 3. 직원 이름 필드
|
||||
CLEAR ls_dd03p.
|
||||
ls_dd03p-tabname = lv_tabname.
|
||||
ls_dd03p-fieldname = 'EMPNAME'.
|
||||
ls_dd03p-datatype = 'CHAR'.
|
||||
ls_dd03p-leng = 50.
|
||||
ls_dd03p-ddlanguage = sy-langu.
|
||||
ls_dd03p-position = '0003'.
|
||||
ls_dd03p-ddtext = '직원이름'.
|
||||
APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" 4. 부서 코드 필드
|
||||
CLEAR ls_dd03p.
|
||||
ls_dd03p-tabname = lv_tabname.
|
||||
ls_dd03p-fieldname = 'DEPTCODE'.
|
||||
ls_dd03p-datatype = 'CHAR'.
|
||||
ls_dd03p-leng = 10.
|
||||
ls_dd03p-ddlanguage = sy-langu.
|
||||
ls_dd03p-position = '0004'.
|
||||
ls_dd03p-ddtext = '부서코드'.
|
||||
APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" 5. 급여 필드
|
||||
*CLEAR ls_dd03p.
|
||||
*ls_dd03p-tabname = lv_tabname.
|
||||
*ls_dd03p-fieldname = 'SALARY'.
|
||||
*ls_dd03p-datatype = 'CURR'.
|
||||
*ls_dd03p-leng = 15.
|
||||
*ls_dd03p-decimals = 2.
|
||||
*ls_dd03p-ddlanguage = sy-langu.
|
||||
*ls_dd03p-position = '0005'.
|
||||
*ls_dd03p-ddtext = '급여'.
|
||||
*APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" 6. 입사일 필드
|
||||
CLEAR ls_dd03p.
|
||||
ls_dd03p-tabname = lv_tabname.
|
||||
ls_dd03p-fieldname = 'HIREDATE'.
|
||||
ls_dd03p-datatype = 'DATS'.
|
||||
ls_dd03p-leng = 8.
|
||||
ls_dd03p-ddlanguage = sy-langu.
|
||||
ls_dd03p-position = '0006'.
|
||||
ls_dd03p-ddtext = '입사일'.
|
||||
APPEND ls_dd03p TO lt_dd03p.
|
||||
|
||||
" DDIC 함수를 사용하여 테이블 생성
|
||||
CALL FUNCTION 'DDIF_TABL_PUT'
|
||||
EXPORTING
|
||||
name = lv_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.
|
||||
WRITE: / '테이블 생성 실패:', sy-subrc.
|
||||
MESSAGE e001(00) WITH '테이블 생성 중 오류가 발생했습니다'.
|
||||
ELSE.
|
||||
WRITE: / '테이블', lv_tabname, '이 성공적으로 생성되었습니다.'.
|
||||
ENDIF.
|
||||
|
||||
" 테이블 활성화
|
||||
DATA: lv_as4local TYPE dd02l-as4local.
|
||||
|
||||
" DDIF_TABL_ACTIVATE 함수 사용하여 테이블 활성화
|
||||
CALL FUNCTION 'DDIF_TABL_ACTIVATE'
|
||||
EXPORTING
|
||||
name = lv_tabname
|
||||
auth_chk = 'X'
|
||||
EXCEPTIONS
|
||||
not_found = 1
|
||||
put_failure = 2
|
||||
OTHERS = 3.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
WRITE: / '테이블 활성화 성공.'.
|
||||
|
||||
" 활성화 상태 확인 (DD02L 테이블에서 AS4LOCAL 필드 확인)
|
||||
SELECT SINGLE as4local FROM dd02l
|
||||
INTO lv_as4local
|
||||
WHERE tabname = lv_tabname.
|
||||
|
||||
IF lv_as4local = 'A'.
|
||||
WRITE: / '테이블이 활성 상태로 확인되었습니다.'.
|
||||
ELSE.
|
||||
WRITE: / '테이블 상태:', lv_as4local, '(A=활성, M=유지보수, N=신규)'.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
WRITE: / '테이블 활성화 실패. SY-SUBRC:', sy-subrc.
|
||||
CASE sy-subrc.
|
||||
WHEN 1.
|
||||
WRITE: / '오류: 테이블을 찾을 수 없습니다.'.
|
||||
WHEN 2.
|
||||
WRITE: / '오류: 활성화 처리 실패.'.
|
||||
WHEN OTHERS.
|
||||
WRITE: / '오류: 기타 오류가 발생했습니다.'.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
" 생성된 테이블 정보 확인
|
||||
CALL FUNCTION 'DDIF_TABL_GET'
|
||||
EXPORTING
|
||||
name = lv_tabname
|
||||
langu = sy-langu
|
||||
IMPORTING
|
||||
dd02v_wa = ls_dd02v
|
||||
TABLES
|
||||
dd03p_tab = lt_dd03p
|
||||
EXCEPTIONS
|
||||
illegal_input = 1
|
||||
OTHERS = 2.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
WRITE: / '=== 생성된 테이블 정보 ==='.
|
||||
WRITE: / '테이블명:', ls_dd02v-tabname.
|
||||
WRITE: / '설명:', ls_dd02v-ddtext.
|
||||
WRITE: / '테이블 클래스:', ls_dd02v-tabclass.
|
||||
|
||||
WRITE: / '=== 필드 정보 ==='.
|
||||
LOOP AT lt_dd03p INTO ls_dd03p.
|
||||
WRITE: / ls_dd03p-fieldname, ls_dd03p-datatype,
|
||||
ls_dd03p-leng, ls_dd03p-ddtext.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
Reference in New Issue
Block a user