diff --git a/.abapgit.xml b/.abapgit.xml new file mode 100644 index 0000000..5c616cb --- /dev/null +++ b/.abapgit.xml @@ -0,0 +1,10 @@ + + + + + 3 + /src/ + PREFIX + + + diff --git a/src/package.devc.xml b/src/package.devc.xml new file mode 100644 index 0000000..10a239a --- /dev/null +++ b/src/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + CO-PA 하향식 배부 패키지 + + + + diff --git a/src/sapfztdpool.prog.abap b/src/sapfztdpool.prog.abap new file mode 100644 index 0000000..55aa650 --- /dev/null +++ b/src/sapfztdpool.prog.abap @@ -0,0 +1,11 @@ +*&---------------------------------------------------------------------* +*& 서브루틴풀 SAPFZTDPOOL +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* + +INCLUDE SAPFZTDPOOL_TOP . " Global Data + +* INCLUDE SAPFZTDPOOL_O01 . " PBO-Modules +* INCLUDE SAPFZTDPOOL_I01 . " PAI-Modules + INCLUDE SAPFZTDPOOL_F01 . " FORM-Routines diff --git a/src/sapfztdpool.prog.xml b/src/sapfztdpool.prog.xml new file mode 100644 index 0000000..cfd3e05 --- /dev/null +++ b/src/sapfztdpool.prog.xml @@ -0,0 +1,22 @@ + + + + + + SAPFZTDPOOL + S + K + 3 + X + X + + + + R + CO-PA 하향식 배부 서브루틴 풀 + 19 + + + + + diff --git a/src/sapfztdpool_f01.prog.abap b/src/sapfztdpool_f01.prog.abap new file mode 100644 index 0000000..4e0f76b --- /dev/null +++ b/src/sapfztdpool_f01.prog.abap @@ -0,0 +1,146 @@ +*&---------------------------------------------------------------------* +*& Include SAPFZTDPOOL_F01 +*&---------------------------------------------------------------------* +* +*&---------------------------------------------------------------------* +*& Form get_table_info +*&---------------------------------------------------------------------* +FORM get_table_info . + TYPES : BEGIN OF ty_table, + type TYPE db2type, + tbname TYPE tabname, + END OF ty_table. + + DATA : lt_mng_table TYPE TABLE OF ty_table. + + DATA : lv_tabname TYPE tabname. + + " 환경정보에서 관리 테이블명 조회 + CALL FUNCTION 'ZTOPDOWN_ENV' + IMPORTING + tb_name = lv_tabname. + + " 관리 테이블 정보 로딩 + SELECT type, + tbname + FROM (lv_tabname) + INTO CORRESPONDING FIELDS OF TABLE @Lt_mng_table. + + LOOP AT lt_mng_table INTO DATA(ls_table). + CASE ls_table-type. + WHEN '1'. gv_manager = ls_table-tbname. + WHEN '2'. gv_variant = ls_table-tbname. + WHEN '3'. gv_sender = ls_table-tbname. + WHEN '4'. gv_receiver = ls_table-tbname. + WHEN '5'. gv_result = ls_table-tbname. + WHEN '6'. gv_target = ls_table-tbname. + WHEN '7'. gv_distinfo = ls_table-tbname. + WHEN '8'. gv_distrule = ls_table-tbname. + ENDCASE. + ENDLOOP. +ENDFORM. +* +*&---------------------------------------------------------------------* +*& Form show_progress +*&---------------------------------------------------------------------* +FORM show_progress USING p_percent p_text. + + IF sy-batch = space. + + CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' + EXPORTING + percentage = p_percent + text = p_text. + + ELSE. + MESSAGE s000 WITH p_text. + ENDIF. + +ENDFORM. " show_progress +* +*&---------------------------------------------------------------------* +*& Form confirm_step +*&---------------------------------------------------------------------* +FORM confirm_step USING VALUE(p_question) + VALUE(p_cancel) + CHANGING p_answer. +* 확인 + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + titlebar = '확인' + text_question = p_question + display_cancel_button = p_cancel + IMPORTING + answer = p_answer + EXCEPTIONS + text_not_found = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + +* P_ANSWER +* 1 : 예 +* 2 : 아니요 +* A : 취소 + +ENDFORM. " confirm_step +* +*&---------------------------------------------------------------------* +*& Form custom_table_info +*&---------------------------------------------------------------------* +FORM custom_table_info CHANGING gv_manager. + DATA: lv_tabname TYPE tabname. + + " 환경정보에서 관리 테이블명 조회 + CALL FUNCTION 'ZTOPDOWN_ENV' + IMPORTING + tb_name = lv_tabname. + + +ENDFORM. +* +*&---------------------------------------------------------------------* +*& Form get_variant_list +*&---------------------------------------------------------------------* +FORM get_variant_list TABLES pt_variant + USING p_erkrs TYPE erkrs. + DATA : l_tabname TYPE tabname. + + CONCATENATE 'CE1' p_erkrs INTO l_tabname. + + + SELECT @p_erkrs AS erkrs, + applclass, + subclass, + tabname, + func, + variant, + vtext + FROM covat + WHERE spras = @sy-langu + AND applclass = 'KE' + AND subclass = '02' + AND tabname = @l_tabname + AND func = 'GITD' + INTO CORRESPONDING FIELDS OF TABLE @pt_variant + . +ENDFORM. +* +*&---------------------------------------------------------------------* +*& Form get_variant_list +*&---------------------------------------------------------------------* +FORM get_target_variant TABLES pt_variant + USING p_erkrs TYPE erkrs + p_perio TYPE jahrper. + DATA : l_tabname TYPE tabname. + + PERFORM get_table_info. + + SELECT * + FROM (gv_variant) + WHERE erkrs = @p_erkrs + AND perio = @p_perio + INTO CORRESPONDING FIELDS OF TABLE @pt_variant. +ENDFORM. diff --git a/src/sapfztdpool_f01.prog.xml b/src/sapfztdpool_f01.prog.xml new file mode 100644 index 0000000..ea1ce51 --- /dev/null +++ b/src/sapfztdpool_f01.prog.xml @@ -0,0 +1,21 @@ + + + + + + SAPFZTDPOOL_F01 + I + K + 3 + X + + + + R + Include SAPFZTDPOOL_F01 + 23 + + + + + diff --git a/src/sapfztdpool_top.prog.abap b/src/sapfztdpool_top.prog.abap new file mode 100644 index 0000000..6780fea --- /dev/null +++ b/src/sapfztdpool_top.prog.abap @@ -0,0 +1,13 @@ +*&---------------------------------------------------------------------* +*& Include SAPFZTDPOOL_TOP - 서브루틴풀 SAPFZTDPOOL +*&---------------------------------------------------------------------* +PROGRAM sapfztdpool MESSAGE-ID ztopdown. + +DATA : gv_manager TYPE tabname, + gv_variant TYPE tabname, + gv_sender TYPE tabname, + gv_receiver TYPE tabname, + gv_result TYPE tabname, + gv_target TYPE tabname, + gv_distinfo TYPE tabname, + gv_distrule TYPE tabname. diff --git a/src/sapfztdpool_top.prog.xml b/src/sapfztdpool_top.prog.xml new file mode 100644 index 0000000..0f308c5 --- /dev/null +++ b/src/sapfztdpool_top.prog.xml @@ -0,0 +1,21 @@ + + + + + + SAPFZTDPOOL_TOP + I + K + 3 + X + + + + R + Include SAPFZTDPOOL_TOP + 23 + + + + + diff --git a/src/zcl_copa_topdown.clas.abap b/src/zcl_copa_topdown.clas.abap new file mode 100644 index 0000000..4375752 --- /dev/null +++ b/src/zcl_copa_topdown.clas.abap @@ -0,0 +1,2031 @@ +class ZCL_COPA_TOPDOWN definition + public + create public . + +public section. + + types: + tt_dfies TYPE STANDARD TABLE OF dfies WITH DEFAULT KEY . + types: + result_tb TYPE STANDARD TABLE OF zstop_result WITH EMPTY KEY . + types: + target_tb TYPE STANDARD TABLE OF zstop_target WITH EMPTY KEY . + + methods CONSTRUCTOR . + methods GET_CUSTOM_TABLE_INFO + importing + value(ERKRS) type ERKRS + exporting + !SENDER type STRING + !RECEIVER type STRING . + methods GET_VARIANT_LIST + importing + value(ERKRS) type ERKRS + returning + value(RESULT) type FIST_FIELD_EXT + exceptions + SELECT_ERR . + methods SET_VARIANT_DESC + importing + value(ERKRS) type ERKRS optional + value(VARIANT) type COVARIANT optional + value(PERIO) type JAHRPER optional . + methods GET_SENDER_RECEIVER_DATA + importing + value(ERKRS) type ERKRS optional + value(VARIANT) type COVARIANT optional + value(PERIO) type JAHRPER optional + returning + value(RESULT) type BAPIRET2 . + methods GET_FIELD_CATALOG + importing + value(ERKRS) type ERKRS + value(PERIO) type JAHRPER + value(VARIANT) type COVARIANT + exporting + value(FIELDCATALOG) type TT_DFIES + returning + value(RESULT) type BAPIRET2 . + methods DELETE_TOPDOWN_TB_DATA + importing + value(ERKRS) type ERKRS + value(VARIANT) type COVARIANT + value(PERIO) type JAHRPER + value(TYPE) type ZTBLS + returning + value(RESULT) type BAPIRET2 . + methods EXECUTE_TOPDOWN_DISTRIBUTE + importing + value(ERKRS) type ERKRS + value(VARIANT) type COVARIANT + value(PERIO) type JAHRPER + value(SAVE_YN) type BOE_BOOL default 'X' + exporting + value(RT_RESULT) type RESULT_TB + returning + value(RESULT) type BAPIRET2 . + methods POST_ACTUAL_TOPDOWN_DOCUMENTS + importing + value(ERKRS) type ERKRS + value(VARIANT) type COVARIANT + value(PERIO) type JAHRPER + value(VRGAR) type RKE_VRGAR + !TESTRUN type TESTRUN default 'X' + returning + value(RESULT) type BAPIRET2_T . + methods GET_COPA_DOC_LIST + importing + value(ERKRS) type ERKRS + value(PERIO) type JAHRPER + value(VARIANT) type COVARIANT + value(REVERSE) type BLG_STORNO default 'X' + exporting + value(COPA_DOC_LIST) type TARGET_TB + returning + value(RESULT) type BAPIRET2 . + PROTECTED SECTION. + +private 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: + tt_bpsel TYPE STANDARD TABLE OF ty_bpsel WITH EMPTY KEY . + types: + BEGIN OF ty_mng_table, + type TYPE db2type, + tbname TYPE tabname, + text TYPE mssviewortable, + END OF ty_mng_table . + 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 . + types TY_SENDER type ZSTOP_SENDER . + types TY_RECEIVER type ZSTOP_RECEIVER . + types TY_VARIANT type ZSTOP_VARIANT . + types TY_RESULT type ZSTOP_RESULT . + types TY_TARGET type ZSTOP_TARGET . + types TY_DISTINFO type ZSTOP_DISTINFO . + types TY_DISTRULE type ZSTOP_DISTRULE . + types: + tt_sender TYPE STANDARD TABLE OF ty_sender WITH EMPTY KEY . + types: + tt_receiver TYPE STANDARD TABLE OF ty_receiver WITH EMPTY KEY . + types: + tt_variant TYPE STANDARD TABLE OF ty_variant WITH EMPTY KEY . + types: + TT_result TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY . + types: + tt_target TYPE STANDARD TABLE OF ty_target WITH EMPTY KEY . + types: + tt_fieldlist TYPE STANDARD TABLE OF bapi_copa_field WITH DEFAULT KEY . + types: + tt_copa_data TYPE STANDARD TABLE OF bapi_copa_data WITH DEFAULT KEY . + + data SOURCE_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data SOURCE_TABLE type ref to DATA . + data MANAGER_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data MANAGER_TABLE type ref to DATA . + data VARIANT_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data VARIANT_TABLE type ref to DATA . + data SENDER_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data SENDER_TABLE type ref to DATA . + data RECEIVER_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data RECEIVER_TABLE type ref to DATA . + data RESULT_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data RESULT_TABLE type ref to DATA . + data TARGET_STRUCT_DESC type ref to CL_ABAP_STRUCTDESCR . + data TARGET_TABLE type ref to DATA . + 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 SET_INFO + importing + value(PERIO) type JAHRPER + value(VARIANT) type COVARIANT . + methods GET_VARIANT_INFO + importing + value(ERKRS) type ERKRS optional + value(VARIANT) type COVARIANT optional + exporting + !COVAD type COVAD . + methods GET_TABNAME + importing + value(ERKRS) type ERKRS optional + exporting + !TABNAME type TABNAME . + methods BUILD_DYNAMIC_QUERY + importing + !IV_TYPE type C + !IT_BPSEL type TT_BPSEL + returning + value(RT_DATA) type TT_RECEIVER . + methods GENERATE_DIST_ID + importing + !IS_DATA type ANY + !IT_BPSEL type TT_BPSEL + returning + value(RV_DIST) type PBR_SEQRE . + methods BUILD_KEY_STRING + importing + !IS_DATA type ANY + !IT_BPSEL type TT_BPSEL + !IV_TYPE type C + returning + value(RV_KEY) type STRING . + methods SET_SOURCE_INFO + importing + value(ERKRS) type ERKRS + returning + value(RESULT) type BAPIRET2 . + methods GET_TB_DATA_EXIST_YN + importing + value(ERKRS) type ERKRS + value(VARIANT) type COVARIANT + value(PERIO) type JAHRPER + value(TYPE) type ZTBLS + returning + value(RESULT) type BAPIRET2 . + methods BUILD_FIELDLIST + importing + !IT_CATALOG type TT_DFIES + changing + !CT_FIELDLIST type TT_FIELDLIST . + methods MAP_DOCUMENT_DATA + importing + value(IT_SOURCE) type ANY TABLE + value(IT_CATALOG) type TT_DFIES + value(IV_VRGAR) type ANY + value(IV_REVERSE) type ABAP_BOOL + value(IV_BUDAT) type DAERF + changing + !CT_INPUTDATA type TT_COPA_DATA + !CV_INDEX type RKE_RECORD_ID . + methods CREATE_DYNAMIC_TABLE + importing + !IV_TABNAME type TABNAME + returning + value(RO_TABLE) type ref to DATA . + methods SET_AUDIT_FIELDS + changing + !CS_DATA type TY_DISTINFO . + methods GENERATE_DYNAMIC_NEW_SQL + importing + !IV_SELECT type STRING + !IV_FROM type STRING + !IT_WHERE type TABLE + !IV_GROUP type STRING + exporting + !ET_DATA type TT_RECEIVER . +ENDCLASS. + + + +CLASS ZCL_COPA_TOPDOWN IMPLEMENTATION. + + + METHOD build_dynamic_query. + DATA : l_seq TYPE n VALUE 1, + lb_first TYPE abap_boolean VALUE 'X'. + + TYPES : BEGIN OF ty_where, + seq TYPE n LENGTH 2, + condition TYPE string, + END OF ty_where. + DATA : lt_where TYPE TABLE OF ty_where, + ls_where TYPE ty_where. + + DATA: lv_select TYPE string, + lv_from TYPE string, + lv_group TYPE string, + lv_sql TYPE string. + + DATA: lv_condition TYPE string, + lv_seq TYPE pu12_seqnr VALUE '0'. "데이타 키(seq) + + FIELD-SYMBOLS: TYPE ty_bpsel. + lv_from = gv_source. + + " 필수 필드 추가 (rec_waers) 통화키 + lv_select = |{ lv_select } t1~REC_WAERS AS rec_waers, |. + lv_group = |{ lv_group } REC_WAERS, |. + +* WHERE 조건 + "통화유형 필드 필수 + ls_where = VALUE #( seq = 0 + condition = |t1~PALEDGER = '01'| "경영단위 통화 데이타 사용 + ). + APPEND ls_where TO lt_where. + + "기간/연도 필드 필수 + ls_where = VALUE #( seq = 1 + condition = |AND t1~perio = '{ working_info-perio }'| + ). + APPEND ls_where TO lt_where. + + CASE iv_type. + WHEN 'S'. " 센더 쿼리 구성 + "동일 필드(FNAM)가 2개 이상인 필드명 추출(OR 연산자 생성 목적) + TYPES: BEGIN OF ty_cnt, + fnam TYPE fieldname, + cnt TYPE i, + END OF ty_cnt. + + DATA: lt_grp TYPE TABLE OF ty_cnt, + lt_OR TYPE TABLE OF fieldname. + + lt_grp = VALUE #( + FOR GROUPS group OF row IN it_bpsel WHERE ( sort = '0200' ) + GROUP BY ( fnam = row-fnam ) + ( fnam = group-fnam + cnt = REDUCE i( INIT x = 0 FOR r IN GROUP group NEXT x = x + 1 ) ) + ). + + lt_OR = VALUE #( FOR or IN lt_grp WHERE ( cnt > 1 ) ( or-fnam ) ). + + " SELECT 절 구성 (SORT=0270, LOW=X) + LOOP AT it_bpsel ASSIGNING WHERE sort = '0270' AND low = 'X'. + lv_select = |{ lv_select } t1~{ -fnam },|. + lv_group = |{ lv_group }{ -fnam },|. + ENDLOOP. + + " SUM 필드 추가 (SORT=0300, LOW=X) + LOOP AT it_bpsel ASSIGNING WHERE sort = '0300' AND low = 'X'. + lv_select = |{ lv_select } SUM( t1~{ -fnam } ) AS { -fnam },|. + ENDLOOP. + + " WHERE 조건 (SORT=200) - 단일조건 AND ...AND 연결 + LOOP AT it_bpsel ASSIGNING WHERE sort = '0200'. + CLEAR : ls_where, lv_condition. + + cl_abap_dyn_prg=>check_column_name( -fnam ). + IF -low <> '*' AND -high <> '*'. + + " lt_OR에 -fnam이 있는 경우 제외 + READ TABLE lt_OR WITH TABLE KEY table_line = -fnam TRANSPORTING NO FIELDS. + IF sy-subrc = 0. + CONTINUE. + ENDIF. + + l_seq += 1. + + CASE -option. + WHEN 'BT'. + lv_condition = |AND t1~{ -fnam } BETWEEN '{ -low }' AND '{ -high }'|. + WHEN 'EQ'. + lv_condition = |AND t1~{ -fnam } = '{ -low }'|. + ENDCASE. + + ls_where-seq = l_seq. "SQL의 where조건의 순서 + ls_where-condition = lv_condition. + APPEND ls_where TO lt_where. + ENDIF. + ENDLOOP. + + " WHERE 조건 (SORT=200) - 다중조건 AND ( a OR b ...) + CLEAR : ls_where, lv_condition. + LOOP AT it_bpsel ASSIGNING WHERE sort = '0200'. + + cl_abap_dyn_prg=>check_column_name( -fnam ). + IF -low <> '*' AND -high <> '*'. + + " lt_OR에 -fnam이 있는 경우 제외 + READ TABLE lt_OR WITH TABLE KEY table_line = -fnam TRANSPORTING NO FIELDS. + IF sy-subrc NE 0. + CONTINUE. + ENDIF. + + AT NEW fnam. + CLEAR : ls_where, lv_condition. + lb_first = 'X'. "첫번째 item으로 설정 + l_seq += 1. + lv_condition = |AND ( |. + ls_where-seq = l_seq. "SQL의 where조건의 순서 + ENDAT. + + IF lb_first = 'X'. + CASE -option. + WHEN 'BT'. + lv_condition = lv_condition && |t1~{ -fnam } BETWEEN '{ -low }' AND '{ -high }'|. + WHEN 'EQ'. + lv_condition = lv_condition && |t1~{ -fnam } = '{ -low }'|. + ENDCASE. + ELSE. + CASE -option. + WHEN 'BT'. + lv_condition = lv_condition && | OR t1~{ -fnam } BETWEEN '{ -low }' AND '{ -high }'|. + WHEN 'EQ'. + lv_condition = lv_condition && | OR t1~{ -fnam } = '{ -low }'|. + ENDCASE. + ENDIF. + CLEAR : lb_first. + + AT END OF fnam. + lv_condition = lv_condition && | )|. + + ls_where-condition = lv_condition. + APPEND ls_where TO lt_where. + CLEAR : ls_where, lv_condition. + ENDAT. + + ENDIF. + ENDLOOP. + + + + WHEN 'R'. " 리시버 쿼리 구성 + " SELECT 절 (SORT=270/201, LOW=X) + LOOP AT it_bpsel ASSIGNING WHERE ( sort = '0270' OR sort = '0201' ) AND low = 'X'. + lv_select = |{ lv_select } t1~{ -fnam },|. + lv_group = |{ lv_group }{ -fnam },|. + ENDLOOP. + + " SUM 필드 추가 (SORT=100, FNAM=WKOFNAM, LOW=X) + LOOP AT it_bpsel ASSIGNING WHERE sort = '0100' AND fnam = 'WKOFNAM'. " ★ 수정 + lv_select = |{ lv_select } SUM( t1~{ -low } ) AS { -low },|. + ENDLOOP. + +* " WHERE 조건 (SORT=0272 → SORT=0274 → SORT=0273 매핑) + DATA : it_0274 TYPE TABLE OF ty_bpsel, + it_0273 TYPE TABLE OF ty_bpsel. + + + FIELD-SYMBOLS: TYPE ty_bpsel, + TYPE ty_bpsel, + TYPE ty_bpsel. + + it_0274 = VALUE #( FOR wa IN it_bpsel WHERE ( sort = '0274' ) ( wa ) ). + it_0273 = VALUE #( FOR wa IN it_bpsel WHERE ( sort = '0273' ) ( wa ) ). + + SORT it_0274 BY fnam low. + SORT it_0273 BY option fnam. + + "where 조건을 만들어야 하는 필드조건(들) + LOOP AT it_bpsel ASSIGNING WHERE sort = '0272'. + lb_first = 'X'. "첫번째 item으로 설정 + LOOP AT it_0274 ASSIGNING WHERE low = -fnam. + AT NEW fnam. + CLEAR : ls_where, lv_condition. + l_seq += 1. + lv_condition = | AND ( |. + ls_where-seq = l_seq. "SQL의 where조건의 순서 + ENDAT. + + LOOP AT it_0273 ASSIGNING WHERE fnam = -high. + IF lb_first = 'X'. + "첫번째 인 경우 + CASE -option. + WHEN 'BT'. + lv_condition = lv_condition && |t1~{ -fnam } BETWEEN '{ -low }' AND '{ -high }'|. + WHEN 'EQ'. + lv_condition = lv_condition && |t1~{ -fnam } = '{ -low }'|. + ENDCASE. + ELSE. + "2번째 이상인 경우 (OR 연산자 필요) + CASE -option. + WHEN 'BT'. + lv_condition = lv_condition && | OR t1~{ -fnam } BETWEEN '{ -low }' AND '{ -high }'|. + WHEN 'EQ'. + lv_condition = lv_condition && | OR t1~{ -fnam } = '{ -low }'|. + ENDCASE. + ENDIF. + + CLEAR lb_first. "이후에 들어오는 경우는 OR 연결로 처리할 후속 순번. + ENDLOOP. + + AT END OF fnam. + lv_condition = lv_condition && |)|. + + ls_where-condition = lv_condition. + APPEND ls_where TO lt_where. + ENDAT. + + ENDLOOP. + + ENDLOOP. + + + ENDCASE. + + " 최종 쿼리 정리 + lv_select = replace( val = lv_select sub = ',' with = '' occ = -1 ). + lv_group = replace( val = lv_group sub = ',' with = '' occ = -1 ). + + " 동적 SQL 실행 + generate_dynamic_new_sql( + EXPORTING + iv_select = lv_select + iv_from = lv_from + it_where = lt_where + iv_group = lv_group + IMPORTING + et_data = rt_data + ). + + " DIST_ID 처리 + CASE iv_type. + WHEN 'S'. + LOOP AT rt_data ASSIGNING FIELD-SYMBOL(). + -perio = working_info-perio. + -gjahr = working_info-perio(4). + -perde = working_info-perio+4(3). + -variant = working_info-variant. + + -dist_id = generate_dist_id( + is_data = + it_bpsel = it_bpsel + ). + INSERT VALUE #( + key_string = build_key_string( + is_data = + it_bpsel = it_bpsel + iv_type = 'S' + ) + dist_id = -dist_id + ) INTO TABLE mt_sender_keys. + ENDLOOP. + + WHEN 'R'. + LOOP AT rt_data ASSIGNING FIELD-SYMBOL(). + lv_seq = lv_seq + 1. + -perio = working_info-perio. + -gjahr = working_info-perio(4). + -perde = working_info-perio+4(3). + -variant = working_info-variant. + -seq = lv_seq. + DATA(lv_receiver_key) = build_key_string( + is_data = + it_bpsel = it_bpsel + iv_type = 'R' + ). + IF line_exists( mt_sender_keys[ key_string = lv_receiver_key ] ). + -dist_id = mt_sender_keys[ key_string = lv_receiver_key ]-dist_id. + ELSE. + -dist_id = '999999999'. + ENDIF. + ENDLOOP. + ENDCASE. + ENDMETHOD. + + + METHOD build_fieldlist. + " 필드리스트 생성 로직 + APPEND VALUE #( fieldname = 'VRGAR' ) TO ct_fieldlist. + APPEND VALUE #( fieldname = 'BELNR_SENDER' ) TO ct_fieldlist. + APPEND VALUE #( fieldname = 'POSNR_SENDER' ) TO ct_fieldlist. + LOOP AT it_catalog INTO DATA(ls_catalog). + APPEND VALUE #( fieldname = ls_catalog-fieldname ) TO ct_fieldlist. + ENDLOOP. +endmethod. + + + METHOD build_key_string. + LOOP AT CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( is_data ) )->components + ASSIGNING FIELD-SYMBOL(). + ASSIGN COMPONENT -name OF STRUCTURE is_data TO FIELD-SYMBOL(). + + CASE iv_type. + WHEN 'S'. " 센더: SORT=0270 + LOW=X (SUM 필드 제외) + READ TABLE it_bpsel TRANSPORTING NO FIELDS + WITH KEY fnam = -name + sort = '0270' + low = 'X'. + IF sy-subrc = 0 AND NOT -name CS 'SUM'. + rv_key = |{ rv_key }{ }|. + ENDIF. + + WHEN 'R'. " 리시버: ★★★ SENDER와 동일한 SORT=270 필드만 사용 ★★★ + READ TABLE it_bpsel TRANSPORTING NO FIELDS + WITH KEY fnam = -name + sort = '0270' " ← 201 제외 + low = 'X'. + IF sy-subrc = 0. + rv_key = |{ rv_key }{ }|. + ENDIF. + ENDCASE. + ENDLOOP. + ENDMETHOD. + + +METHOD constructor. + + DATA: lv_tabname TYPE tabname. + + " 환경정보에서 관리 테이블명 조회 + CALL FUNCTION 'ZTOPDOWN_ENV' + IMPORTING + tb_name = lv_tabname. + + " 관리 테이블 정보 로딩 + SELECT type, + tbname, + text + FROM (lv_tabname) + INTO CORRESPONDING FIELDS OF TABLE @gt_mng_table. + + LOOP AT gt_mng_table INTO DATA(ls_table). + CASE ls_table-type. + WHEN '1'. gv_manager = ls_table-tbname. + WHEN '2'. gv_variant = ls_table-tbname. + WHEN '3'. gv_sender = ls_table-tbname. + WHEN '4'. gv_receiver = ls_table-tbname. + WHEN '5'. gv_result = ls_table-tbname. + WHEN '6'. gv_target = ls_table-tbname. + WHEN '7'. gv_distinfo = ls_table-tbname. + WHEN '8'. gv_distrule = ls_table-tbname. + ENDCASE. + ENDLOOP. + + " 동적 테이블 구조 생성 및 인스턴스 할당 (RETURNING 사용) + manager_table = me->create_dynamic_table( gv_manager ). + variant_table = me->create_dynamic_table( gv_variant ). + sender_table = me->create_dynamic_table( gv_sender ). + receiver_table = me->create_dynamic_table( gv_receiver ). + result_table = me->create_dynamic_table( gv_result ). +* target_table = me->create_dynamic_table( gv_target ). " 필요시 활성화 + +ENDMETHOD. + + +METHOD create_dynamic_table. + DATA: lo_struct_desc TYPE REF TO cl_abap_structdescr, + lo_table_desc TYPE REF TO cl_abap_tabledescr. + + TRY. + lo_struct_desc ?= cl_abap_structdescr=>describe_by_name( iv_tabname ). + lo_table_desc = cl_abap_tabledescr=>create( + p_line_type = lo_struct_desc + p_table_kind = cl_abap_tabledescr=>tablekind_std + ). + CREATE DATA ro_table TYPE HANDLE lo_table_desc. + CATCH cx_sy_create_data_error INTO DATA(lx_error). + MESSAGE lx_error->get_text( ) TYPE 'E'. + ENDTRY. +ENDMETHOD. + + +METHOD delete_topdown_tb_data. + + DATA: lv_tabname TYPE tabname, + l_check TYPE c, + l_exist TYPE bapiret2. + + " 1. 필수 파라미터 체크 + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL OR type IS INITIAL. + gv_message = TEXT-012. + result = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + RETURN. + ENDIF. + + " 2. 삭제 대상 테이블 결정 + CASE type. +* WHEN '1'. "CBO테이블관리 + WHEN '2'. lv_tabname = gv_variant. + WHEN '3'. lv_tabname = gv_sender. + WHEN '4'. lv_tabname = gv_receiver. + WHEN '5'. lv_tabname = gv_result. + WHEN '6'. lv_tabname = gv_target. + WHEN '7'. lv_tabname = gv_distinfo. +* WHEN '8'. lv_tabname = gv_distrule. "cbo 조건 데이타 삭제 불가. 별도 관리화면에서... + WHEN OTHERS. + gv_message = TEXT-019. + result = VALUE #( type = 'E' id = 'FAIL' number = '019' message = gv_message ). + RETURN. + ENDCASE. + + " 3. 전표 발행 상태 체크 + SELECT SINGLE post INTO @l_check FROM (gv_variant) + WHERE perio = @perio AND variant = @variant. + + IF l_check = 'X'. + gv_message = TEXT-018. + result = VALUE #( type = 'E' id = 'FAIL' number = '018' message = gv_message ). + RETURN. + ENDIF. + + " 4. 데이터 존재 여부 확인 + CALL METHOD me->get_tb_data_exist_yn + EXPORTING + erkrs = erkrs + variant = variant + perio = perio + type = type + RECEIVING + result = l_exist. + + IF l_exist-type = 'E'. + gv_message = TEXT-007. + result = VALUE #( type = 'E' id = 'FAIL' number = '007' message = gv_message ). + RETURN. + ENDIF. + + " 5. 데이터 삭제 + IF type = '2' OR type = '3' OR type = '4' OR type = '5' OR type = '6'. + DELETE FROM (lv_tabname) + WHERE variant = @variant AND perio = @perio. + + ELSEIF type = '7' OR type = '8'. + DELETE FROM (lv_tabname) + WHERE erkrs = @erkrs AND variant = @variant AND perio = @perio. + + ENDIF. + + + IF sy-subrc <> 0. + ROLLBACK WORK. + gv_message = TEXT-017. + result = VALUE #( type = 'E' id = 'FAIL' number = '017' message = gv_message ). + RETURN. + ENDIF. + + " 6. 상태 플래그 초기화 + CASE type. + WHEN '3'. + UPDATE (gv_variant) + SET sender = '' + WHERE perio = @perio AND variant = @variant. + WHEN '4'. + UPDATE (gv_variant) + SET receiver = '' + WHERE perio = @perio AND variant = @variant. + WHEN '5'. + UPDATE (gv_variant) + SET proc_dist = '' + WHERE perio = @perio AND variant = @variant. + ENDCASE. + + IF sy-subrc <> 0. + ROLLBACK WORK. + gv_message = TEXT-017. + result = VALUE #( type = 'E' id = 'FAIL' number = '017' message = gv_message ). + RETURN. + ENDIF. + + COMMIT WORK. + + gv_message = TEXT-016. + result = VALUE #( type = 'S' id = 'SUCCESS' number = '016' message = gv_message ). + +ENDMETHOD. + + + METHOD execute_topdown_distribute. + TYPES : BEGIN OF ty_dist. + INCLUDE TYPE ty_receiver. + TYPES: srec_waers TYPE waers, + send_tot TYPE wzgxxx9, + rrec_waers TYPE waers, + skf_val TYPE wzgxxx9, + skf_sum TYPE wzgxxx9, + END OF ty_dist. + DATA : lt_data TYPE TABLE OF ty_dist. + + DATA: lt_source TYPE TABLE OF string, + lv_prog TYPE progname, + lv_sender_val TYPE fieldname, + lv_receiver_val TYPE fieldname. + + DATA : lt_field TYPE TABLE OF dfies. + + DATA : l_dist_value TYPE wzgxxx9, + l_dist_id_sum TYPE wzgxxx9, + l_dist_done_sum TYPE wzgxxx9, + l_diff_val TYPE wzgxxx9. + DATA : l_last_record_yn TYPE boe_bool. + DATA : lt_result TYPE tt_result, + ls_result TYPE ty_result. + + DATA : l_check TYPE c, + ans TYPE c LENGTH 8. + + " 1. 필수 파라미터 체크 + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL. + gv_message = TEXT-012. + result = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + RETURN. + ENDIF. + + " 2. 전표 발행 상태 체크 + SELECT SINGLE post INTO @l_check FROM (gv_variant) + WHERE perio = @perio AND variant = @variant. + + IF l_check = 'X'. + gv_message = TEXT-018. + result = VALUE #( type = 'E' id = 'FAIL' number = '018' message = gv_message ). + RETURN. + ENDIF. + + " 3. 이전 배부 수행 결과가 있을 경우, 삭제 후 재 처리 안내. + CLEAR : l_check. + SELECT SINGLE proc_dist INTO @l_check FROM (gv_variant) + WHERE perio = @perio AND variant = @variant. + + IF l_check = 'X'. + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + titlebar = 'Title POPUP_TO_CONFIRM' + text_question = TEXT-006 + text_button_1 = 'OK' + icon_button_1 = 'ICON_CHECKED' + text_button_2 = 'NO' + icon_button_2 = 'ICON_NO' + display_cancel_button = ' ' + popup_type = 'ICON_MESSAGE_ERROR' + IMPORTING + answer = ans. + + IF ans = 2. + RETURN. + ELSE. "이전 데이타 삭제. + CALL METHOD me->delete_topdown_tb_data + EXPORTING + erkrs = erkrs + variant = variant + perio = perio + type = '5' + RECEIVING + result = result. + + IF result-type = 'E'. + gv_message = TEXT-017. + result = VALUE #( type = 'E' id = 'FAIL' number = '017' message = gv_message ). + RETURN. + ENDIF. + ENDIF. + ENDIF. + + ASSIGN ls_result TO FIELD-SYMBOL(). + +* variant별로 실사용 하는 필드 카탈로그 정보 가져오기. + CALL METHOD me->get_field_catalog + EXPORTING + erkrs = erkrs + perio = perio + variant = variant + IMPORTING + fieldcatalog = lt_field + RECEIVING + result = result. + +* 카탈로그 중에서, 센더와 리시버의 값필드 확인 + LOOP AT lt_field INTO DATA(ls_field) WHERE inttype IS NOT INITIAL. + CASE ls_field-inttype. + WHEN 'T'. "리시버 값필드(배부 기준필드) + lv_receiver_val = ls_field-fieldname. + WHEN 'C'. "센더 값필드(배부 할 금액 필드) + lv_sender_val = ls_field-fieldname. + ENDCASE. + ENDLOOP. + + +* 배부 수행 데이타 생성. +* 다중 테이블 조인시 동적 쿼리 안되어..부득이 서브루틴풀로 구현. + APPEND `REPORT ZDYNAMIC_QUERY.` TO lt_source. + APPEND `FORM select_query CHANGING lt_data TYPE ANY TABLE.` TO lt_source. + APPEND | SELECT | TO lt_source. + + LOOP AT lt_field INTO DATA(ls_field_select) WHERE inttype IS INITIAL. + APPEND | q~{ ls_field_select-fieldname }, | TO lt_source. + ENDLOOP. + + APPEND | p~rec_waers as srec_waers, | TO lt_source. + APPEND | p~{ lv_sender_val } as send_tot, | TO lt_source. + APPEND | q~rec_waers as rrec_waers, | TO lt_source. + APPEND | q~{ lv_receiver_val } as skf_val, | TO lt_source. + APPEND | SUM( q~{ lv_receiver_val } ) OVER( PARTITION BY p~dist_id ) AS skf_sum | TO lt_source. + APPEND | FROM { gv_sender } AS p | TO lt_source. + APPEND | LEFT OUTER JOIN { gv_receiver } AS q | TO lt_source. + APPEND | ON p~perio = q~perio | TO lt_source. + APPEND | AND p~variant = q~variant | TO lt_source. + APPEND | AND p~dist_id = q~dist_id | TO lt_source. + APPEND | WHERE p~perio = '{ perio }' | TO lt_source. + APPEND | AND p~variant = '{ variant }' | TO lt_source. + APPEND | INTO CORRESPONDING FIELDS OF TABLE @lt_data. | TO lt_source. + APPEND `ENDFORM.` TO lt_source. + +* " 서브루틴 풀 생성 + GENERATE SUBROUTINE POOL lt_source NAME lv_prog. + IF sy-subrc = 0. + TRY. + " CHANGING 파라미터를 통해 데이터 전달 + PERFORM select_query IN PROGRAM (lv_prog) CHANGING lt_data. + MESSAGE |{ lines( lt_data ) }건 데이터 수신 완료| TYPE 'S'. + + CATCH cx_sy_dyn_call_error INTO DATA(lx_error). + MESSAGE |동적 호출 오류: { lx_error->get_text( ) }| TYPE 'E'. + CLEANUP. + " 예외 발생 시에도 서브루틴 풀 정리 + DELETE REPORT lv_prog. + ENDTRY. + + " 서브루틴 풀 삭제 (메모리에서 제거) + DELETE REPORT lv_prog. + IF sy-subrc = 0. + MESSAGE |동적 프로그램 { lv_prog } 삭제 완료| TYPE 'S'. + ELSE. + MESSAGE |동적 프로그램 { lv_prog } 삭제 실패 - 이미 삭제됨| TYPE 'S'. + ENDIF. + ELSE. + MESSAGE |서브루틴 풀 생성 실패: { sy-subrc }| TYPE 'E'. + ENDIF. + + " 메모리 정리 (혹시 모를 잔여 데이터 정리) + CLEAR: lt_source. + +* 배부 작업 시작 - Record별로 배부하기 용이하게 하기 위하여 위 서브루틴 풀 사용하여 쿼리 수행 +* 레코드 데이타 항목으로 배부 수행 가능. + + SORT lt_data BY dist_id seq. + LOOP AT lt_data INTO DATA(ls_data). + AT NEW dist_id. + CLEAR : l_dist_id_sum, l_dist_done_sum, l_diff_val, l_last_record_yn . + ENDAT. + + CLEAR : l_dist_value. + MOVE-CORRESPONDING ls_data TO . + l_dist_id_sum = ls_data-send_tot. + + "현재 리시버에 할당할 배부 금액 계산 + l_dist_value = ls_data-send_tot * ( ls_data-skf_val / ls_data-skf_sum ). + + "DIST_ID 별로 실제 배부된 금액 누적(추후 단수 차이 보정용) + l_dist_done_sum = l_dist_done_sum + l_dist_value. + + AT END OF dist_id. + "마지막 레코드인 경우 flag 체크 - 단수차이 조정 대상. + l_last_record_yn = 'X'. + ENDAT. + + IF l_last_record_yn = 'X'. + l_diff_val = l_dist_id_sum - l_dist_done_sum. + ENDIF. + + -rec_waers = ls_data-srec_waers. + +* 배부 결과 값은 센더의 값필드 항목으로 리시버 데이타에 저장. + ASSIGN COMPONENT lv_sender_val OF STRUCTURE TO FIELD-SYMBOL(). + = l_dist_value + l_diff_val. + + APPEND ls_result TO lt_result. + ENDLOOP. + + "결과 저장 + IF save_yn = 'X'. + INSERT (gv_result) FROM TABLE lt_result. + IF sy-subrc NE 0. + ROLLBACK WORK. + ENDIF. + + UPDATE (gv_variant) + SET proc_dist = 'X' + WHERE perio = perio + AND variant = variant. + IF sy-subrc NE 0. + ROLLBACK WORK. + ENDIF. + + COMMIT WORK. + ENDIF. + + rt_result[] = lt_result[]. + + + " 성공 메시지 추가 + gv_message = TEXT-016. + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '016' + message = gv_message ). + ENDMETHOD. + + + METHOD generate_dist_id. + DATA(lv_key) = build_key_string( + is_data = is_data + it_bpsel = it_bpsel + iv_type = 'S' " 센더용 키 생성 + ). + + " 기존 키 존재 시 재사용 + IF line_exists( mt_sender_keys[ key_string = lv_key ] ). + rv_dist = mt_sender_keys[ key_string = lv_key ]-dist_id. + ELSE. + ADD 1 TO gv_dist_counter. + rv_dist = gv_dist_counter. + ENDIF. + ENDMETHOD. + + + METHOD generate_dynamic_new_sql. + + DATA: lt_source TYPE TABLE OF string, + lv_prog TYPE progname, + lt_data TYPE tt_receiver. + + FIELD-SYMBOLS: TYPE any, + TYPE any. + + " 임시 프로그램 소스 생성 + APPEND `REPORT ZDYNAMIC_QUERY.` TO lt_source. + APPEND `FORM execute_query CHANGING ct_result TYPE ANY TABLE.` TO lt_source. + APPEND ` DATA: lt_data TYPE table of ZSTOP_RECEIVER.` TO lt_source. + APPEND | SELECT { iv_select }| TO lt_source. + APPEND | FROM { iv_from } AS t1| TO lt_source. + + + IF it_where[] IS NOT INITIAL. + APPEND | WHERE | TO lt_source. + + LOOP AT it_where ASSIGNING . + ASSIGN COMPONENT 'CONDITION' OF STRUCTURE TO . + IF sy-subrc = 0. + APPEND TO lt_source. + ENDIF. + ENDLOOP. + ENDIF. + + + IF iv_group IS NOT INITIAL. + APPEND | GROUP BY { iv_group }| TO lt_source. + ENDIF. + APPEND | INTO CORRESPONDING FIELDS OF TABLE @lt_data.| TO lt_source. +* APPEND | INTO TABLE @data(lt_data).| TO lt_source. + APPEND ` ct_result = lt_data.` TO lt_source. + APPEND `ENDFORM.` TO lt_source. + + " 서브루틴 풀 생성 + GENERATE SUBROUTINE POOL lt_source NAME lv_prog. + IF sy-subrc = 0. + TRY. + " CHANGING 파라미터를 통해 데이터 전달 + PERFORM execute_query IN PROGRAM (lv_prog) CHANGING lt_data. + + et_data = lt_data. + MESSAGE |{ lines( et_data ) }건 데이터 수신 완료| TYPE 'S'. + + CATCH cx_sy_dyn_call_error INTO DATA(lx_error). + MESSAGE |동적 호출 오류: { lx_error->get_text( ) }| TYPE 'E'. + + CLEANUP. + " 예외 발생 시에도 서브루틴 풀 정리 + DELETE REPORT lv_prog. + ENDTRY. + + " 서브루틴 풀 삭제 (메모리에서 제거) + DELETE REPORT lv_prog. + IF sy-subrc = 0. + MESSAGE |동적 프로그램 { lv_prog } 삭제 완료| TYPE 'S'. + ELSE. + MESSAGE |동적 프로그램 { lv_prog } 삭제 실패 - 이미 삭제됨| TYPE 'S'. + ENDIF. + + ELSE. + MESSAGE |서브루틴 풀 생성 실패: { sy-subrc }| TYPE 'E'. + ENDIF. + + " 메모리 정리 (혹시 모를 잔여 데이터 정리) + CLEAR: lt_data, lt_source. + + ENDMETHOD. + + + METHOD get_copa_doc_list. + DATA : l_check TYPE c. + + DATA: lt_source TYPE TABLE OF string, + lv_prog TYPE progname, + lv_sender_val TYPE fieldname, + lv_receiver_val TYPE fieldname. + + DATA : lt_data TYPE TABLE OF ty_target, + lt_field TYPE TABLE OF dfies. + + DATA : ls_doc TYPE ty_target. + + " 필수 파라미터 점검 + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL. + gv_message = TEXT-012. + result = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + RETURN. + ENDIF. + + "Source 테이블 정보 세팅 + me->get_tabname( EXPORTING erkrs = erkrs IMPORTING tabname = gv_source ). + + " 전표 발행 상태 체크 + SELECT SINGLE post INTO @l_check FROM (gv_variant) + WHERE perio = @perio AND variant = @variant. + + IF l_check NE 'X'. + gv_message = TEXT-023. + result = VALUE #( type = 'E' id = 'FAIL' number = '023' message = gv_message ). + RETURN. + ENDIF. + + +* variant별로 실사용 하는 필드 카탈로그 정보 가져오기. + me->get_field_catalog( EXPORTING erkrs = erkrs + perio = perio + variant = variant + IMPORTING fieldcatalog = lt_field + RECEIVING result = result ). + +* 카탈로그 중에서, 센더와 리시버의 값필드 확인 + LOOP AT lt_field INTO DATA(ls_field) WHERE inttype IS NOT INITIAL. + CASE ls_field-inttype. + WHEN 'T'. "리시버 값필드(배부 기준필드) + lv_receiver_val = ls_field-fieldname. + WHEN 'C'. "센더 값필드(배부 할 금액 필드) + lv_sender_val = ls_field-fieldname. + ENDCASE. + ENDLOOP. + +* 배부 수행 데이타 생성. +* 다중 테이블 조인시 동적 쿼리 안되어..부득이 서브루틴풀로 구현. + APPEND `REPORT ZDYNAMIC_QUERY.` TO lt_source. + APPEND `FORM select_query CHANGING lt_data TYPE ANY TABLE.` TO lt_source. + APPEND | SELECT | TO lt_source. + + APPEND | p~vrgar, | TO lt_source. + APPEND | p~belnr, | TO lt_source. + APPEND | q~belnr AS STO_BELNR, | TO lt_source. "원본전표에 역분개 전표 번호를 위치(standard 전표 상태와 반대로 표기) + APPEND | p~belnr_sender, | TO lt_source. + APPEND | p~posnr_sender, | TO lt_source. + + LOOP AT lt_field INTO DATA(ls_field_select) WHERE inttype IS INITIAL. + "CO-PA 전표 항목이 아닌 필드는 제외. + CHECK ls_field_select-fieldname NE 'VARIANT' AND ls_field_select-fieldname NE 'DIST_ID' AND ls_field_select-fieldname NE 'SEQ'. + APPEND | p~{ ls_field_select-fieldname }, | TO lt_source. + ENDLOOP. + + APPEND | p~{ lv_sender_val } | TO lt_source. + APPEND | FROM { gv_source } AS p | TO lt_source. + APPEND | LEFT OUTER JOIN { gv_source } AS q | TO lt_source. + APPEND | ON p~paledger = q~paledger | TO lt_source. + APPEND | AND p~perio = q~perio | TO lt_source. + APPEND | AND p~belnr = q~sto_belnr | TO lt_source. + APPEND | WHERE p~paledger = '01' | TO lt_source. + APPEND | AND p~perio = '{ perio }' | TO lt_source. + APPEND | AND p~sto_belnr = ' ' | TO lt_source. + APPEND | AND p~belnr_sender = '{ variant }' | TO lt_source. + + IF reverse = 'X'. + APPEND | AND ( q~belnr is null OR q~belnr is initial ) | TO lt_source. + ENDIF. + APPEND | INTO CORRESPONDING FIELDS OF TABLE @lt_data. | TO lt_source. + APPEND `ENDFORM.` TO lt_source. + + +* " 서브루틴 풀 생성 + GENERATE SUBROUTINE POOL lt_source NAME lv_prog. + IF sy-subrc = 0. + TRY. + PERFORM select_query IN PROGRAM (lv_prog) CHANGING lt_data. + MESSAGE |{ lines( lt_data ) }건 데이터 수신 완료| TYPE 'S'. + CATCH cx_sy_dyn_call_error INTO DATA(lx_error). + MESSAGE |동적 호출 오류: { lx_error->get_text( ) }| TYPE 'E'. + ENDTRY. + DELETE REPORT lv_prog. "무조건 정리 + ENDIF. + + " 메모리 정리 (혹시 모를 잔여 데이터 정리) + CLEAR: lt_source. + + "조회 전표가 없는 경우 + IF lt_data[] IS INITIAL. + gv_message = TEXT-024. + result = VALUE #( type = 'E' id = 'FAIL' number = '024' message = gv_message ). + RETURN. + ENDIF. + + LOOP AT lt_data INTO DATA(ls_data). + MOVE-CORRESPONDING ls_data TO ls_doc. + ls_doc-variant = ls_data-belnr_sender. + ls_doc-dist_id = ls_data-posnr_sender. + + APPEND ls_doc TO copa_doc_list. + ENDLOOP. + ENDMETHOD. + + + METHOD get_custom_table_info. + DATA : result TYPE bapiret2. + + IF erkrs IS INITIAL . + gv_message = TEXT-012. + MESSAGE gv_message TYPE 'E'. + ENDIF. + +* 현재 상태의 정보를 전역 변수에 업데이트. +* CALL METHOD me->get_package_info +* EXPORTING +* erkrs = erkrs +* RECEIVING +* result = result. + + sender = gv_sender. + receiver = gv_receiver. + ENDMETHOD. + + +METHOD get_field_catalog. + + CONSTANTS : lc_sender TYPE tabname VALUE 'SENDER', + lc_receiver TYPE tabname VALUE 'RECEIVER'. + + TYPES : BEGIN OF ty_bpsel, + sort TYPE rke_lfd4, + fnam TYPE fieldname, + low TYPE rke_low_l, + END OF ty_bpsel. + + DATA : lt_dfies TYPE STANDARD TABLE OF dfies, + lv_position TYPE tabfdpos VALUE '0000', + it_bpsel TYPE STANDARD TABLE OF ty_bpsel, + ls_fieldcatalog TYPE dfies. + + " 1. 필수 파라미터 체크 + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL. + gv_message = TEXT-012. + result = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + RETURN. + ENDIF. + + " 2. 조건정보 조회 + SELECT sort, fnam, low + FROM (gv_distinfo) + WHERE perio = @perio + AND variant = @variant + INTO TABLE @it_bpsel. + + IF it_bpsel IS INITIAL. + gv_message = TEXT-007. + result = VALUE #( type = 'E' id = 'FAIL' number = '007' message = gv_message ). + RETURN. + ENDIF. + + " 3. 조건별 필드 카탈로그 생성 (최신 구문 활용) + LOOP AT it_bpsel INTO DATA(ls_bpsel). + + IF ls_bpsel-sort = '0270' AND ls_bpsel-low = 'X'. + fieldcatalog = VALUE #( BASE fieldcatalog + ( fieldname = ls_bpsel-fnam tabname = lc_sender ) ). + ENDIF. + + IF ls_bpsel-sort = '0300' AND ls_bpsel-low = 'X'. + fieldcatalog = VALUE #( BASE fieldcatalog + ( fieldname = ls_bpsel-fnam tabname = lc_sender inttype = 'C' ) ). + ENDIF. + + IF ( ls_bpsel-sort = '0270' OR ls_bpsel-sort = '0201' ) AND ls_bpsel-low = 'X'. + fieldcatalog = VALUE #( BASE fieldcatalog + ( fieldname = ls_bpsel-fnam tabname = lc_receiver ) ). + ENDIF. + + IF ls_bpsel-sort = '0100' AND ls_bpsel-fnam = 'WKOFNAM'. + fieldcatalog = VALUE #( BASE fieldcatalog + ( fieldname = ls_bpsel-low tabname = lc_receiver inttype = 'T' ) ). + ENDIF. + + ENDLOOP. + + " 4. 추가 필수 필드 일괄 추가 (배열 LOOP 활용) + DATA lt_required_fields TYPE STANDARD TABLE OF fieldname WITH EMPTY KEY. + lt_required_fields = VALUE #( ( 'PERIO' ) ( 'GJAHR' ) ( 'PERDE' ) ( 'VARIANT' ) ( 'DIST_ID' ) ( 'SEQ' ) ( 'REC_WAERS' ) ). + + LOOP AT lt_required_fields INTO DATA(lv_field). + CLEAR ls_fieldcatalog. + ls_fieldcatalog-fieldname = lv_field. + ls_fieldcatalog-tabname = COND #( WHEN lv_field = 'SEQ' THEN lc_receiver ELSE lc_sender ). + APPEND ls_fieldcatalog TO fieldcatalog. + ENDLOOP. + + " 5. 중복 제거 및 정렬 + SORT fieldcatalog BY fieldname tabname DESCENDING. "센더/리시버 중복된 필드인 경우, sender(공통) 를 남기기 위해.. + DELETE ADJACENT DUPLICATES FROM fieldcatalog COMPARING fieldname INTTYPE. + + " 6. DB 테이블 기준 정렬 순서 재정의 + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = gv_receiver + TABLES + dfies_tab = lt_dfies + EXCEPTIONS + not_found = 1 + OTHERS = 2. + + IF sy-subrc = 0. + SORT lt_dfies BY position. + LOOP AT lt_dfies INTO DATA(ls_dfies). + READ TABLE fieldcatalog ASSIGNING FIELD-SYMBOL() WITH KEY fieldname = ls_dfies-fieldname. + IF sy-subrc = 0. + lv_position += 1. + -position = lv_position. + ENDIF. + ENDLOOP. + ENDIF. + + SORT fieldcatalog BY position. + + " 7. 성공 메시지 + gv_message = TEXT-016. + result = VALUE #( type = 'S' id = 'SUCCESS' number = '016' message = gv_message ). + +ENDMETHOD. + + + METHOD get_sender_receiver_data. + + DATA: ls_sender TYPE ty_sender, + lt_sender TYPE TABLE OF ty_sender, + lt_sender_buff TYPE TABLE OF ty_receiver, "동적쿼리 수행 구조체는 리시버 구조로 수행. + lt_receiver TYPE TABLE OF ty_receiver. + DATA : l_check TYPE bapiret2. + DATA : it_bpsel TYPE zcl_copa_topdown=>tt_bpsel. + + CLEAR: gv_dist_counter. + CALL METHOD me->set_source_info + EXPORTING + erkrs = erkrs + RECEIVING + result = result. + + " 공용 정보 세팅 + set_info( + perio = perio + variant = variant + ). + + "이전 처리 내역 확인 =================================================================== + CALL METHOD me->get_tb_data_exist_yn + EXPORTING + erkrs = erkrs + variant = variant + perio = perio + type = '3' "센더 테이블 + RECEIVING + result = l_check. + + IF l_check-type = 'S'. + " 센더 데이타가 이미 존재하는 경우. + " 실패 메시지 추가 + gv_message = TEXT-020. + result = VALUE #( type = 'E' id = 'FAIL' number = '020' message = gv_message ). + RETURN. + ENDIF. + + CALL METHOD me->get_tb_data_exist_yn + EXPORTING + erkrs = erkrs + variant = variant + perio = perio + type = '4' "리시버 테이블 + RECEIVING + result = l_check. + + IF l_check-type = 'S'. + " 리시버 데이타가 이미 존재하는 경우. + " 실패 메시지 추가 + gv_message = TEXT-020. + result = VALUE #( type = 'E' id = 'FAIL' number = '020' message = gv_message ). + RETURN. + ENDIF. + + " ======================================================================================== + + SELECT sort, + fnam, + sign, + optionn AS option, + low, + high + FROM (gv_distinfo) + WHERE perio = @perio + AND variant = @variant + INTO TABLE @it_bpsel. + + IF it_bpsel IS INITIAL. + gv_message = TEXT-007. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 센더 데이터 추출 및 DIST_ID 생성 + lt_sender_buff = build_dynamic_query( + iv_type = 'S' + it_bpsel = it_bpsel + ). + + LOOP AT lt_sender_buff INTO DATA(ls_buff). + MOVE-CORRESPONDING ls_buff TO ls_sender. + APPEND ls_sender TO lt_sender. + ENDLOOP. + + " 리시버 데이터 추출 및 DIST_ID 매핑 + lt_receiver = build_dynamic_query( + iv_type = 'R' + it_bpsel = it_bpsel + ). + + " 데이터 저장 + INSERT (gv_sender) FROM TABLE lt_sender. + IF sy-subrc NE 0. + ROLLBACK WORK. + RETURN. + ENDIF. + + INSERT (gv_receiver) FROM TABLE lt_receiver. + IF sy-subrc NE 0. + ROLLBACK WORK. + RETURN. + ENDIF. + + UPDATE (gv_variant) + SET sender = 'X' + receiver = 'X' + WHERE perio = perio + AND variant = variant. + IF sy-subrc NE 0. + ROLLBACK WORK. + ENDIF. + + COMMIT WORK. + " 성공 메시지 추가 + gv_message = TEXT-016. + result = VALUE #( type = 'S' id = 'SUCCESS' number = '016' message = gv_message ). + ENDMETHOD. + + + METHOD get_tabname. + CONCATENATE 'CE1' erkrs INTO tabname. + ENDMETHOD. + + + METHOD get_tb_data_exist_yn. + DATA : l_check TYPE c, + lv_tabname TYPE tabname. + + + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL OR type IS INITIAL. + " 실패 메시지 추가 + gv_message = TEXT-012. + result = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + RETURN. + ENDIF. + + CASE type. +* WHEN '1'. "CBO테이블관리 + WHEN '2'. "배부 기준 정보(월별) + lv_tabname = gv_variant. + WHEN '3'. "센더 데이타 + lv_tabname = gv_sender. + WHEN '4'. "배부 기준 데이타 + lv_tabname = gv_receiver. + WHEN '5'. "배부 결과 데이타 + lv_tabname = gv_result. + WHEN '6'. "전표 발행 대상 데이타 + lv_tabname = gv_target. + WHEN '7'. "배부 기준 세부 정보 테이블 + lv_tabname = gv_distinfo. + WHEN '8'. "배부 조건 Customizing + lv_tabname = gv_distrule. + WHEN OTHERS. + " 실패 메시지 추가 + gv_message = TEXT-019. + result = VALUE #( type = 'E' id = 'FAIL' number = '019' message = gv_message ). + RETURN. + ENDCASE. + + IF type = '2' OR type = '3' OR type = '4' OR type = '5' OR type = '6'. + SELECT SINGLE 'X' + INTO @l_check + FROM (lv_tabname) + WHERE variant = @variant + AND perio = @perio. + ELSEIF type = '7' OR type = '8'. + SELECT SINGLE 'X' + INTO @l_check + FROM (lv_tabname) + WHERE erkrs = @erkrs + AND variant = @variant + AND perio = @perio. + ENDIF. + + IF l_check = 'X'. + " 데이타가 존재함. + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '000' + message = '데이타 조회 완료' ). + ELSE. + " 데이타가 존재하지 않음. + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '000' + message = '데이타 없음' ). + + ENDIF. + + ENDMETHOD. + + + METHOD get_variant_info. + + DATA : lv_tabname TYPE tabname. + + CALL METHOD me->get_tabname + EXPORTING + erkrs = erkrs + IMPORTING + tabname = lv_tabname. + + SELECT SINGLE + applclass, + subclass, + tabname, + func, + variant + FROM covad + WHERE variant = @variant + AND tabname = @lv_tabname + INTO CORRESPONDING FIELDS OF @covad. + + + ENDMETHOD. + + + METHOD get_variant_list. + DATA : l_tabname TYPE string. + + IF erkrs IS INITIAL. + gv_message = TEXT-001. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + CONCATENATE 'CE1' erkrs INTO l_tabname. + + + SELECT 'KE28' AS report, + p~Variant AS variant, + q~vtext AS fieldname + FROM covad AS p + LEFT OUTER JOIN covat AS q + ON q~spras = @sy-langu + AND q~applclass = p~applclass + AND q~subclass = p~subclass + AND q~tabname = p~tabname + AND q~func = p~func + AND q~variant = p~variant + WHERE p~applclass = 'KE' + AND p~subclass = '02' + AND p~tabname = @l_tabname + AND p~func = 'GITD' + INTO CORRESPONDING FIELDS OF TABLE @result + . + + IF sy-subrc <> 0. + RAISE select_err. + ENDIF. + ENDMETHOD. + + + METHOD map_document_data. + DATA : l_currency_value TYPE bapicurr_d. + + + FIELD-SYMBOLS: TYPE any, TYPE any, TYPE any. + + + + + + LOOP AT it_source ASSIGNING . + ASSIGN COMPONENT 'REC_WAERS' OF STRUCTURE TO . + APPEND VALUE #( + record_id = cv_index + fieldname = 'VRGAR' + value = iv_vrgar + ) TO ct_inputdata. + + LOOP AT it_catalog INTO DATA(ls_catalog). + ASSIGN COMPONENT ls_catalog-fieldname OF STRUCTURE TO . + IF sy-subrc = 0. + IF ls_catalog-inttype IS NOT INITIAL. "값필드 인 경우. + " 통화키를 적용하여, 금액을 형변환 시켜야 함. + CLEAR : l_currency_value. + CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL' + EXPORTING + currency = + amount_internal = + IMPORTING + amount_external = l_currency_value. + + APPEND VALUE #( + record_id = cv_index + fieldname = ls_catalog-fieldname +* value = COND #( WHEN iv_reverse = abap_true THEN * -1 ELSE ) + value = COND #( WHEN iv_reverse = abap_true THEN l_currency_value * -1 ELSE l_currency_value ) + currency = + ) TO ct_inputdata. + ELSE. + CASE ls_catalog-fieldname. + WHEN 'VARIANT'. + APPEND VALUE #( + record_id = cv_index + fieldname = 'BELNR_SENDER' + value = + ) TO ct_inputdata. + WHEN 'DIST_ID'. + APPEND VALUE #( + record_id = cv_index + fieldname = 'POSNR_SENDER' + value = substring( val = off = strlen( ) - 6 len = 6 ) + ) TO ct_inputdata. + WHEN 'BUDAT'. + APPEND VALUE #( + record_id = cv_index + fieldname = 'BUDAT' + value = iv_budat + ) TO ct_inputdata. + WHEN OTHERS. + APPEND VALUE #( + record_id = cv_index + fieldname = ls_catalog-fieldname + value = + ) TO ct_inputdata. + ENDCASE. + ENDIF. + ENDIF. + ENDLOOP. + cv_index = cv_index + 1. + ENDLOOP. + + ENDMETHOD. + + +METHOD post_actual_topdown_documents. + + CONSTANTS: c_index_init TYPE rke_record_id VALUE '000001'. + + DATA: lt_inputdata TYPE TABLE OF bapi_copa_data, + lt_fieldlist TYPE TABLE OF bapi_copa_field, + ls_return TYPE bapiret2, + lv_index TYPE rke_record_id VALUE c_index_init. + + DATA: lt_catalog TYPE tt_dfies, + lr_sender TYPE REF TO data, + lr_result TYPE REF TO data. + + DATA: l_waers TYPE rke_rec_waers, + lv_exists TYPE abap_bool. + + DATA : lv_first_day TYPE sy-datum, "전기일자를 위한 기간/년도의 1일 + lv_budat TYPE sy-datum. "전기일자 + + FIELD-SYMBOLS: TYPE ANY TABLE, + TYPE any, + TYPE ANY TABLE, + TYPE any. + + " 필수 파라미터 점검 + IF erkrs IS INITIAL OR perio IS INITIAL OR variant IS INITIAL OR vrgar IS INITIAL. + gv_message = TEXT-012. + ls_return = VALUE #( type = 'E' id = 'FAIL' number = '012' message = gv_message ). + APPEND ls_return TO result. + RETURN. + ENDIF. + + " 레코드 유형 점검 (EXISTS 쿼리) + SELECT SINGLE @abap_true FROM tvga WHERE vrgar = @vrgar INTO @lv_exists. + IF lv_exists = abap_false. + gv_message = TEXT-021. + ls_return = VALUE #( type = 'E' id = 'FAIL' number = '021' message = gv_message ). + APPEND ls_return TO result. + RETURN. + ENDIF. + + " 전표 발행 상태 체크 + CLEAR : lv_exists. + SELECT SINGLE post FROM (gv_variant) + WHERE perio = @perio AND variant = @variant + INTO @lv_exists . + + IF sy-subrc NE 0. + gv_message = TEXT-007. + ls_return = VALUE #( type = 'E' id = 'FAIL' number = '007' message = gv_message ). + APPEND ls_return TO result. + RETURN. + ELSEIF lv_exists = 'X'. + gv_message = TEXT-018. + ls_return = VALUE #( type = 'E' id = 'FAIL' number = '018' message = gv_message ). + APPEND ls_return TO result. + RETURN. + ENDIF. + + " 1. 동적 테이블 생성 및 할당 + CREATE DATA lr_sender TYPE TABLE OF (gv_sender). + ASSIGN lr_sender->* TO . + CREATE DATA lr_result TYPE TABLE OF (gv_result). + ASSIGN lr_result->* TO . + + " 2. 필드 카탈로그 가져오기 + CALL METHOD me->get_field_catalog + EXPORTING + erkrs = erkrs + perio = perio + variant = variant + IMPORTING + fieldcatalog = lt_catalog + RECEIVING + result = ls_return. + + IF ls_return-type = 'E'. + APPEND ls_return TO result. + RETURN. + ENDIF. + + DELETE lt_catalog WHERE fieldname = 'SEQ' OR inttype = 'T'. + + "전표 발행을 위한 전기일 필드 추가. + APPEND VALUE #( tabname = 'RECEIVER' fieldname = 'BUDAT' position = '0000') TO lt_catalog. + + "전기일자는 기간/년월의 마지막 일자 + CONCATENATE perio(4) perio+5(2) '01' INTO lv_first_day. + + CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS' + EXPORTING + day_in = lv_first_day + IMPORTING + last_day_of_month = lv_budat. + IF sy-subrc <> 0. +* Implement suitable error handling here + ENDIF. + + " 3. 필드리스트 생성(PA 전표 생성 BAPI용 필드리스트) + CALL METHOD me->build_fieldlist + EXPORTING + it_catalog = lt_catalog + CHANGING + ct_fieldlist = lt_fieldlist. + + " 4. 센더 데이터 조회 + SELECT * + FROM (gv_sender) + WHERE variant = @variant + AND perio = @perio + INTO TABLE @. + + " 5. 입력 데이터 매핑 (private 메소드 활용) + CALL METHOD me->map_document_data + EXPORTING + it_source = + it_catalog = lt_catalog + iv_vrgar = vrgar + iv_reverse = abap_true + iv_budat = lv_budat + CHANGING + ct_inputdata = lt_inputdata + cv_index = lv_index. + + " 6. 리시버 데이터 조회 + SELECT * + FROM (gv_result) + WHERE variant = @variant + AND perio = @perio + INTO TABLE @. + + " 7. 리시버 입력 데이터 매핑 + CALL METHOD me->map_document_data + EXPORTING + it_source = + it_catalog = lt_catalog + iv_vrgar = vrgar + iv_reverse = abap_false + iv_budat = lv_budat + CHANGING + ct_inputdata = lt_inputdata + cv_index = lv_index. + + " 8. 불필요 필드 제거 + DELETE lt_fieldlist WHERE fieldname = 'VARIANT' OR fieldname = 'DIST_ID'. + + " 9. BAPI 호출 + CALL FUNCTION 'BAPI_COPAACTUALS_POSTCOSTDATA' + EXPORTING + operatingconcern = erkrs + testrun = testrun + TABLES + inputdata = lt_inputdata + fieldlist = lt_fieldlist + return = result. + + " 10. 결과 처리 + LOOP AT result INTO DATA(ls_bapi_result) WHERE type CA 'EA'. + WRITE: / '오류:', ls_bapi_result-message. + RETURN. + ENDLOOP. + + IF sy-subrc <> 0 AND testrun = space. + UPDATE (gv_variant) + SET post = 'X' + WHERE perio = @perio AND variant = @variant. + + CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' + EXPORTING + wait = 'X'. + ENDIF. + +ENDMETHOD. + + + METHOD set_audit_fields. + cs_data-cdate = sy-datum. + cs_data-ctime = sy-uzeit. + cs_data-cname = sy-uname. + cs_data-udate = sy-datum. + cs_data-utime = sy-uzeit. + cs_data-uname = sy-uname. + ENDMETHOD. + + + METHOD set_info. + working_info-perio = perio. + working_info-variant = variant. + ENDMETHOD. + + + METHOD set_source_info. + + IF erkrs IS INITIAL . + gv_message = TEXT-012. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + gv_source = |CE1{ erkrs }|. + + source_struct_desc ?= cl_abap_typedescr=>describe_by_name( gv_source ). + " 버퍼 테이블 생성 + DATA(lo_source_type) = cl_abap_tabledescr=>create( + p_line_type = source_struct_desc + p_table_kind = cl_abap_tabledescr=>tablekind_std + ). + CREATE DATA source_table TYPE HANDLE lo_source_type. + + + IF sy-subrc NE 0. + " 오류 메시지 추가 + gv_message = TEXT-022. + result = VALUE #( + type = 'E' + id = 'FAIL' + number = '022' + message = gv_message ). + RETURN. + ELSE. + " 성공 메시지 추가 + gv_message = TEXT-013. + result = VALUE #( + type = 'S' + id = 'SUCCESS' + number = '013' + message = gv_message ). + ENDIF. + + + + ENDMETHOD. + + +METHOD set_variant_desc. + + DATA: lt_bpsel TYPE kepp_t_sel1, + et_bpsel TYPE kepp_s_bpsel, + ls_distinfo TYPE ty_distinfo, + lt_distinfo TYPE TABLE OF ty_distinfo, + lt_distrule TYPE SORTED TABLE OF ty_distrule + WITH UNIQUE KEY erkrs applclass subclass tabname func variant sort fnam sign optionn low, + ls_covad TYPE covad, + lt_fnam TYPE kepp_t_fnam, + ans TYPE c LENGTH 8. + + " 1. 변형 정보 조회 + CALL METHOD me->get_variant_info + EXPORTING + erkrs = erkrs + variant = variant + IMPORTING + covad = ls_covad. + + IF ls_covad IS INITIAL. + gv_message = TEXT-003. + MESSAGE gv_message TYPE 'E'. + ENDIF. + + " 2. 표준 변형 세팅 정보(KE28) + CALL FUNCTION 'RKE_BP_VARIANT_READ_DIRECT' + EXPORTING + i_applclass = ls_covad-applclass + i_subclass = ls_covad-subclass + i_tabname = ls_covad-tabname + i_func = ls_covad-func + i_variant = variant + IMPORTING + es_bpsel = et_bpsel + TABLES + et_fnam = lt_fnam + EXCEPTIONS + not_found = 1 + OTHERS = 2. + IF sy-subrc <> 0. + " 적절한 에러 처리 필요 + RETURN. + ENDIF. + + lt_bpsel[] = et_bpsel-t_sel1[]. + + " 3. 등록된 CBO 조건 데이터 정보 (Standard 조건보다 우선) + SELECT * + FROM (gv_distrule) + WHERE erkrs = @erkrs + AND perfrom <= @perio + AND perto >= @perio + AND variant = @variant + INTO CORRESPONDING FIELDS OF TABLE @lt_distrule. + + " 4. 배부 기준 정보 중복 여부 확인 및 사용자 확인 + SELECT 1 + FROM (gv_distinfo) + WHERE erkrs = @erkrs + AND perio = @perio + AND variant = @variant + INTO TABLE @DATA(l_chk) + UP TO 1 ROWS. + + IF l_chk IS NOT INITIAL. + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + titlebar = 'Title POPUP_TO_CONFIRM' + text_question = TEXT-006 + text_button_1 = 'OK' + icon_button_1 = 'ICON_CHECKED' + text_button_2 = 'NO' + icon_button_2 = 'ICON_NO' + display_cancel_button = ' ' + popup_type = 'ICON_MESSAGE_ERROR' + IMPORTING + answer = ans. + + IF ans = 2. + RETURN. + ENDIF. + ENDIF. + + " 5. 배부 기준 정보 저장 (CBO 우선, 없으면 표준) + LOOP AT lt_bpsel INTO DATA(ls_data). + READ TABLE lt_distrule WITH KEY + erkrs = erkrs + applclass = ls_covad-applclass + subclass = ls_covad-subclass + tabname = ls_covad-tabname + func = ls_covad-func + variant = ls_covad-variant + sort = ls_data-sort + fnam = ls_data-fnam + TRANSPORTING NO FIELDS + BINARY SEARCH. + + IF sy-subrc = 0. + LOOP AT lt_distrule INTO DATA(ls_cbo_rule) WHERE erkrs = erkrs + AND applclass = ls_covad-applclass + AND subclass = ls_covad-subclass + AND tabname = ls_covad-tabname + AND func = ls_covad-func + AND variant = ls_covad-variant + AND sort = ls_data-sort + AND fnam = ls_data-fnam. + MOVE-CORRESPONDING ls_cbo_rule TO ls_distinfo. + me->set_audit_fields( CHANGING cs_data = ls_distinfo ). + APPEND ls_distinfo TO lt_distinfo. + ENDLOOP. + ELSE. + MOVE-CORRESPONDING ls_data TO ls_distinfo. + ls_distinfo-erkrs = erkrs. + ls_distinfo-perio = perio. + ls_distinfo-applclass = ls_covad-applclass. + ls_distinfo-subclass = ls_covad-subclass. + ls_distinfo-tabname = ls_covad-tabname. + ls_distinfo-func = ls_covad-func. + ls_distinfo-variant = ls_covad-variant. + ls_distinfo-optionn = ls_data-option. + + IF ls_distinfo-fnam EQ 'BPERIO' + OR ls_distinfo-fnam EQ 'REBPERIO' + OR ls_distinfo-fnam EQ 'REVPERIO' + OR ls_distinfo-fnam EQ 'VPERIO'. + ls_distinfo-low = perio. + ENDIF. + ENDIF. + + me->set_audit_fields( CHANGING cs_data = ls_distinfo ). + APPEND ls_distinfo TO lt_distinfo. + ENDLOOP. + + " 6. 기존 데이터 삭제 후 신규 데이터 저장 + DELETE FROM (gv_distinfo) WHERE erkrs = @erkrs + AND perio = @perio + AND variant = @variant. + + MODIFY (gv_distinfo) FROM TABLE lt_distinfo. + + " 7. 결과 처리 + IF sy-subrc = 0. + COMMIT WORK. + gv_message = TEXT-004. + MESSAGE gv_message TYPE 'S'. + ELSE. + ROLLBACK WORK. + gv_message = TEXT-005. + MESSAGE gv_message TYPE 'E'. + ENDIF. + +ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_copa_topdown.clas.xml b/src/zcl_copa_topdown.clas.xml new file mode 100644 index 0000000..fdba5b4 --- /dev/null +++ b/src/zcl_copa_topdown.clas.xml @@ -0,0 +1,757 @@ + + + + + + ZCL_COPA_TOPDOWN + 3 + 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. + 27 + + + I + 006 + 등록된 데이타가 존재합니다. 삭제 후 재 처리 하시겠습니까? + 66 + + + I + 007 + 데이타가 존재하지 않습니다. 확인 후 다시 처리 하십시요. + 64 + + + I + 008 + 클래스 환경 구성을 위한 Data Elements (Domain) 생성 오류 + 90 + + + I + 009 + 클래스 환경 구성을 위한 관리 테이블 생성 오류 + 52 + + + I + 010 + 클래스 환경 구성을 위한 함수 생성 오류 + 44 + + + I + 011 + 클래스 운영을 위한 환경 구성이 완료되었습니다. + 52 + + + I + 012 + 필수 Import 파라메타 값을 지정하여야 합니다. + 56 + + + I + 013 + 클래스 환경 구성 정보 추출 성공하였습니다. + 28 + + + 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 + 3 + 데이타 추출을 위한 쿼리 수행 + + + CONSTRUCTOR + 3 + CONSTRUCTOR + + + DELETE_TOPDOWN_TB_DATA + 3 + TYPE별(센더, 리시버, 결과, 전표발행) 테이블 데이타 삭제 + + + EXECUTE_TOPDOWN_DISTRIBUTE + 3 + 하향식 배부 실행(Templete) + + + GENERATE_DYNAMIC_NEW_SQL + 3 + 데이타 추출을 위한 쿼리 수행 + + + GET_COPA_DOC_LIST + 3 + CO-PA 전표 조회(배부 수행 결과 전표) + + + GET_CUSTOM_TABLE_INFO + 3 + 센더, 리시버 테이블 정보(사용 X) + + + GET_FIELD_CATALOG + 3 + Variant별 사용 Field-Catalog 정보 조회 + + + GET_SENDER_RECEIVER_DATA + 3 + 센더, 리시버 데이타 생성(Templete) + + + GET_TABNAME + 3 + TABNAME 조회 + + + GET_TB_DATA_EXIST_YN + 3 + 테이블 데이타 존재 여부 + + + GET_VARIANT_INFO + 3 + 변형 정보 조회 + + + GET_VARIANT_LIST + 3 + 하향식 배부 변형 리스트 조회 + + + GV_DISTINFO + 3 + 배부 기준 세부 정보 테이블 + + + GV_DISTRULE + 3 + 배부 조건 Customizing + + + GV_MANAGER + 3 + Package 전용 테이블 관리 테이블 명 + + + GV_RECEIVER + 3 + 리시버(배부기준) 테이블 명 + + + GV_RESULT + 3 + 배부 결과 테이블 명 + + + GV_SENDER + 3 + 센더 테이블 명 + + + GV_SOURCE + 3 + 경영단위 CE1 테이블 + + + GV_TARGET + 3 + 전표 발행 대상 테이블 명 + + + GV_VARIANT + 3 + 월별 배부 기준 정보 테이블 명 + + + MANAGER_STRUCT_DESC + 3 + 관리 테이블 구조 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + 3 + 배주 전표 전기 + + + RECEIVER_STRUCT_DESC + 3 + 리시버 테이블 구조 + + + RESULT_STRUCT_DESC + 3 + 결과 테이블 구조 + + + SENDER_STRUCT_DESC + 3 + 센더 테이블 구조 + + + SET_AUDIT_FIELDS + 3 + Data 생성자(수정자) 정보 + + + SET_INFO + 3 + 공용정보 지정 + + + SET_SOURCE_INFO + 3 + 소스 테이블 지정(CE1) + + + SET_VARIANT_DESC + 3 + 하향식 배부 변형 설정 값 저장 + + + SOURCE_STRUCT_DESC + 3 + 소스(CE1) 테이블 구조 + + + TARGET_STRUCT_DESC + 3 + 전표 발행 대상 + + + TT_SENDER + 3 + 센더 데이타(구조) + + + TY_DISTINFO + 3 + 배부 기준 세부 정보(구조) + + + TY_DISTRULE + 3 + 배부 조건 Customizing(구조) + + + TY_MNG_TABLE + 3 + 관리 테이블 정보 + + + TY_RECEIVER + 3 + 배부 기준 데이타(구조) + + + TY_RESULT + 3 + 배부 결과 데이타(구조) + + + TY_SENDER + 3 + 센더 데이타(구조) + + + TY_TARGET + 3 + 전표 발행 대상 데이타(구조) + + + TY_VARIANT + 3 + 배부 기준 정보(월별)(구조) + + + TY_WORKING_INFO + 3 + 클래스 메소드 수행을 위한 공용 정보 + + + VARIANT_STRUCT_DESC + 3 + 배부기준 테이블 구조 + + + WORKING_INFO + 3 + 클래스 메소드 수행을 위한 공용 정보 + + + + + BUILD_DYNAMIC_QUERY + RT_DATA + 3 + 배부 기준 데이타(구조) + + + CREATE_DYNAMIC_TABLE + IV_TABNAME + 3 + 테이블이름 + + + DELETE_TOPDOWN_TB_DATA + ERKRS + 3 + 경영 단위 + + + DELETE_TOPDOWN_TB_DATA + PERIO + 3 + 기간/연도 + + + DELETE_TOPDOWN_TB_DATA + RESULT + 3 + 리턴 매개변수 + + + DELETE_TOPDOWN_TB_DATA + TYPE + 3 + 유형 + + + DELETE_TOPDOWN_TB_DATA + VARIANT + 3 + 변형 + + + EXECUTE_TOPDOWN_DISTRIBUTE + ERKRS + 3 + 경영 단위 + + + EXECUTE_TOPDOWN_DISTRIBUTE + PERIO + 3 + 기간/연도 + + + EXECUTE_TOPDOWN_DISTRIBUTE + RESULT + 3 + 리턴 매개변수 + + + EXECUTE_TOPDOWN_DISTRIBUTE + RT_RESULT + 3 + 배부결과 데이타 + + + EXECUTE_TOPDOWN_DISTRIBUTE + SAVE_YN + 3 + 결과 저장(Y/N) + + + EXECUTE_TOPDOWN_DISTRIBUTE + VARIANT + 3 + 변형 + + + GENERATE_DIST_ID + RV_DIST + 3 + Record sequential number + + + GENERATE_DYNAMIC_NEW_SQL + ET_DATA + 3 + 배부 기준 데이타(구조) + + + GET_COPA_DOC_LIST + COPA_DOC_LIST + 3 + CO-PA전표 데이타(리스트) + + + GET_COPA_DOC_LIST + ERKRS + 3 + 경영 단위 + + + GET_COPA_DOC_LIST + PERIO + 3 + 기간/연도 + + + GET_COPA_DOC_LIST + RESULT + 3 + 리턴 매개변수 + + + GET_COPA_DOC_LIST + REVERSE + 3 + 지시자: 역분개전표 제외 + + + GET_COPA_DOC_LIST + VARIANT + 3 + 변형 + + + GET_CUSTOM_TABLE_INFO + ERKRS + 3 + 경영 단위 + + + GET_CUSTOM_TABLE_INFO + RECEIVER + 3 + 리시버 데이타 테이블 + + + GET_CUSTOM_TABLE_INFO + SENDER + 3 + 센더 데이타 테이블 + + + GET_FIELD_CATALOG + ERKRS + 3 + 경영 단위 + + + GET_FIELD_CATALOG + PERIO + 3 + 기간/연도 + + + GET_FIELD_CATALOG + RESULT + 3 + 리턴 매개변수 + + + GET_FIELD_CATALOG + VARIANT + 3 + 변형 + + + GET_SENDER_RECEIVER_DATA + ERKRS + 3 + 경영 단위 + + + GET_SENDER_RECEIVER_DATA + PERIO + 3 + 기간/연도 + + + GET_SENDER_RECEIVER_DATA + RESULT + 3 + 리턴 매개변수 + + + GET_SENDER_RECEIVER_DATA + VARIANT + 3 + 변형 + + + GET_TABNAME + ERKRS + 3 + 경영 단위 + + + GET_TABNAME + TABNAME + 3 + 테이블이름 + + + GET_TB_DATA_EXIST_YN + ERKRS + 3 + 경영 단위 + + + GET_TB_DATA_EXIST_YN + PERIO + 3 + 기간/연도 + + + GET_TB_DATA_EXIST_YN + RESULT + 3 + 리턴 매개변수 + + + GET_TB_DATA_EXIST_YN + TYPE + 3 + 유형 + + + GET_TB_DATA_EXIST_YN + VARIANT + 3 + 변형 + + + GET_VARIANT_INFO + COVAD + 3 + 변형범주 + + + GET_VARIANT_INFO + ERKRS + 3 + 경영 단위 + + + GET_VARIANT_INFO + VARIANT + 3 + 변형 + + + GET_VARIANT_LIST + ERKRS + 3 + 경영 단위 + + + GET_VARIANT_LIST + RESULT + 3 + 변형 리스트 + + + GET_VARIANT_LIST + SELECT_ERR + 3 + data select error + + + MAP_DOCUMENT_DATA + CT_INPUTDATA + 3 + BAPIs CO-PA: CO-PA 데이타 대체유형 + + + MAP_DOCUMENT_DATA + CV_INDEX + 3 + 데이타레코드번호 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + ERKRS + 3 + 경영 단위 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + PERIO + 3 + 기간/연도 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + RESULT + 3 + 리턴 매개변수 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + TESTRUN + 3 + 테스트 여부 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + VARIANT + 3 + 변형 + + + POST_ACTUAL_TOPDOWN_DOCUMENTS + VRGAR + 3 + 레코드 유형(전표 발행) + + + SET_AUDIT_FIELDS + CS_DATA + 3 + 배부 기준 세부 정보(구조) + + + SET_INFO + PERIO + 3 + 기간/연도 + + + SET_INFO + VARIANT + 3 + 변형 + + + SET_SOURCE_INFO + ERKRS + 3 + 경영 단위 + + + SET_SOURCE_INFO + RESULT + 3 + 리턴 매개변수 + + + SET_VARIANT_DESC + ERKRS + 3 + 경영 단위 + + + SET_VARIANT_DESC + PERIO + 3 + 기간/연도 + + + SET_VARIANT_DESC + VARIANT + 3 + 변형 + + + + + 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..57f4c48 --- /dev/null +++ b/src/zcl_copa_topdown_install.clas.xml @@ -0,0 +1,223 @@ + + + + + + ZCL_COPA_TOPDOWN_INSTALL + 3 + 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 하향식 배부 추가 기능을 지원하기 위한 환경 구축 작업을 수행합니다. + 124 + + + I + 018 + 이미 서비스를 사용중인 경우에는 다시 수행하지 마십시요. 재 수행시 심각한 문제가 발생할 수 있습니다. + 114 + + + + + CONSTRUCTOR + 3 + CONSTRUCTOR + + + CREATE_INIT_STRUCTURE + 3 + 2-1. 구조(Structure) 생성(MANDT포함) + + + CREATE_INIT_STRUCTURE_EX_MANDT + 3 + 2-1. 구조(Structure) 생성(MANDT제외) + + + CREATE_INIT_TABLE + 3 + 2. 패키지 운영 DB TABLE 생성 + + + GV_DISTINFO + 3 + 배부 기준 세부 정보 테이블 + + + GV_DISTRULE + 3 + 배부 조건 Customizing + + + GV_MANAGER + 3 + Package 전용 테이블 관리 테이블 명 + + + GV_RECEIVER + 3 + 리시버(배부기준) 테이블 명 + + + GV_RESULT + 3 + 배부 결과 테이블 명 + + + GV_SENDER + 3 + 센더 테이블 명 + + + GV_SOURCE + 3 + 경영단위 CE1 테이블 + + + GV_TARGET + 3 + 전표 발행 대상 테이블 명 + + + GV_VARIANT + 3 + 월별 배부 기준 정보 테이블 명 + + + START_PACKAGE_INSTALL + 3 + 1. 패키지 기본 환경 구축 + + + WORKING_INFO + 3 + 클래스 메소드 수행을 위한 공용 정보 + + + + + CREATE_INIT_DATA_TABLE + ERKRS + 3 + 경영 단위 + + + CREATE_INIT_STRUCTURE + ERKRS + 3 + 경영 단위 + + + CREATE_INIT_STRUCTURE_EX_MANDT + ERKRS + 3 + 경영 단위 + + + + + diff --git a/src/zcopatd0010.prog.abap b/src/zcopatd0010.prog.abap new file mode 100644 index 0000000..b364445 --- /dev/null +++ b/src/zcopatd0010.prog.abap @@ -0,0 +1,37 @@ +*&---------------------------------------------------------------------* +*& Report ZCOPATD0010 +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* + +INCLUDE zcopatd0010top . " Global Data + +INCLUDE zcopatd0010o01 . " PBO-Modules +INCLUDE zcopatd0010i01 . " PAI-Modules +INCLUDE zcopatd0010f01 . " FORM-Routines +INCLUDE zcopatdcommF01 . " 패키지 Form-Routines + + +*----------------------------------------------------------------------* +* INITIALIZATION * +*----------------------------------------------------------------------* +INITIALIZATION. + +*----------------------------------------------------------------------* +* AT SELECTION-SCREEN * +*----------------------------------------------------------------------* +AT SELECTION-SCREEN. + + +*----------------------------------------------------------------------* +* START-OF-SELECTION. +*----------------------------------------------------------------------* +START-OF-SELECTION. + PERFORM get_table_info. + PERFORM get_data. + +*----------------------------------------------------------------------* +* END-OF-SELECTION. +*----------------------------------------------------------------------* +END-OF-SELECTION. + CALL SCREEN 0100. diff --git a/src/zcopatd0010.prog.xml b/src/zcopatd0010.prog.xml new file mode 100644 index 0000000..d17b957 --- /dev/null +++ b/src/zcopatd0010.prog.xml @@ -0,0 +1,2913 @@ + + + + + + ZCOPATD0010 + 1 + K + 3 + X + X + + + +
+ ZCOPATD0010 + 0100 + 3 + Characteristics Screen (Selection Criteria) + N + 0100 + 200 + 255 + X +
+ + + SCREEN + SCREEN + + + TABLE_CTRL + TCTD_SK + SCREEN + 001 + 001 + 131 + 200 + X + X + X + X + ENTRY + X + X + X + NONE + NONE + 011 + + + + + SCREEN + SCREEN + OKCODE + OK_CODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + TABLE_CTRL + TCTD_SK + TEXT + CHAR_TYPE + Ty. + 001 + 001 + 003 + 004 + 001 + CHAR + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + CEPL4A-ARTFNAM + 001 + 002 + 015 + 008 + 001 + CHAR + X + 2 + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + CEPL4A-VRGARTX + 001 + 003 + 015 + 015 + 001 + TXT + CHAR + X + 2 + X + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + SELOPT + 옵션____ + 001 + 004 + 006 + 002 + 001 + CHAR + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + *CEPL4A-LOW + 특성_값_시작_______________ + 001 + 005 + 022 + 018 + 001 + CHAR + X + F + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + *CEPL4A-LOWTX + Text + 001 + 006 + 004 + 015 + 001 + TXT + CHAR + X + F + X + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + *CEPL4A-MHIGH + 특성_값_종료_________ + 001 + 007 + 016 + 018 + 001 + CHAR + X + F + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + *CEPL4A-MHIGHTX + Text + 001 + 008 + 004 + 015 + 001 + TXT + CHAR + X + F + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + MORE + 복합_선택:_소스_데이터________________ + 001 + 009 + 029 + 015 + 001 + CHAR + N + X + + + TABLE_CTRL + TCTD_SK + TEXT + SEL_REFDATA + 참조_기준_선택_____________ + 001 + 011 + 021 + 015 + 001 + CHAR + N + X + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-FIRSTCOLTXT + ____ + 001 + 001 + 004 + 004 + 001 + CHAR + X + X + X + X + N + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-ARTFNAM + ________ + 001 + 002 + 008 + 008 + 001 + CHAR + X + X + DFD + X + X + N + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-MERKTX + X + 001 + 003 + 020 + 015 + 001 + CHAR + X + X + X + X + N + + + TABLE_CTRL + TCTD_SK + PUSH_TMPL + CEPL4A-SECNDCOLTXT + ______________________ + X + 001 + 004 + 027 + 002 + 001 + OPTION + CHAR + X + X + X + N + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-LOW + X + 001 + 005 + 050 + 018 + 001 + MER + INP + CHAR + X + X + X + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-LOWTX + X + 001 + 006 + 020 + 015 + 001 + TXT + CHAR + X + X + X + X + N + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-MHIGH + X + 001 + 007 + 050 + 018 + 001 + MER + INP + CHAR + X + X + X + + + TABLE_CTRL + TCTD_SK + TEMPLATE + CEPL4A-MHIGHTX + X + 001 + 008 + 020 + 015 + 001 + TXT + CHAR + X + X + X + X + N + + + TABLE_CTRL + TCTD_SK + PUSH_TMPL + CEPL4A-ICON_MORE + 001 + 009 + 132 + 015 + 001 + M%%% + CHAR + X + X + X + N + + + TABLE_CTRL + TCTD_SK + TEXT + T1 + ______________ + ICON_SPACE + X + 001 + 010 + 019 + 002 + 001 + CHAR + N + + + TABLE_CTRL + TCTD_SK + PUSH_TMPL + CEPL4A-ICON_ADD_SLCT + 001 + 011 + 132 + 015 + 001 + R%%% + CHAR + X + X + N + + + + + + PROCESS BEFORE OUTPUT. + + + MODULE SET_STATUS. + + + MODULE INIT_201. + + + + LOOP AT TSCROL CURSOR G_INDEX_200. + + + MODULE LOOP_PBO_100. + + + ENDLOOP. + + + + ***** + + + + PROCESS AFTER INPUT. + + + + MODULE SET_DATAR. + + + + LOOP AT TSCROL. + + + CHAIN. + + + FIELD CEPL4A-LOW. + + + FIELD CEPL4A-MHIGH. + + + MODULE LOOP_PAI_201 ON CHAIN-REQUEST. + + + ENDCHAIN. + + + ENDLOOP. + + + + MODULE OK_CODE_201. + + + + PROCESS ON HELP-REQUEST. + + + + FIELD CEPL4A-ARTFNAM MODULE HELP_LOW_200. + + + FIELD CEPL4A-MERKTX MODULE HELP_LOW_200. + + + FIELD CEPL4A-LOW MODULE HELP_LOW_200. + + + FIELD CEPL4A-MHIGH MODULE HELP_LOW_200. + + + + PROCESS ON VALUE-REQUEST. + + + + FIELD CEPL4A-LOW MODULE VAL_LOW_201. + + + FIELD CEPL4A-MHIGH MODULE VAL_HIGH_201. + + +
+ +
+ ZCOPATD0010 + 1100 + 3 + "Additional Selection for Tracing Factor" Screen + N + 1100 + 200 + 186 +
+ + + SCREEN + SCREEN + + + TABLE_CTRL + TC_REF + SCREEN + 003 + 002 + 181 + 198 + X + X + X + X + ENTRY + X + X + X + MULTIPLE + NONE + X + 008 + + + + + SCREEN + SCREEN + TEXT + T3 + 센더_특성________ + 001 + 001 + 013 + 013 + 001 + CHAR + N + X + + + SCREEN + SCREEN + TEMPLATE + GS_1100-FIELDNAME_TXT + _________________________ + 001 + 019 + 025 + 025 + 001 + CHAR + X + X + X + N + X + + + SCREEN + SCREEN + TEMPLATE + GS_1100-ENTRY_COUNT + ________ + 001 + 050 + 008 + 008 + 001 + NUMC + X + X + N + X + + + SCREEN + SCREEN + TEXT + T1 + 엔트리_______ + 001 + 059 + 010 + 010 + 001 + CHAR + N + X + + + SCREEN + SCREEN + OKCODE + OK_CODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-SRC_LOW* + 소스데이터_____ + 001 + 001 + 010 + 020 + 001 + VAL + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-SRC_LOW_TXT* + 이름_________ + 001 + 002 + 011 + 020 + 001 + TXT + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEMPLATE + SRC_HIGH + ____________________ + 001 + 003 + 020 + 020 + 001 + CHAR + X + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-SRC_HIGH_TXT* + 이름_________ + 001 + 004 + 011 + 020 + 001 + TXT + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEXT + SELOPT + 옵션____ + 001 + 006 + 006 + 002 + 001 + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-REF_LOW* + 참조_데이터_시작________ + 001 + 007 + 017 + 020 + 001 + VAL + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-REF_LOW_TXT* + 이름_________ + 001 + 008 + 011 + 020 + 001 + TXT + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEMPLATE + REF_HIGH + ____________________ + 001 + 009 + 020 + 020 + 001 + CHAR + X + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-REF_HIGH_TXT* + 이름_________ + 001 + 010 + 011 + 020 + 001 + TXT + CHAR + N + X + + + TABLE_CTRL + TC_REF + TEXT + GT_REF-ICON_MORE* + 기타__ + 001 + 011 + 004 + 006 + 001 + CHAR + N + X + + + TABLE_CTRL + TC_REF + CHECK + GT_REF-MARK + 001 + 001 + 001 + 001 + CHAR + X + X + X + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-SRC_LOW + __________________________________________________ + X + 001 + 001 + 050 + 020 + 001 + VAL + SRC + CHAR + X + X + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-SRC_LOW_TXT + ____________________ + 001 + 002 + 020 + 020 + 001 + TXT + SRC + CHAR + X + X + X + N + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-SRC_HIGH + __________________________________________________ + X + 001 + 003 + 050 + 020 + 001 + VAL + TO + EXT + SRC + CHAR + X + X + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-SRC_HIGH_TXT + ____________________ + 001 + 004 + 020 + 020 + 001 + TXT + TO + EXT + SRC + CHAR + X + X + X + N + + + TABLE_CTRL + TC_REF + TEXT + R1 + _____________ + ICON_TREND_UNCHANGED + 참조를_사용하여_배부 + X + X + 001 + 005 + 031 + 003 + 001 + SRC + CHAR + N + + + TABLE_CTRL + TC_REF + PUSH_TMPL + GT_REF-ICON_SEL + __ + X + 001 + 006 + 007 + 002 + 001 + OPTION + CHAR + X + N + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-REF_LOW + __________________________________________________ + X + 001 + 007 + 050 + 020 + 001 + VAL + CHAR + X + X + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-REF_LOW_TXT + ____________________ + 001 + 008 + 020 + 020 + 001 + TXT + CHAR + X + X + X + N + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-REF_HIGH + __________________________________________________ + X + 001 + 009 + 050 + 020 + 001 + VAL + TO + CHAR + X + X + + + TABLE_CTRL + TC_REF + TEMPLATE + GT_REF-REF_HIGH_TXT + ____________________ + 001 + 010 + 020 + 020 + 001 + TXT + TO + CHAR + X + X + X + N + + + TABLE_CTRL + TC_REF + PUSH_TMPL + GT_REF-ICON_MORE + X + 001 + 011 + 004 + 006 + 001 + MOR + SRC + MORE + CHAR + X + N + + + + + + PROCESS BEFORE OUTPUT. + + + + MODULE INIT_1100. + + + + LOOP AT GT_REF WITH CONTROL TC_REF CURSOR TC_REF-CURRENT_LINE. + + + MODULE LOOP_PBO_1100. + + + ENDLOOP. + + + + ***** + + + + PROCESS AFTER INPUT. + + + + MODULE EXIT_1000 AT EXIT-COMMAND. + + + + LOOP AT GT_REF. + + + + CHAIN. + + + FIELD GT_REF-SRC_LOW. + + + FIELD GT_REF-SRC_HIGH. + + + FIELD GT_REF-REF_LOW. + + + FIELD GT_REF-REF_HIGH. + + + MODULE LOOP_PAI_1100. " ON CHAIN-REQUEST. + + + ENDCHAIN. + + + + module get_mark_from_1100. + + + ENDLOOP. + + + + MODULE OK_CODE_1100. + + + + PROCESS ON HELP-REQUEST. + + + + FIELD GT_REF-SRC_LOW MODULE HELP_MLOW. + + + FIELD GT_REF-SRC_HIGH MODULE HELP_MLOW. + + + FIELD GT_REF-REF_LOW MODULE HELP_MLOW. + + + FIELD GT_REF-REF_HIGH MODULE HELP_MLOW. + + + + PROCESS ON VALUE-REQUEST. + + + + FIELD GT_REF-SRC_LOW MODULE VAL_SRC_FROM. + + + FIELD GT_REF-SRC_HIGH MODULE VAL_SRC_TO. + + + FIELD GT_REF-REF_LOW MODULE VAL_REF_FROM. + + + FIELD GT_REF-REF_HIGH MODULE VAL_REF_TO. + + +
+
+ + + 000002 + 000010 + 000002 + + + + 1100 + D + 000001 + 000001 + 0001 + Sender Characteristics with Different Reference + + + GITD + D + 000002 + 000002 + 0001 + S + + + + + %BACK + 001 + S + 뒤로 + + + %EX + 001 + S + 종료 + X + + + ABBR + 001 + E + S + ICON_CANCEL + @0W@ + 취소 + A + + + ADDCURTP + 001 + S + ICON_SYSTEM_UNDO + @2W@ + 신규/제거된 통화 유형 추가 + 리스트에 없는 통화 유형이 추가됨 + + + AUFU + 001 + S + ICON_EXECUTE_OBJECT + @15@ + 실행 + U + + + BACK + 001 + E + S + 뒤로 + B + + + CHCK + 001 + S + ICON_CHECK + @38@ + 점검 + C + + + COPY + 001 + S + ICON_SYSTEM_COPY + @2U@ + 선택에서 소스 데이터 복사 + U + + + EEV4 + 001 + E + S + 삭제 + E + + + ENDE + 001 + E + S + 종료 + X + + + ENTE + 001 + S + ICON_OKAY + @0V@ + 계속 + + + EXIT + 001 + S + 종료 + X + + + FIND + 001 + S + ICON_SEARCH + @13@ + 찾기 + F + + + FND+ + 001 + S + ICON_SEARCH_NEXT + @4E@ + 다음 찾기 + + + GPAN + 001 + E + S + 기타 값 + A + + + INFO + 001 + S + ICON_INFORMATION + @0S@ + 개요 + + + MERV + 001 + S + 처리 지시 + E + + + MKAL + 001 + S + ICON_SELECT_ALL + @4B@ + 모두 선택 + + + MKBL + 001 + S + ICON_SELECT_BLOCK + @4C@ + 블록 선택 + + + MKFL + 001 + S + ICON_SELECT_WITH_CONDITION + @KG@ + 선택 + 엔트리 선택 + + + MKNO + 001 + S + ICON_DESELECT_ALL + @4D@ + 모두 선택 해제 + + + P+ + 001 + S + 다음 페이지 + N + + + P++ + 001 + S + 마지막 페이지 + L + + + P- + 001 + S + 이전 페이지 + V + + + P-- + 001 + S + 첫 페이지 + E + + + PG+ + 001 + S + ICON_NEXT_PAGE + @30@ + 다음 페이지 + + + PG++ + 001 + S + ICON_LAST_PAGE + @31@ + 마지막 페이지 + + + PG- + 001 + S + ICON_PREVIOUS_PAGE + @2Z@ + 이전 페이지 + + + PG-- + 001 + S + ICON_FIRST_PAGE + @2Y@ + 첫 페이지 + + + PLEB + 001 + S + 선택 기준 + S + + + PROP + 001 + S + ICON_PROPOSITION + @BE@ + 마스터 데이터로부터 소스 데이터 추가 + A + + + RADD + 001 + S + ICON_INSERT_MULTIPLE_LINES + @GU@ + 여러 행 추가 + W + + + RDEL + 001 + S + ICON_DELETE_ROW + @18@ + 행 삭제 + E + + + REFR + 001 + S + ICON_REFRESH + @42@ + 데이터 새로 고침 + + + RINS + 001 + S + ICON_INSERT_ROW + @17@ + 행 삽입 + N + + + SELA + 001 + S + ICON_SELECT_ALL + @4B@ + 모두 선택 + S + + + SELK + 001 + S + ICON_DESELECT_ALL + @4D@ + 선택 삭제 + E + + + SFVW + 001 + S + ICON_VIEW_SWITCH + @UQ@ + 뷰 전환 + + + SRT+ + 001 + S + ICON_SORT_UP + @3E@ + 정렬 + S + + + SRT- + 001 + S + ICON_SORT_DOWN + @3F@ + 내림차순 정렬 + O + + + TECH + 001 + S + ICON_TOOLS + @45@ + 기술적 설정 + T + + + UPLC + 001 + S + ICON_SYSTEM_PASTE + @2V@ + 클립보드에서 업로드 + + + UPLD + 001 + S + ICON_TEXT_ACT + @6X@ + 파일에서 업로드 + + + VADE + 001 + E + S + 삭제... + L + + + VAHO + 001 + E + S + ICON_VARIANTS + @0R@ + 가져오기... + 변형 가져오기... + G + + + VAHO + 002 + E + S + ICON_VARIANTS + @0R@ + 변형 가져오기... + 변형 가져오기 + H + + + VASI + 001 + S + 변형으로 저장... + S + + + VASI + 002 + S + ICON_SYSTEM_SAVE + @2L@ + 변형으로 저장... + Z + + + VATR + 001 + E + S + 전송... + T + + + VAWR + 001 + E + S + 조회... + D + + + VCAL + 001 + S + ICON_SET_B + @8A@ + 원가계산 기준 표시/숨기기 + 원가계산 기준 통화 유형 표시/숨기기 + + + VPSL + 001 + S + ICON_SET_A + @89@ + 조합 표시/숨기기 + 조합 통화 유형 표시/숨기기 + + + WERT + 001 + S + 값 필드 + A + + + XIVL + 001 + S + ICON_DISPLAY_MORE + @1E@ + "참조 데이터 끝" 설정/해제 + " + + + XTXT + 001 + S + ICON_WD_CAPTION + @SJ@ + 이름 설정/해제 + E + + + XWDT + 001 + S + ICON_WD_TABLE_COLUMN + @T5@ + 열 너비 최적화 + 열 너비 축소/확장 + O + + + + + 000001 + 01 + F + EXIT + 001 + + + 000002 + 01 + F + RDEL + 001 + + + 000002 + 02 + F + RINS + 001 + + + 000002 + 03 + S + + + 000002 + 04 + F + RADD + 001 + + + 000002 + 05 + S + + + 000002 + 06 + F + SRT+ + 001 + + + 000002 + 07 + F + SRT- + 001 + + + 000002 + 08 + S + + + 000002 + 09 + F + ABBR + 001 + + + 000003 + 01 + F + BACK + 001 + + + 000004 + 01 + F + XTXT + 001 + + + 000004 + 02 + F + XIVL + 001 + + + 000004 + 03 + S + + + 000004 + 04 + F + XWDT + 001 + + + 000005 + 01 + F + FIND + 001 + + + 000005 + 02 + S + + + 000005 + 03 + F + COPY + 001 + + + 000005 + 04 + F + PROP + 001 + + + 000005 + 05 + S + + + 000005 + 06 + F + TECH + 001 + + + 000006 + 01 + F + GPAN + 001 + + + 000006 + 02 + S + + + 000006 + 03 + F + CHCK + 001 + + + 000006 + 04 + F + AUFU + 001 + + + 000006 + 05 + S + + + 000006 + 06 + F + ENDE + 001 + + + 000007 + 01 + F + SELA + 001 + + + 000007 + 02 + F + SELK + 001 + + + 000007 + 03 + S + SELK + 01 + + + 000007 + 04 + F + ABBR + 001 + + + 000008 + 01 + F + PLEB + 001 + + + 000008 + 02 + F + MERV + 001 + + + 000008 + 03 + F + WERT + 001 + + + 000008 + 04 + S + WERT + 01 + + + 000008 + 05 + M + 000009 + + + 000008 + 06 + S + + + 000008 + 07 + F + BACK + 001 + + + 000009 + 01 + F + VAHO + 001 + + + 000009 + 02 + F + VAWR + 001 + + + 000009 + 03 + F + VADE + 001 + + + 000009 + 04 + F + VASI + 001 + + + 000009 + 05 + S + + + 000009 + 06 + F + VATR + 001 + + + 000010 + 01 + F + FIND + 001 + + + 000010 + 02 + S + + + 000010 + 03 + F + COPY + 001 + + + 000010 + 04 + F + PROP + 001 + + + 000010 + 05 + S + + + 000010 + 06 + F + TECH + 001 + + + + + 000001 + S + 엔트리 + N + + + 000002 + S + 편집 + E + + + 000003 + S + 이동 + G + + + 000004 + S + 보기 + V + + + 000005 + S + 추가 + A + + + 000006 + S + 배분 + D + + + 000007 + S + 편집 + E + + + 000008 + S + 이동 + G + Goto with Everything + + + 000009 + S + 변형 + V + + + 000010 + S + 추가 + A + + + + + 000001 + 01 + 000001 + + + 000001 + 02 + 000002 + + + 000001 + 03 + 000003 + + + 000001 + 04 + 000004 + + + 000001 + 05 + 000005 + + + 000002 + 01 + 000006 + + + 000002 + 02 + 000007 + + + 000002 + 03 + 000008 + + + 000002 + 04 + 000010 + + + + + 000001 + 0001 + 01 + 25 + + + 000001 + 0001 + 02 + 37 + + + 000001 + 0001 + 03 + 36 + + + 000001 + 0001 + 04 + 48 + + + 000001 + 0001 + 05 + S + + + 000001 + 0001 + 06 + 07 + + + 000001 + 0001 + 07 + 08 + + + 000001 + 0001 + 08 + 40 + + + 000001 + 0001 + 09 + S + + + 000001 + 0001 + 10 + 38 + + + 000001 + 0001 + 11 + 14 + + + 000001 + 0001 + 12 + S + + + 000001 + 0001 + 13 + 31 + + + 000001 + 0001 + 14 + S + + + 000001 + 0001 + 15 + 05 + + + 000001 + 0001 + 16 + 06 + + + 000001 + 0001 + 17 + S + + + 000001 + 0001 + 18 + 16 + + + 000001 + 0001 + 19 + 28 + + + 000001 + 0001 + 20 + 26 + + + 000001 + 0001 + 21 + 34 + + + 000001 + 0001 + 22 + 35 + + + 000001 + 0001 + 23 + 39 + + + 000002 + 0001 + 02 + 18 + + + 000002 + 0001 + 04 + S + + + 000002 + 0001 + 10 + S + + + 000002 + 0001 + 12 + 16 + + + + + 000001 + 00 + ENTE + 001 + + + 000001 + 03 + %BACK + 001 + + + 000001 + 05 + SRT+ + 001 + + + 000001 + 06 + SRT- + 001 + + + 000001 + 07 + MKAL + 001 + + + 000001 + 08 + MKBL + 001 + + + 000001 + 09 + MKFL + 001 + + + 000001 + 12 + ABBR + 001 + + + 000001 + 14 + RDEL + 001 + + + 000001 + 15 + %EX + 001 + + + 000001 + 16 + XTXT + 001 + + + 000001 + 18 + INFO + 001 + + + 000001 + 20 + REFR + 001 + + + 000001 + 21 + PG-- + 001 + + + 000001 + 22 + PG- + 001 + + + 000001 + 23 + PG+ + 001 + + + 000001 + 24 + PG++ + 001 + + + 000001 + 25 + COPY + 001 + + + 000001 + 26 + XWDT + 001 + + + 000001 + 28 + XIVL + 001 + + + 000001 + 31 + RADD + 001 + + + 000001 + 34 + VPSL + 001 + + + 000001 + 35 + VCAL + 001 + + + 000001 + 36 + UPLD + 001 + + + 000001 + 37 + PROP + 001 + + + 000001 + 38 + RINS + 001 + + + 000001 + 39 + ADDCURTP + 001 + + + 000001 + 40 + MKNO + 001 + + + 000001 + 48 + UPLC + 001 + + + 000001 + 71 + FIND + 001 + + + 000001 + 80 + P-- + 001 + + + 000001 + 81 + P- + 001 + + + 000001 + 82 + P+ + 001 + + + 000001 + 83 + P++ + 001 + + + 000001 + 84 + FND+ + 001 + + + 000002 + 03 + BACK + 001 + + + 000002 + 05 + PLEB + 001 + + + 000002 + 06 + MERV + 001 + + + 000002 + 07 + WERT + 001 + + + 000002 + 08 + AUFU + 001 + + + 000002 + 11 + VASI + 002 + + + 000002 + 12 + ABBR + 001 + + + 000002 + 13 + VAHO + 002 + + + 000002 + 14 + EEV4 + 001 + + + 000002 + 15 + ENDE + 001 + + + 000002 + 16 + XTXT + 001 + + + 000002 + 18 + CHCK + 001 + + + 000002 + 19 + SELA + 001 + + + 000002 + 20 + SELK + 001 + + + 000002 + 21 + P-- + 001 + + + 000002 + 22 + P- + 001 + + + 000002 + 23 + P+ + 001 + + + 000002 + 24 + P++ + 001 + + + 000002 + 27 + SFVW + 001 + + + 000002 + 36 + TECH + 001 + + + 000002 + 71 + FIND + 001 + + + 000002 + 80 + P-- + 001 + + + 000002 + 81 + P- + 001 + + + 000002 + 82 + P+ + 001 + + + 000002 + 83 + P++ + 001 + + + 000002 + 84 + FND+ + 001 + + + + + 1100 + %BACK + + + 1100 + %ENDE + + + 1100 + %EX + + + 1100 + ABBR + + + 1100 + ADDCURTP + + + 1100 + BACK + + + 1100 + COPY + + + 1100 + ENDE + + + 1100 + ENTE + + + 1100 + EXIT + + + 1100 + FIND + + + 1100 + FND+ + + + 1100 + INFO + + + 1100 + MKAL + + + 1100 + MKBL + + + 1100 + MKFL + + + 1100 + MKNO + + + 1100 + P+ + + + 1100 + P++ + + + 1100 + P- + + + 1100 + P-- + + + 1100 + PG+ + + + 1100 + PG++ + + + 1100 + PG- + + + 1100 + PG-- + + + 1100 + PROP + + + 1100 + RADD + + + 1100 + RDEL + + + 1100 + REFR + + + 1100 + RINS + + + 1100 + SRT+ + + + 1100 + SRT- + + + 1100 + UPLC + + + 1100 + UPLD + + + 1100 + VCAL + + + 1100 + VPSL + + + 1100 + XIVL + + + 1100 + XTXT + + + 1100 + XWDT + + + GITD + ABBR + + + GITD + AUFU + + + GITD + BACK + + + GITD + CHCK + + + GITD + EBAZ + + + GITD + ENDE + + + GITD + FIND + + + GITD + FND+ + + + GITD + GPAN + + + GITD + MERV + + + GITD + MORE + + + GITD + P+ + + + GITD + P++ + + + GITD + P- + + + GITD + P-- + + + GITD + PLEB + + + GITD + SELA + + + GITD + SELK + + + GITD + SFVW + + + GITD + TECH + + + GITD + VADE + + + GITD + VAHO + + + GITD + VASI + + + GITD + VATR + + + GITD + VAWR + + + GITD + WERT + + + GITD + XTXT + + + GITD + XWDT + + + + + A + 000001 + D + Sender Characteristics with Different Reference + + + P + 000001 + D + Sender Characteristics with Different Reference + + + B + 000001 + 0001 + D + Sender Characteristics with Different Reference + + + A + 000002 + D + A + + + P + 000002 + D + Automatic Planning + + + B + 000002 + 0001 + D + + + + + 105 + 하향식 배부: &1 + + + + + + I + 300 + 기능을 + 13 + + + I + 301 + 종료하겠습니까? + 18 + + + R + 하향식 배부 사이클 추가 기준 관리 + 19 + + +
+
+
diff --git a/src/zcopatd0010f01.prog.abap b/src/zcopatd0010f01.prog.abap new file mode 100644 index 0000000..7946d4d --- /dev/null +++ b/src/zcopatd0010f01.prog.abap @@ -0,0 +1,3479 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0010F01 +*&---------------------------------------------------------------------* +* +*&---------------------------------------------------------------------* +*& Form show_progress +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Form INIT_201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM init_201 . + DATA: + eline LIKE tkep8-eline. + + FIELD-SYMBOLS: TYPE cxtab_column. + + CLEAR g_exit. " is filled at EXIT command + +* prepare TSCROL for step loop + REFRESH tscrol. + LOOP AT g_planmerk. + IF g_planmerk-eline > eline. + eline = g_planmerk-eline. + ENDIF. + ENDLOOP. + IF NOT eline IS INITIAL. + g_tfill_200 = eline. + ELSE. + DESCRIBE TABLE g_planmerk LINES g_tfill_200. + ENDIF. + DO g_tfill_200 TIMES. + APPEND tscrol. + ENDDO. + +*** hide ref-selection in KE27 + IF g_func = kepp_c_funcl-gipb. + LOOP AT tctd_sk-cols ASSIGNING . + IF -screen-name = 'T1' OR + -screen-name = 'CEPL4A-ICON_ADD_SLCT' OR + -screen-name = 'CEPL4A-FIRSTCOLTXT'. + -invisible = 1. + ENDIF. + ENDLOOP. + ENDIF. + +*** show / hide text columns + LOOP AT tctd_sk-cols ASSIGNING . + IF -screen-group1 = 'TXT'. + IF gs_0201-show_text = true. + -invisible = 0. + ELSE. + -invisible = 1. + ENDIF. + ENDIF. + ENDLOOP. + +*** set search and found position + IF gs_0201-found_line IS NOT INITIAL. + tctd_sk-top_line = gs_0201-found_line. + ENDIF. + + IF gs_0201-found_col IS NOT INITIAL. + +** search corresponding column in TC + LOOP AT tctd_sk-cols ASSIGNING . + + TRY. + IF -screen-name = gs_0201-found_col OR + segment( val = -screen-name + index = 2 + sep = '-' ) = gs_0201-found_col. + SET CURSOR FIELD -screen-name LINE 1. + -invisible = 0. + EXIT. + ENDIF. + CATCH cx_root. + ENDTRY. + + ENDLOOP. + +* Behind "more" > open complex selection popup + IF gs_0201-found_col = 'ICON_MORE'. + + CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE' + EXPORTING + functioncode = 'M001' + EXCEPTIONS + OTHERS = 1. + + ENDIF. + + ENDIF. + + g_begin_200 = tctd_sk-top_line. + CLEAR gs_0201-found_col. + CLEAR gs_0201-found_line. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_datar +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM set_datar . + IF sy-datar EQ 'X'. + g_datar = 'X'. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form LOOP_PAI_201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM loop_pai_201 . + + FIELD-SYMBOLS:

. + + DATA: s_rkb1x LIKE rkb1x, + s_sel LIKE LINE OF gs_bpsel-t_sel1, + new_low LIKE cedst-low, + new_high LIKE cedst-high, + subrc LIKE sy-subrc, + tabix LIKE sy-tabix, + compname(36) TYPE c. + +*** get current screen line + LOOP AT g_planmerk WHERE eline = g_index_200. + EXIT. + ENDLOOP. + IF sy-subrc <> 0. + MESSAGE x385. + ENDIF. + +*** convert data from screen into internal format + +** don't store # (initial value on the screen) in table GS_BPSEL-T_SEL1 + IF cepl4a-low = '#'. + CLEAR cepl4a-low. + ENDIF. + +** CEPL4A-LOW external value -> LOW internal value + PERFORM evaluate_entry_input USING g_planmerk + new_low + cepl4a-low. + +** CEPL4A-HIGH external value -> HIGH internal value + IF cepl4a-mhigh IS NOT INITIAL. + PERFORM evaluate_entry_input USING g_planmerk + new_high + cepl4a-mhigh. + ENDIF. + + READ TABLE g_fieldtab WITH KEY fieldname = g_planmerk-fnam. + IF sy-subrc <> 0. + MESSAGE x899. + ENDIF. + +** validate single value (no intervall and no compound chars) + IF g_fieldtab-depfl IS INITIAL AND new_high IS INITIAL. + + CONCATENATE g_ce0name '-' g_planmerk-fnam INTO compname. + + ASSIGN new_low TO

CASTING TYPE (compname). + IF new_low <> '*'. + s_rkb1x-erkrs = g_erkrs. + s_rkb1x-kokrs = g_kokrs. + s_rkb1x-pa_type = g_pa_type. + + CALL FUNCTION 'RKD_SHORT_TEXT_SINGLE' + EXPORTING + applclass = kepp_c_applclass + characteristic = new_low + criteria = g_planmerk-fnam + i_rkb1x = s_rkb1x + mode = 'C' + EXCEPTIONS + key_not_found = 1. + + IF sy-subrc = 1. + MESSAGE e018 WITH g_fieldtab-scrtext_m new_low. + ENDIF. + ENDIF. + + ENDIF. + +** check for correct sequence of entered data + IF new_low > new_high AND new_high <> space AND g_fieldtab-datatype = 'CHAR'. + MESSAGE e650(db). + ENDIF. + +** check TKEBPFM and TKEBPSF + READ TABLE g_tkebpfm WITH KEY event = '20'. + IF sy-subrc = 0. + CALL FUNCTION g_tkebpfm-funcmo + EXPORTING + i_erkrs = g_erkrs + i_kokrs = g_kokrs + i_pa_type = g_pa_type + i_func = g_func + i_tkeb = gs_tkeb + i_low = new_low + i_fnam = g_planmerk-fnam + i_tdmerk = cepl4a-tdmerk + is_bpsel = gs_bpsel + TABLES + pt_fieldtab = g_fieldtab. + ENDIF. + + PERFORM check_activ USING 'LOW' + g_dnum + kepp_c_cepl4anam + subrc. + +*** delete all 'selection' entries (SORT = 200) + IF subrc <> 0. + DELETE gs_bpsel-t_sel1 + WHERE sort = kepp_c_sort_0200 AND + fnam = g_planmerk-fnam. + +*** update first 'selection' entry from GS_BPSEL-T_SEL1 + ELSE. + + READ TABLE gs_bpsel-t_sel1 INTO s_sel + WITH KEY sort = kepp_c_sort_0200 + fnam = g_planmerk-fnam. + tabix = sy-tabix. + +** no such entry so far > add new one + IF sy-subrc <> 0. + s_sel-sort = kepp_c_sort_0200. + s_sel-fnam = g_planmerk-fnam. + s_sel-sign = 'I'. + s_sel-low = new_low. + s_sel-high = new_high. + IF s_sel-low = '*'. + CLEAR s_sel-high. + ENDIF. + IF s_sel-high IS INITIAL. + s_sel-option = 'EQ'. + ELSE. + s_sel-option = 'BT'. + ENDIF. + APPEND s_sel TO gs_bpsel-t_sel1. + +** update existing entry + ELSE. + +* high-value changed > new option necessary + IF s_sel-high IS INITIAL AND new_high IS NOT INITIAL OR + new_high IS INITIAL AND s_sel-high IS NOT INITIAL. + CLEAR s_sel-option. + ENDIF. + + s_sel-low = new_low. + s_sel-high = new_high. + + IF s_sel-sign IS INITIAL. + s_sel-sign = 'I'. + ENDIF. + + IF s_sel-low = '*'. + CLEAR s_sel-high. + CLEAR s_sel-option. + ENDIF. + + IF s_sel-option IS INITIAL. + IF s_sel-high IS INITIAL. + s_sel-option = 'EQ'. + ELSE. + s_sel-option = 'BT'. + ENDIF. + ENDIF. + + MODIFY gs_bpsel-t_sel1 FROM s_sel + INDEX tabix. + ENDIF. + ENDIF. + + SORT gs_bpsel-t_sel1 STABLE BY sort fnam. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_activ +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_ +*& --> G_DNUM +*& --> KEPP_C_CEPL4ANAM +*& --> SUBRC +*&---------------------------------------------------------------------* +FORM check_activ USING VALUE(v_fnam) TYPE c + VALUE(v_dnum) LIKE tkebpsf-dnum + VALUE(v_tnam) LIKE tkebpsf-tnam + p_subrc LIKE sy-subrc. + +* Strukturen + DATA: tkebpsfkey TYPE kepp_tkebpsfkey. + + + tkebpsfkey-applclass = kepp_c_applclass. + tkebpsfkey-subclass = kepp_c_subclass. + tkebpsfkey-func = g_func. + tkebpsfkey-prog = kepp_c_prog. + tkebpsfkey-dnum = v_dnum. + tkebpsfkey-tnam = v_tnam. + tkebpsfkey-fnam = v_fnam. + READ TABLE g_tkebpsf WITH KEY tkebpsfkey BINARY SEARCH. + IF sy-subrc EQ 0 AND g_tkebpsf-active = '1'. + p_subrc = 0. + ELSE. + p_subrc = 4. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form EVALUATE_ENTRY_INPUT +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_PLANMERK +*& --> NEW_LOW +*& --> CEPL4A_LOW +*&---------------------------------------------------------------------* +FORM evaluate_entry_input USING VALUE(v_planmerk) STRUCTURE cepl5 + p_int LIKE gt_chartab-low + VALUE(v_ext) LIKE cepl4a-mlow. + FIELD-SYMBOLS:

. + DATA: l_compname(36) TYPE c. + +* Unicode improvement +* ASSIGN P_INT(V_PLANMERK-INTLEN) +* TO

TYPE V_PLANMERK-INTTYPE. + CONCATENATE g_ce0name '-' v_planmerk-fnam INTO l_compname. + ASSIGN p_int TO

CASTING TYPE (l_compname). + + IF v_ext EQ '*' OR v_ext EQ '#'. + p_int = v_ext. + ELSE. + IF v_ext IS INITIAL. + CLEAR

. + ELSE. + g_fieldtabkey-tabname = g_ce0name. + g_fieldtabkey-fieldname = v_planmerk-fnam. + READ TABLE g_fieldtab WITH KEY g_fieldtabkey. + IF sy-subrc GT 0. + MESSAGE x385. + ENDIF. + + CALL FUNCTION 'G_CONVERT_INPUT' + EXPORTING + converted_length = g_fieldtab-leng + convexit = g_fieldtab-convexit + datatype = g_fieldtab-datatype + input_length = g_fieldtab-outputlen + input_value = v_ext + IMPORTING + converted_value = p_int. + + ENDIF. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form HELP_LOW +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_BEGIN_200 +*&---------------------------------------------------------------------* +FORM help_low USING VALUE(i_begin) LIKE sy-tabix. + + DATA: cursor_line TYPE i, + h_index LIKE sy-tabix, + fieldname_for_help LIKE help_info-fieldname, + tabname_for_help LIKE help_info-tabname. + + + GET CURSOR LINE cursor_line. + h_index = i_begin + cursor_line - 1. + LOOP AT g_planmerk WHERE eline = h_index. + EXIT. + ENDLOOP. + fieldname_for_help = g_planmerk-fnam. + tabname_for_help = g_ce0name. + + CALL FUNCTION 'HELP_DOCU_SHOW_FOR_FIELD' + EXPORTING + fieldname = fieldname_for_help + tabname = tabname_for_help. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form VAL_LOW_201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_BEGIN_200 +*& --> KEPP_C_SORT_0200 +*&---------------------------------------------------------------------* +FORM val_low_201 USING VALUE(i_begin) LIKE sy-tabix + VALUE(i_sort) TYPE kepp_s_sort-sort. + + DATA: cursor_line TYPE i, + h_index LIKE sy-tabix, + subrc LIKE sy-subrc, + display, + more. + + GET CURSOR LINE cursor_line. + h_index = i_begin + cursor_line - 1. + LOOP AT g_planmerk WHERE eline = h_index. + EXIT. + ENDLOOP. + IF sy-subrc NE 0. + MESSAGE x385(kg). + ENDIF. + + CLEAR display. + +* get 'ready for input' status from variant + PERFORM check_input USING i_sort g_planmerk-fnam subrc. + IF subrc NE 0. + display = 'X'. + ENDIF. + +* check attributes from G_PLANMERK + IF g_planmerk-status EQ '3'. + display = 'X'. + ENDIF. + +* display mode if complex selection is available + IF i_sort = kepp_c_sort_0200. + PERFORM check_complex_sel USING kepp_c_sort_0200 + g_planmerk-fnam + more. + IF more EQ 'X'. +* DISPLAY = 'X'. + ENDIF. + ENDIF. + +* call popup F4 help + PERFORM val_criteria_value USING cepl4a-low + g_planmerk + display + cursor_line + 'CEPL4A-LOWTX'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form LOOP_PBO_100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM loop_pbo_100 . + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + field_is_active LIKE sy-subrc, + icon TYPE icon_d, + more, + addselref, + chartype. + +*** check characteristic active for this function + g_loopc_200 = sy-loopc. + LOOP AT g_planmerk WHERE eline = g_index_200. + EXIT. + ENDLOOP. + field_is_active = sy-subrc. + +*** check if complex selection is available + PERFORM check_complex_sel + USING + kepp_c_sort_0200 + g_planmerk-fnam + more. + +*** check if additional selection for reference base is available + PERFORM check_sel_for_ref + USING + g_planmerk-fnam + CHANGING + addselref. + +*** adjust screen fields + LOOP AT SCREEN. + + IF screen-group2 = 'INP'. + screen-length = g_planmerk-outputlen. + +** set input attributes (from characteristic groups) + CASE g_planmerk-status. + WHEN 1. " Kann-Eingabe + WHEN 2. " Muss-Eingabe + screen-required = 1. + WHEN 3. " keine Eingabe + screen-input = 0. + ENDCASE. + + ENDIF. + +** disable characteristics not active for this function + IF screen-group1 = 'MER' AND field_is_active <> 0. + screen-active = 0. + ENDIF. + +** disable characteristics protected by variant or set as +** 'distribution level' + IF screen-name = 'CEPL4A-LOW' + OR screen-name = 'CEPL4A-MHIGH' + OR screen-name = 'CEPL4A-ICON_MORE' + OR screen-name = 'CEPL4A-SECNDCOLTXT'. + + READ TABLE gt_fnam WITH KEY sort = kepp_c_sort_0200 + fnam = g_planmerk-fnam. + IF sy-subrc = 0 AND gt_fnam-fieldprot = true. + screen-input = 0. + ENDIF. + + READ TABLE gs_bpsel-t_sel1 INTO s_sel1 + WITH KEY sort = kepp_c_sort_0201 + fnam = g_planmerk-fnam. + IF sy-subrc = 0 AND s_sel1-low = 'X'. " distribution level + screen-input = 0. + ENDIF. + ENDIF. + + MODIFY SCREEN. + + ENDLOOP. " loop at screen + +*** set the icon for 'complex selection' + IF more = true. + CALL FUNCTION 'ICON_CREATE' + EXPORTING + name = 'ICON_DISPLAY_MORE' + IMPORTING + result = cepl4a-icon_more. + ELSE. + CALL FUNCTION 'ICON_CREATE' + EXPORTING + name = 'ICON_ENTER_MORE' + IMPORTING + result = cepl4a-icon_more. + ENDIF. + +*** set the icon for 'additional selection reference base' + IF addselref = true. + CALL FUNCTION 'ICON_CREATE' + EXPORTING + name = 'ICON_DISPLAY_MORE' + IMPORTING + result = cepl4a-icon_add_slct. + ELSE. + CALL FUNCTION 'ICON_CREATE' + EXPORTING + name = 'ICON_ENTER_MORE' + IMPORTING + result = cepl4a-icon_add_slct. + ENDIF. + + CHECK field_is_active = 0. + + +*** fill screen fields of CEPL4A + CLEAR cepl4a-lowtx. + CLEAR cepl4a-mhightx. + +** set the icon for char classification + PERFORM get_char_type USING g_planmerk-fnam + CHANGING chartype. + CASE chartype. + WHEN kepp_c_chartype-dis. + cepl4a-firstcoltxt = icon_wd_controller. + WHEN kepp_c_chartype-ret. + cepl4a-firstcoltxt = icon_mass_change. + WHEN kepp_c_chartype-sum. + cepl4a-firstcoltxt = icon_negative. + ENDCASE. + +** get field name & long text from field catalogue + g_fieldtabkey-tabname = g_ce0name. + g_fieldtabkey-fieldname = g_planmerk-fnam. + READ TABLE g_fieldtab WITH KEY g_fieldtabkey. + IF sy-subrc <> 0. + MESSAGE x385. + ENDIF. + cepl4a-artfnam = g_planmerk-fnam. + cepl4a-merktx = g_fieldtab-scrtext_m. + +** get first selection entry for this fieldname + CLEAR cepl4a-lowtx. + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0200 + AND fnam = g_planmerk-fnam. + EXIT. + ENDLOOP. + + IF sy-subrc = 0. +** convert to output format & get texts + IF NOT s_sel1-low IS INITIAL. + PERFORM evaluate_entry_output + USING + g_planmerk + s_sel1-low + cepl4a-low + cepl4a-lowtx. + ENDIF. + IF NOT s_sel1-high IS INITIAL. + PERFORM evaluate_entry_output + USING + g_planmerk + s_sel1-high + cepl4a-mhigh + cepl4a-mhightx. + ENDIF. + ELSE. + CLEAR cepl4a-low. + CLEAR cepl4a-mhigh. + ENDIF. + + IF cepl4a-low = space + AND cepl4a-mhigh = space. +* use # as representation of initial value on the screen + cepl4a-low = '#'. + ENDIF. + +** set the appropriate "select option" icon + IF s_sel1-low = '*' AND s_sel1-high IS INITIAL. + cepl4a-secndcoltxt = icon_selection. + ELSE. + CALL FUNCTION 'RKE_TD_SELOPT' + EXPORTING + i_sign = s_sel1-sign + i_option = s_sel1-option + i_display = ' ' + IMPORTING + e_icon = icon. + cepl4a-secndcoltxt = icon. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form CHECK_COMPLEX_SEL +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> KEPP_C_SORT_0200 +*& --> G_PLANMERK_FNAM +*& --> MORE +*&---------------------------------------------------------------------* +FORM check_complex_sel USING VALUE(v_sort) LIKE kpp1lf-lfdnr + VALUE(v_fnam) LIKE cepl5-fnam + p_more TYPE c. + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + count TYPE i. + + CLEAR count. + CLEAR p_more. + + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = v_sort + AND fnam = v_fnam. + ADD 1 TO count. + ENDLOOP. + + IF count > 1. + p_more = 'X'. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_sel_for_ref +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_PLANMERK_FNAM +*& <-- ADDSELREF +*&---------------------------------------------------------------------* +FORM check_sel_for_ref USING p_fnam + CHANGING p_addselref. + + DATA: ls_sel TYPE kepp_s_sel1. + + READ TABLE gs_bpsel-t_sel1 WITH KEY sort = kepp_c_sort_assgn_ref + fnam = p_fnam + INTO ls_sel. + IF sy-subrc EQ 0. + p_addselref = true. + ELSE. + p_addselref = false. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form get_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM get_data . + CREATE OBJECT g_topdown. + + DATA : ls_covad TYPE covad. + + " 1. 변형 정보 조회 +* SELECT SINGLE +* applclass, +* subclass, +* tabname, +* func, +* variant +* FROM covad +* WHERE variant = @p_varint +* AND tabname = 'CE11000' +* INTO CORRESPONDING FIELDS OF @ls_covad. + + " 2. 표준 변형 세팅 정보(KE28) +* CALL FUNCTION 'RKE_BP_VARIANT_READ_DIRECT' +* EXPORTING +* i_applclass = ls_covad-applclass +* i_subclass = ls_covad-subclass +* i_tabname = ls_covad-tabname +* i_func = ls_covad-func +* i_variant = 'PA001' +* IMPORTING +* es_bpsel = gs_bpsel +* TABLES +* et_fnam = gt_fnam +* EXCEPTIONS +* not_found = 1 +* OTHERS = 2. + + + DATA : lt_bpsel TYPE TABLE OF ty_distinfo, + t_sel1 TYPE kepp_s_sel1. + + SELECT sort, fnam, sign, optionn, low, high, lowtx, hightx + FROM (gv_distinfo) + WHERE erkrs = @p_erkrs + AND perio = @p_perio + AND variant = @p_varint + INTO CORRESPONDING FIELDS OF TABLE @lt_bpsel. + + IF lt_bpsel[] IS INITIAL. + MESSAGE s006(ztopdown). + RETURN. + ENDIF. + + LOOP AT lt_bpsel INTO DATA(ls_val). + t_sel1-sort = ls_val-sort. + t_sel1-fnam = ls_val-fnam. + t_sel1-sign = ls_val-sign. + t_sel1-option = ls_val-optionn. + t_sel1-low = ls_val-low. + t_sel1-high = ls_val-high. + t_sel1-lowtx = ls_val-lowtx. + t_sel1-hightx = ls_val-hightx. + + APPEND t_sel1 TO gs_bpsel-t_sel1. + ENDLOOP. + + +* TYPES: BEGIN OF KEPP_S_SEL1, + + + + CALL FUNCTION 'RKE_FILL_PLANMERK' + EXPORTING + erkrs = '1000' + pa_type = '1' + TABLES + planmerk = g_planmerk. + + PERFORM set_eline_default. + + + CALL FUNCTION 'RKE_FILL_PLANWERTGP' + EXPORTING + erkrs = '1000' + pa_type = '1' + TABLES + planwertgp = g_planwert. + + +* costing based = call classic function module + CALL FUNCTION 'RKE_FILL_FIELD_TABLE' + EXPORTING + erkrs = G_erkrs + tabname = g_ce0name + pa_type = if_fco_copa_type_of_pa_c=>gc_costing_based + TABLES + fieldtab = g_fieldtab + et_dependencies = g_ftab_dep. + + SELECT * FROM tkebpsf INTO TABLE g_tkebpsf + WHERE applclass EQ kepp_c_applclass AND + subclass EQ kepp_c_subclass AND + func EQ g_func. + SORT g_tkebpsf. +* SELECT * FROM tkebpfm INTO TABLE g_tkebpfm +* WHERE applclass EQ kepp_c_applclass AND +* subclass EQ kepp_c_subclass AND +* func EQ g_func. +* SELECT SINGLE * FROM tkebpfl INTO g_tkebpfl +* WHERE applclass EQ kepp_c_applclass AND +* subclass EQ kepp_c_subclass AND +* func EQ g_func. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form get_char_type +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_PLANMERK_FNAM +*& <-- CHARTYPE +*&---------------------------------------------------------------------* +FORM get_char_type USING p_fnam + CHANGING p_chartype. + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1. + +* check for 'distribution level' char + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0201 + AND fnam = p_fnam. + EXIT. + ENDLOOP. + IF sy-subrc = 0 AND s_sel1-low = true. + p_chartype = kepp_c_chartype-dis. + RETURN. + ENDIF. + +* check for 'retain' char + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_uebe + AND fnam = p_fnam. + EXIT. + ENDLOOP. + IF sy-subrc = 0 AND s_sel1-low = true. + p_chartype = kepp_c_chartype-ret. + RETURN. + ENDIF. + +* check for 'summarize' char + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_verd + AND fnam = p_fnam. + EXIT. + ENDLOOP. + IF sy-subrc = 0 AND s_sel1-low = true. + p_chartype = kepp_c_chartype-sum. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form SET_ELINE_DEFAULT +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM set_eline_default . + LOOP AT g_planmerk. + g_planmerk-eline = sy-tabix. + g_planmerk-status = '1'. "kann + MODIFY g_planmerk. + ENDLOOP. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form evaluate_entry_output +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_PLANMERK +*& --> S_SEL1_LOW +*& --> CEPL4A_LOW +*& --> CEPL4A_LOWTX +*&---------------------------------------------------------------------* +FORM evaluate_entry_output USING VALUE(v_planmerk) STRUCTURE cepl5 + VALUE(v_int) LIKE gt_chartab-low + p_ext LIKE cepl4a-mlow + p_text LIKE cepl4a-mlowtx. + + FIELD-SYMBOLS:

. + DATA: l_compname(36) TYPE c. + + + g_fieldtabkey-tabname = g_ce0name. + g_fieldtabkey-fieldname = v_planmerk-fnam. + READ TABLE g_fieldtab WITH KEY g_fieldtabkey. + IF sy-subrc GT 0. + MESSAGE x385. + ENDIF. + CLEAR p_text. + IF v_int EQ '*'. + p_ext = v_int. + ELSE. + IF v_int EQ '#'. + p_ext = v_int. + PERFORM read_text USING kepp_c_sort_0200 v_planmerk-fnam v_int + p_text. + ELSE. +* Unicode improvement +* ASSIGN V_INT(V_PLANMERK-INTLEN) +* TO

TYPE V_PLANMERK-INTTYPE. + CONCATENATE g_ce0name '-' v_planmerk-fnam INTO l_compname. + ASSIGN v_int TO

CASTING TYPE (l_compname). + IF

IS INITIAL. + CLEAR p_ext. + ELSE. + + CALL FUNCTION 'G_CONVERT_OUTPUT' + EXPORTING + convexit = g_fieldtab-convexit + datatype = g_fieldtab-datatype + length_to_convert = g_fieldtab-leng + output_length = g_fieldtab-outputlen + value_to_convert =

+ IMPORTING + output_value = p_ext. + + PERFORM read_text USING kepp_c_sort_0200 v_planmerk-fnam v_int + p_text. + ENDIF. + ENDIF. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form read_text +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> KEPP_C_SORT_0200 +*& --> V_PLANMERK_FNAM +*& --> V_INT +*& --> P_TEXT +*&---------------------------------------------------------------------* +FORM read_text USING VALUE(i_sort) TYPE kepp_s_fnam-sort + VALUE(i_fnam) TYPE kepp_s_fnam-fnam + VALUE(i_int) TYPE kepp_s_sel1-low + e_textm TYPE c. + + FIELD-SYMBOLS:

. + + DATA: lth_dd07v LIKE dd07v OCCURS 0 WITH HEADER LINE. + + DATA: s_rkb1x LIKE rkb1x. + + DATA: prpfl LIKE cepl4b-prpfl, + pfitx LIKE t440p-pfitx, + fnam LIKE dd03p-fieldname, + vtl LIKE cepl4b-vtl, + reval LIKE cepl4b-reval, + l_compname(38) TYPE c, + value LIKE i_int, + l_qschem LIKE tkequs1t-qschem, + l_type LIKE tkepszk-type, + l_plsz LIKE tkepszk-plsz, + l_text LIKE tkepszkt-text, + lv_choice TYPE flag. + +* Logpoint for SFIN Unified Journal Entry -> For account-based top-down-distribution +* enable reading the text for WOGBTR in the reference value or quantity fields by +* adding a new choice "Z" + LOG-POINT ID fins_udoc. + + CLEAR e_textm. + IF i_sort EQ kepp_c_sort_0001. +* Globale Daten + CASE i_fnam. + WHEN 'KOKRS'. + PERFORM get_text USING 'KOKRS' i_int e_textm. + ENDCASE. + ELSEIF i_sort EQ kepp_c_sort_0200 OR i_sort EQ kepp_c_sort_erse. +* Merkmalsbild + s_rkb1x-erkrs = g_erkrs. + s_rkb1x-kokrs = g_kokrs. + s_rkb1x-pa_type = g_pa_type. + + IF NOT i_int EQ '*'. + READ TABLE g_fieldtab WITH KEY fieldname = i_fnam. + IF sy-subrc = 0. + +* Klammerung mit Kokrs zulässig + value = i_int. + IF g_fieldtab-depfl IS NOT INITIAL. + READ TABLE g_ftab_dep TRANSPORTING NO FIELDS + WITH KEY fieldname = i_fnam dpfie = 'KOKRS'. + CHECK sy-subrc = 0. + value = |{ g_kokrs }{ value }|. + ENDIF. + + CONCATENATE g_ce0name '-' i_fnam INTO l_compname. + ASSIGN i_int TO

CASTING TYPE (l_compname). + IF NOT

IS INITIAL. + + CALL FUNCTION 'RKD_SHORT_TEXT_SINGLE' + EXPORTING + applclass = kepp_c_applclass + characteristic = value + criteria = i_fnam + i_rkb1x = s_rkb1x + mode = 'T' + IMPORTING + characteristic_text = e_textm + EXCEPTIONS + criteria_not_found = 1 + key_not_found = 2 + table_not_found = 3 + OTHERS = 4. + + ENDIF. + ENDIF. + ENDIF. + ELSEIF i_sort EQ kepp_c_sort_0100. +* Einstiegsbild + CASE i_fnam. + WHEN 'VERSI'. + PERFORM get_text USING 'VERSI' i_int e_textm. + WHEN 'VRGAR'. + PERFORM get_text USING 'VRGAR' i_int e_textm. + WHEN 'REVERSI'. + PERFORM get_text USING 'VERSI' i_int e_textm. + WHEN 'REVRGAR'. + PERFORM get_text USING 'VRGAR' i_int e_textm. + WHEN 'ARTFNAM'. + fnam = i_int. + PERFORM get_fnam_text USING 'A' + fnam + e_textm. + WHEN 'MNGFNAM'. + fnam = i_int. + PERFORM get_fnam_text USING 'Q' + fnam + e_textm. + WHEN 'WKOFNAM'. + CLEAR lv_choice. + IF g_pa_type = if_fco_copa_pa_type_c=>gc_account_based. + lv_choice = if_fco_copa_types=>gc_choice_z. + ELSE. + lv_choice = if_fco_copa_types=>gc_choice_v. + ENDIF. + fnam = i_int. + PERFORM get_fnam_text USING lv_choice + fnam + e_textm. + WHEN 'PRPFL'. + prpfl = i_int. + + CALL FUNCTION 'RKE_PRPFL_CHECK' + EXPORTING + prpfl = prpfl + IMPORTING + pfitx = pfitx. + + e_textm = pfitx. + WHEN 'VTL'. + vtl = i_int. + SELECT SINGLE * FROM t821t WHERE langu = sy-langu + AND spred = vtl. + IF sy-subrc EQ 0. + e_textm = t821t-txt. + ENDIF. + WHEN 'REVAL'. + reval = i_int. + SELECT SINGLE * FROM tkepc WHERE applclass = kepp_c_applclass + AND subclass = kepp_c_subclass + AND tabname = g_ce1name + AND reval = reval + AND langu = sy-langu. + IF sy-subrc EQ 0. + e_textm = tkepc-txt. + ENDIF. + WHEN 'TDVERF'. + + CALL FUNCTION 'DD_DOMVALUES_GET' + EXPORTING + domname = 'CEPLTDVERF' + text = 'X' + TABLES + dd07v_tab = lth_dd07v + EXCEPTIONS + wrong_textflag = 1 + OTHERS = 2. + + READ TABLE lth_dd07v WITH KEY domvalue_l = i_int. + IF sy-subrc EQ 0. + e_textm = lth_dd07v-ddtext. + ENDIF. + WHEN 'QSCHEM'. + l_qschem = i_int. + SELECT SINGLE * FROM tkequs1t + WHERE applclass = kepp_c_applclass + AND subclass = kepp_c_subclass + AND tabname = g_ce1name + AND qschem = l_qschem + AND langu = sy-langu. + + IF sy-subrc EQ 0. + e_textm = tkequs1t-text. + ENDIF. + WHEN 'REVERSI2'. + PERFORM get_text USING 'VERSI' i_int e_textm. + WHEN 'REVRGAR2'. + PERFORM get_text USING 'VRGAR' i_int e_textm. + WHEN 'EXITNR' OR 'EXITNR2'. + SELECT SINGLE * FROM tkeplexitt + WHERE applclass = kepp_c_applclass + AND subclass = kepp_c_subclass + AND tabname = g_tabname + AND exitnr = i_int + AND langu = sy-langu. + + IF sy-subrc EQ 0. + e_textm = tkeplexitt-text. + ENDIF. + WHEN 'PRPFL_PLSZ' OR 'VTL_PLSZ' OR 'REVAL_PLSZ' OR 'TREVAL_PLSZ'. + CASE i_fnam. + WHEN 'PRPFL_PLSZ'. + l_type = g_c_forec. + WHEN 'VTL_PLSZ'. + l_type = g_c_distri. + WHEN 'REVAL_PLSZ'. + l_type = g_c_reval. + WHEN 'TREVAL_PLSZ'. + l_type = g_c_treval. + ENDCASE. + + l_plsz = i_int. + + CALL FUNCTION 'RKE_ACCESS_KEY_CHECK' + EXPORTING + i_applclass = kepp_c_applclass + i_subclass = kepp_c_subclass + i_tabname = g_tabname + i_type = l_type + i_plsz = l_plsz + IMPORTING + e_text = l_text + EXCEPTIONS + invalid_value = 1 + OTHERS = 2. + + IF sy-subrc EQ 0. + e_textm = l_text. + ENDIF. + WHEN 'TREVAL'. + SELECT SINGLE * FROM tkeptrt + WHERE applclass = kepp_c_applclass + AND subclass = kepp_c_subclass + AND tabname = g_tabname + AND treval = i_int + AND langu = sy-langu. + IF sy-subrc EQ 0. + e_textm = tkeptrt-text. + ENDIF. + ENDCASE. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form GET_FNAM_TEXT +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_ +*& --> FNAM +*& --> E_TEXTM +*&---------------------------------------------------------------------* +FORM get_fnam_text USING VALUE(v_auswahl) LIKE cepl5-flag + VALUE(v_fnam) LIKE dd03p-fieldname + p_fnamtx LIKE dd03p-scrtext_m. + + CALL FUNCTION 'RKE_FIELDNAMES_CHECK' + EXPORTING + auswahl = v_auswahl + erkrs = g_erkrs + fnam = v_fnam + pa_type = g_pa_type + IMPORTING + scrtext_m = p_fnamtx + EXCEPTIONS + inv_auswahl = 1 + no_erkrs_defined = 2 + OTHERS = 3. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form GET_TEXT +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_ +*& --> I_INT +*& --> E_TEXTM +*&---------------------------------------------------------------------* +FORM get_text USING VALUE(v_fnam) LIKE dd03p-fieldname + VALUE(v_characteristic) LIKE rkb1t-character + p_text TYPE c. + + DATA: i_rkb1x LIKE rkb1x. + + + i_rkb1x-erkrs = g_erkrs. + i_rkb1x-kokrs = g_kokrs. + i_rkb1x-pa_type = g_pa_type. + + IF v_characteristic IS INITIAL. + CLEAR p_text. + ELSE. + CALL FUNCTION 'RKD_SHORT_TEXT_SINGLE' + EXPORTING + applclass = kepp_c_applclass +* BUFFER = 'X' + characteristic = v_characteristic + criteria = v_fnam +* DATE = '00000000' +* DATE_TO = '00000000' + i_rkb1x = i_rkb1x +* LANGUAGE_KEY = SY-LANGU + mode = 'T' +* TABLE = ' ' + IMPORTING + characteristic_text_l = p_text + EXCEPTIONS + criteria_not_found = 1 + key_not_found = 2 + table_not_found = 3 + OTHERS = 4. + + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_input +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> I_SORT +*& --> G_PLANMERK_FNAM +*& --> SUBRC +*&---------------------------------------------------------------------* +FORM check_input USING VALUE(i_sort) LIKE gt_fnam-sort + VALUE(i_fnam) LIKE gt_fnam-fnam + e_subrc LIKE sy-subrc. + + CLEAR e_subrc. + READ TABLE gt_fnam WITH KEY sort = i_sort + fnam = i_fnam. + IF sy-subrc NE 0. + MESSAGE x899. + ENDIF. + IF gt_fnam-fieldprot EQ 'X'. + e_subrc = 4. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form val_criteria_value +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> CEPL4A_LOW +*& --> G_PLANMERK +*& --> DISPLAY +*& --> CURSOR_LINE +*& --> P_ +*&---------------------------------------------------------------------* +FORM val_criteria_value USING p_val LIKE cepl4a-mlow + VALUE(v_planmerk) STRUCTURE cepl5 + VALUE(v_display) TYPE c + VALUE(v_cursor_line) TYPE i + VALUE(v_dynpfield) + LIKE dynpread-fieldname. + + DATA: i_rkb1x LIKE rkb1x. + + DATA: valtx LIKE cepl4a-mlowtx. + +* F4 aufrufen. Selektierter Wert kommt in P_VAL in der externen +* Darstellung zurück + i_rkb1x-erkrs = g_erkrs. + i_rkb1x-pa_type = g_pa_type. + i_rkb1x-kokrs = g_kokrs. + + CALL FUNCTION 'RKE_HELP_VALUES_GET' + EXPORTING + i_fieldname = v_planmerk-fnam + i_display = v_display + is_rkb1x = i_rkb1x + IMPORTING + e_selected_value = p_val. + + IF NOT p_val IS INITIAL. +* Text lesen und Textfeld auf dem Dynpro updaten. + PERFORM read_text USING kepp_c_sort_0200 v_planmerk-fnam p_val + valtx. + + PERFORM dynp_values_update USING v_dynpfield + v_cursor_line valtx. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form dynp_values_update +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> V_DYNPFIELD +*& --> V_CURSOR_LINE +*& --> VALTX +*&---------------------------------------------------------------------* +FORM dynp_values_update USING + VALUE(v_dynpfield) LIKE dynpread-fieldname + VALUE(v_stepl) LIKE sy-stepl + VALUE(v_text) TYPE c. + + DATA: dynpfields LIKE dynpread OCCURS 1 WITH HEADER LINE. + + REFRESH dynpfields. + CLEAR dynpfields. + dynpfields-fieldname = v_dynpfield. + dynpfields-stepl = v_stepl. + dynpfields-fieldvalue = v_text. + APPEND dynpfields. + + CALL FUNCTION 'DYNP_VALUES_UPDATE' + EXPORTING + dyname = 'SAPLKEPP' + dynumb = sy-dynnr + TABLES + dynpfields = dynpfields. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form val_high_201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> G_BEGIN_200 +*& --> KEPP_C_SORT_0200 +*&---------------------------------------------------------------------* +FORM val_high_201 USING VALUE(i_begin) LIKE sy-tabix + VALUE(i_sort) TYPE kepp_s_sort-sort. + + DATA: cursor_line TYPE i, + h_index LIKE sy-tabix, + subrc LIKE sy-subrc, + display, + more. + + GET CURSOR LINE cursor_line. + h_index = i_begin + cursor_line - 1. + LOOP AT g_planmerk WHERE eline = h_index. + EXIT. + ENDLOOP. + IF sy-subrc NE 0. + MESSAGE x385. + ENDIF. + + CLEAR display. + +* get 'ready for input' status from variant + PERFORM check_input USING i_sort g_planmerk-fnam subrc. + IF subrc NE 0. + display = 'X'. + ENDIF. + +* check attributes from G_PLANMERK + IF g_planmerk-status EQ '3'. + display = 'X'. + ENDIF. + +* display mode if complex selection is available + IF i_sort = kepp_c_sort_0200. + PERFORM check_complex_sel USING kepp_c_sort_0200 + g_planmerk-fnam + more. + IF more EQ 'X'. +* DISPLAY = 'X'. + ENDIF. + ENDIF. + +* call popup F4 help + PERFORM val_criteria_value USING cepl4a-mhigh + g_planmerk + display + cursor_line + 'CEPL4A-MHIGHTX'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form OK_CODE_201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM ok_code_201 . + + DATA: fcode LIKE kpp0i-ok_code, + h_index LIKE sy-index. + + fcode = ok_code. + g_fcode = fcode. + CLEAR ok_code. + + CASE fcode. +* WHEN kepp_c_okcode-ebaz. +* PERFORM show_erkrs. +* WHEN kepp_c_okcode-pagp. +* tctd_sk-top_line = tctd_sk-top_line + g_loopc_200. +* IF tctd_sk-top_line > g_tfill_200. +* tctd_sk-top_line = g_tfill_200. +* ENDIF. +* WHEN kepp_c_okcode-pagm. +* tctd_sk-top_line = tctd_sk-top_line - g_loopc_200. +* IF tctd_sk-top_line < 1. +* tctd_sk-top_line = 1. +* ENDIF. +* WHEN kepp_c_okcode-plas. +* tctd_sk-top_line = g_tfill_200. +* WHEN kepp_c_okcode-pfir. +* tctd_sk-top_line = 1. + WHEN kepp_c_okcode-vasi. + PERFORM check_combination. + PERFORM check_all USING ' '. + PERFORM call_save_variant. + WHEN kepp_c_okcode-chck. + PERFORM check_combination. + PERFORM check_all USING 'X'. + WHEN kepp_c_okcode-back. + g_exit = 'X'. + SET SCREEN 0. LEAVE SCREEN. + WHEN kepp_c_okcode-ende. + PERFORM popup_exit. + IF g_exit = 'X'. + SET SCREEN 0. LEAVE SCREEN. + ENDIF. + WHEN kepp_c_okcode-abbr. + PERFORM popup_exit. + IF g_exit = 'X'. + SET SCREEN 0. LEAVE SCREEN. + ENDIF. + WHEN kepp_c_okcode-xtxt. + IF gs_0201-show_text = true. + gs_0201-show_text = false. + ELSE. + gs_0201-show_text = true. + ENDIF. + WHEN 'FIND'. + PERFORM find_0201 USING false. "new search + WHEN 'FND+'. + PERFORM find_0201 USING true. "find next + +* WHEN space. +* stay on dynpro +* WHEN 'OPTION'. +* set the 'select option' icon +* PERFORM set_sel_option_201. + WHEN OTHERS. + IF fcode(1) EQ 'M' AND fcode+1(3) CO '0123456789'. +* call popup 'complex selection' + h_index = fcode+1(3). + PERFORM complex_sel USING h_index. + ELSEIF fcode(1) EQ 'R' AND fcode+1(3) CO '0123456789'. +* call screen 'additional selection reference base' + h_index = fcode+1(3). + PERFORM add_sel_for_ref USING h_index. +* ELSE. +* PERFORM check_combination. +* SET SCREEN 0. LEAVE SCREEN. + ENDIF. + ENDCASE. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form complex_sel +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> H_INDEX +*&---------------------------------------------------------------------* +FORM complex_sel USING VALUE(i_index). + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + s_selfield TYPE se16n_selfields, + t_se16n_multi TYPE se16n_selfields OCCURS 0 WITH HEADER LINE, + t_backup TYPE se16n_selfields OCCURS 0 WITH HEADER LINE, + h_index LIKE sy-tabix, + display. + +* get right field name + h_index = g_begin_200 + i_index - 1. + LOOP AT g_planmerk WHERE eline = h_index. + EXIT. + ENDLOOP. + IF sy-subrc NE 0. + MESSAGE x385. + ENDIF. + +** call SUPER-DUPI-MULTI-POPUP SE16N_MULTI_FIELD_INPUT + READ TABLE g_fieldtab WITH KEY fieldname = g_planmerk-fnam. + +* fill T_SE16N_MULTI with matching entries from GS_BPSEL-T_SEL1 + REFRESH t_se16n_multi. + CLEAR t_se16n_multi. + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0200 + AND fnam = g_planmerk-fnam. + t_se16n_multi-tabname = g_fieldtab-tabname. + t_se16n_multi-fieldname = s_sel1-fnam. + t_se16n_multi-sign = s_sel1-sign. + t_se16n_multi-option = s_sel1-option. + t_se16n_multi-low = s_sel1-low. + IF s_sel1-low = space + AND s_sel1-high = space. +* use # as representation of initial value on the screen + t_se16n_multi-low = '#'. + ENDIF. + t_se16n_multi-high = s_sel1-high. + t_se16n_multi-type = g_planmerk-inttype. + t_se16n_multi-outputlen = g_planmerk-outputlen. + t_se16n_multi-intlen = g_planmerk-intlen. + t_se16n_multi-convexit = g_fieldtab-convexit. + t_se16n_multi-scrtext_m = g_fieldtab-scrtext_m. + t_se16n_multi-scrtext_l = g_fieldtab-scrtext_l. + t_se16n_multi-datatype = g_fieldtab-datatype. + t_se16n_multi-rollname = g_fieldtab-rollname. + APPEND t_se16n_multi. + ENDLOOP. + +* fill structure SELFIELD + s_selfield-tabname = g_fieldtab-tabname. + s_selfield-fieldname = g_planmerk-fnam. + s_selfield-type = g_planmerk-inttype. + s_selfield-outputlen = g_planmerk-outputlen. +* S_SELFIELD-INTLEN = g_planmerk-INTLEN. + s_selfield-convexit = g_fieldtab-convexit. + s_selfield-datatype = g_fieldtab-datatype. + s_selfield-rollname = g_fieldtab-rollname. + + CLEAR display. +* display mode if field is protected in variant ... + READ TABLE gt_fnam WITH KEY sort = kepp_c_sort_0200 + fnam = g_planmerk-fnam. + IF sy-subrc = 0 AND gt_fnam-fieldprot = 'X'. + display = 'X'. + ENDIF. +* ... or because of char group attributes in G_PLANMERK + IF g_planmerk-status = '3'. + display = 'X'. + ENDIF. + + t_backup[] = t_se16n_multi[]. + +* call multi popup for complex selection + CALL FUNCTION 'SE16N_MULTI_FIELD_INPUT' + EXPORTING + ls_selfields = s_selfield + ld_display = display + ld_check_input_funcname = 'RKD_CHECK_MULTI_FIELD_INPUT' + TABLES + lt_multi_select = t_se16n_multi. + + IF sy-subrc = 0 AND t_se16n_multi[] <> t_backup[]. +** update of customizing table GS_BPSEL-T_SEL1 for given field name + +* delete all earlier entries from GS_BPSEL-T_SEL1 + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0200 + AND fnam = g_planmerk-fnam. + DELETE gs_bpsel-t_sel1. + ENDLOOP. + +* rebuild GS_BPSEL-T_SEL1 with the entries from multi popup + LOOP AT t_se16n_multi. + CLEAR s_sel1. + s_sel1-sort = kepp_c_sort_0200. + s_sel1-fnam = t_se16n_multi-fieldname. + s_sel1-sign = t_se16n_multi-sign. + IF t_se16n_multi-sign IS INITIAL + OR t_se16n_multi-option IS INITIAL. +* set default SIGN value + s_sel1-sign = 'I'. + ENDIF. + s_sel1-option = t_se16n_multi-option. + IF s_sel1-option IS INITIAL. +* set default OPTION values + IF t_se16n_multi-low <> space + AND t_se16n_multi-high = space. + s_sel1-option = 'EQ'. + ELSEIF t_se16n_multi-low <> space + AND t_se16n_multi-high <> space. + s_sel1-option = 'BT'. + ENDIF. + ENDIF. + IF t_se16n_multi-low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR t_se16n_multi-low. + ENDIF. + s_sel1-low = t_se16n_multi-low. + s_sel1-high = t_se16n_multi-high. + APPEND s_sel1 TO gs_bpsel-t_sel1. + ENDLOOP. + + IF t_se16n_multi[] IS INITIAL. +* set default entry (value '*') + s_sel1-low = '*'. + s_sel1-sign = 'I'. + s_sel1-option = 'EQ'. + CLEAR s_sel1-high. + APPEND s_sel1 TO gs_bpsel-t_sel1. + ENDIF. + + SORT gs_bpsel-t_sel1 STABLE BY sort fnam. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form add_sel_for_ref +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> H_INDEX +*&---------------------------------------------------------------------* +FORM add_sel_for_ref USING VALUE(i_index). + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + sel TYPE kepp_t_sel1 WITH HEADER LINE, + h_index LIKE sy-tabix, + display. + +* get right field name + h_index = g_begin_200 + i_index - 1. + LOOP AT g_planmerk WHERE eline = h_index. + EXIT. + ENDLOOP. + IF sy-subrc NE 0. + MESSAGE x385. + ENDIF. + +* provide data from GS_BPSEL-T_SEL1 for screen 1100 + REFRESH sel. + CLEAR sel. + LOOP AT gs_bpsel-t_sel1 INTO sel + WHERE sort = kepp_c_sort_0200 + AND fnam = g_planmerk-fnam. + APPEND sel. + ENDLOOP. + + g_display = false. + g_fnam = g_planmerk-fnam. + gs_1100-show_text = true. + gs_1100-show_from_to = true. + gs_1100-col_optimize = true. + gt_chartab[] = sel[]. + +* initialize tables GT_REF and GT_MULTI from screen 1100 + CLEAR gt_ref[]. + CLEAR gt_multi[]. + +* set variable so that GT_REF is updated only at FIRST +* processing of PBO after screen 1100 has been called + g_first_pbo_1100 = 'X'. + +* call screen with additional selection for reference base + CALL SCREEN 1100. + + IF sy-subrc = 0. +* update of customizing table GS_BPSEL-T_SEL1 + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0200 + AND fnam = g_planmerk-fnam. + DELETE gs_bpsel-t_sel1. + ENDLOOP. + LOOP AT sel. + s_sel1 = sel. + s_sel1-sort = kepp_c_sort_0200. + APPEND s_sel1 TO gs_bpsel-t_sel1. + ENDLOOP. + ENDIF. + + SORT gs_bpsel-t_sel1 STABLE BY sort fnam. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form INIT_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM init_1100 . + DATA: length TYPE i, + num_ref TYPE i, + t_ass_src_ref TYPE kepp_t_ass_src_ref WITH HEADER LINE, + s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + s_ref TYPE kepp_s_ref, + icon TYPE icon_d, + tab_fcodes(4) OCCURS 0, + l_src_low LIKE cedst-low, + l_src_high LIKE cedst-high, + l_ref_low LIKE cedst-low, + l_ref_high LIKE cedst-high. + + FIELD-SYMBOLS: TYPE cxtab_column. + + CLEAR g_char_type. " char classification + +*** get char type to choose correct classification icon + PERFORM get_char_type USING g_fnam + CHANGING g_char_type. + +*** set status + IF g_fnam = ident_dim_curtp. + APPEND kepp_c_okcode-copy TO tab_fcodes. + APPEND kepp_c_okcode-prop TO tab_fcodes. + APPEND 'XIVL' TO tab_fcodes. + APPEND 'RINS' TO tab_fcodes. + APPEND 'RADD' TO tab_fcodes. + APPEND 'RADD' TO tab_fcodes. + APPEND 'MKAL' TO tab_fcodes. + APPEND 'MKBL' TO tab_fcodes. + APPEND 'MKNO' TO tab_fcodes. + APPEND 'XTXT' TO tab_fcodes. + APPEND 'UPLD' TO tab_fcodes. + ELSE. + APPEND 'VPSL' TO tab_fcodes. + APPEND 'VCAL' TO tab_fcodes. + APPEND 'ADDCURTP' TO tab_fcodes. + ENDIF. + IF g_char_type = kepp_c_chartype-sum + OR g_char_type = kepp_c_chartype-dis. + APPEND kepp_c_okcode-copy TO tab_fcodes. + APPEND kepp_c_okcode-prop TO tab_fcodes. + ENDIF. + SET PF-STATUS '1100' EXCLUDING tab_fcodes. + +*** set title + SET TITLEBAR '1100'. + +*** set header (fieldname and text) + g_fieldtabkey-tabname = g_ce0name. + g_fieldtabkey-fieldname = g_fnam. + READ TABLE g_fieldtab WITH KEY g_fieldtabkey. + IF sy-subrc <> 0. + MESSAGE x385. + ENDIF. + gs_1100-fieldname = g_fnam. + gs_1100-fieldname_txt = g_fieldtab-scrtext_m. + + g_begin_1000 = tc_ref-top_line. + +*** prepare column length + IF gs_1100-col_optimize = true. + length = g_planmerk-outputlen. + IF g_planmerk-outputlen > 8. + length = g_planmerk-outputlen. + ELSE. + length = 8. + ENDIF. + ELSE. + IF g_planmerk-outputlen > 18. + length = g_planmerk-outputlen. + ELSE. + length = 18. + ENDIF. + ENDIF. + +*** modify screen fields + IF g_fnam = ident_dim_curtp. + src_high = TEXT-912. + ref_high = TEXT-912. + ELSE. + src_high = TEXT-968. + ref_high = TEXT-969. + ENDIF. + + LOOP AT tc_ref-cols ASSIGNING . + + -invisible = 0. " default + IF g_fnam = ident_dim_curtp AND -screen-name = 'GT_REF-SRC_LOW'. + -screen-input = '0'. + ELSE. + -screen-input = '1'. + ENDIF. + +** set length of TC fields + IF -screen-group1 = 'VAL'. + -screen-length = length. + -vislength = length. +** set display/change mode + IF g_display = true. + -screen-input = '0'. + ENDIF. + ENDIF. + +** show/hide long texts + IF -screen-group1 = 'TXT'. + IF gs_1100-show_text = true. + -invisible = 0. + ELSE. + -invisible = 1. + ENDIF. + ENDIF. + +** show/hide "value to" fields + IF -screen-group2 = 'TO'. + IF gs_1100-show_from_to = true + AND ( gs_1100-show_text = true + OR -screen-group1 <> 'TXT' ). + -invisible = 0. + ELSE. + -invisible = 1. + ENDIF. + ENDIF. + +** hide source fields for a 'summarize' char +** and for a 'distribution level' char + IF -screen-group4 = 'SRC' + AND ( g_char_type = kepp_c_chartype-sum + OR g_char_type = kepp_c_chartype-dis ). + -invisible = 1. + ENDIF. + +** SOURCE_TO fields are not active yet + IF -screen-group3 = 'EXT'. + -invisible = 1. + ENDIF. +*** cpa curtp handling + IF g_fnam = ident_dim_curtp. + IF -screen-group1 = 'TXT'. + -invisible = 0. + ELSEIF -screen-group1 = 'MOR'. + -invisible = 1. + ENDIF. + IF -screen-group2 = 'TO'. + -invisible = 0. + -screen-input = 0. + ENDIF. + ELSE. + IF -screen-group2 = 'TO' AND -screen-group4 <> 'SRC'. + -screen-input = 1. + ENDIF. + IF -screen-group1 = 'MOR' AND -screen-group4 <> 'SRC'. + -invisible = 0. + ENDIF. + + ENDIF. + + ENDLOOP. + + +*** take over data from customizing table GS_BPSEL-T_SEL1 +* (GT_REF should be updated from the customizing only when PBO +* is processed for the first time after calling screen 1100) + IF gt_ref[] IS INITIAL AND g_first_pbo_1100 = 'X'. + + CALL FUNCTION 'RKE_TD_ENCRYPT_SRC_REF' + EXPORTING + i_single_charact = g_fnam + it_run_def = gs_bpsel-t_sel1 + IMPORTING + et_ass_src_ref = t_ass_src_ref[]. + +** map data to table GT_REF for display + LOOP AT t_ass_src_ref. + + CLEAR gt_ref. + + IF g_char_type <> kepp_c_chartype-sum + AND g_char_type <> kepp_c_chartype-dis. +* 'normal' case - split data into GT_REF and GT_MULTI + +* show the first receiver line on screen + MOVE-CORRESPONDING t_ass_src_ref TO gt_ref. + + LOOP AT t_ass_src_ref-t_ref INTO s_ref. + MOVE-CORRESPONDING s_ref TO gt_ref. + EXIT. + ENDLOOP. + + IF gt_ref-src_low = space + AND gt_ref-src_high = space. +* use # as representation of initial value on the screen + gt_ref-src_low = '#'. + ENDIF. + IF gt_ref-ref_low = space + AND gt_ref-ref_high = space. +* use # as representation of initial value on the screen + gt_ref-ref_low = '#'. + ENDIF. + +* set icon for complex selection + DESCRIBE TABLE t_ass_src_ref-t_ref LINES num_ref. + IF num_ref > 1. + gt_ref-icon_more = icon_display_more. " green + ELSE. + gt_ref-icon_more = icon_enter_more. " colorless + ENDIF. + +* set 'select option' icon + CALL FUNCTION 'RKE_TD_SELOPT' + EXPORTING + i_sign = s_ref-ref_sign + i_option = s_ref-ref_option + i_display = ' ' + IMPORTING + e_icon = icon. + gt_ref-icon_sel = icon. + + APPEND gt_ref. + +* fill table GT_MULTI (that contains FURTHER reference records +* for the same SRC_LOW value from table T_ASS_SRC_REF-T_REF - +* i.e. NOT the first line from T_ASS_SRC_REF-T_REF !) + IF num_ref > 1. + LOOP AT t_ass_src_ref-t_ref INTO s_ref + FROM 2. + MOVE-CORRESPONDING t_ass_src_ref TO gt_multi. + MOVE-CORRESPONDING s_ref TO gt_multi. + + IF gt_multi-src_low = space + AND gt_multi-src_high = space. +* use # as representation of initial value on the screen + gt_multi-src_low = '#'. + ENDIF. + IF gt_multi-ref_low = space + AND gt_multi-ref_high = space. +* use # as representation of initial value on the screen + gt_multi-ref_low = '#'. + ENDIF. +* get texts for GT_MULTI values + IF NOT gt_multi-src_low IS INITIAL. + l_src_low = gt_multi-src_low. + PERFORM evaluate_entry_output + USING g_planmerk + l_src_low + l_src_low + gt_multi-src_low_txt. + ENDIF. + IF NOT gt_multi-src_high IS INITIAL. + l_src_high = gt_multi-src_high. + PERFORM evaluate_entry_output + USING g_planmerk + l_src_high + l_src_high + gt_multi-src_high_txt. + ENDIF. + IF NOT gt_multi-ref_low IS INITIAL. + l_ref_low = gt_multi-ref_low. + PERFORM evaluate_entry_output + USING g_planmerk + l_ref_low + l_ref_low + gt_multi-ref_low_txt. + ENDIF. + IF NOT gt_multi-ref_high IS INITIAL. + l_ref_high = gt_multi-ref_high. + PERFORM evaluate_entry_output + USING g_planmerk + l_ref_high + l_ref_high + gt_multi-ref_high_txt. + ENDIF. + CLEAR gt_multi-icon_more. + APPEND gt_multi. + ENDLOOP. + ENDIF. + + ELSE. +* special logic for a 'summarize' or 'distribution level' char +* because there is no GT_MULTI in this case (all entries are +* displayed on screen 1100 via GT_REF) + +* show ALL receiver lines on screen + MOVE-CORRESPONDING t_ass_src_ref TO gt_ref. + + LOOP AT t_ass_src_ref-t_ref INTO s_ref. + MOVE-CORRESPONDING s_ref TO gt_ref. + + IF gt_ref-ref_low = space + AND gt_ref-ref_high = space. +* use # as representation of initial value on the screen + gt_ref-ref_low = '#'. + ENDIF. + +* get texts for GT_REF values + IF NOT gt_ref-src_low IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-src_low + gt_ref-src_low + gt_ref-src_low_txt. + ENDIF. + IF NOT gt_ref-src_high IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-src_high + gt_ref-src_high + gt_ref-src_high_txt. + ENDIF. + IF NOT gt_ref-ref_low IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-ref_low + gt_ref-ref_low + gt_ref-ref_low_txt. + ENDIF. + IF NOT gt_ref-ref_high IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-ref_high + gt_ref-ref_high + gt_ref-ref_high_txt. + ENDIF. +* set 'select option' icon + CALL FUNCTION 'RKE_TD_SELOPT' + EXPORTING + i_sign = s_ref-ref_sign + i_option = s_ref-ref_option + i_display = ' ' + IMPORTING + e_icon = icon. + gt_ref-icon_sel = icon. + APPEND gt_ref. + ENDLOOP. + + ENDIF. + + ENDLOOP. + +* fill backup tables for comparison (when screen 1100 is left) + gt_backup_ref[] = gt_ref[]. + gt_backup_multi[] = gt_multi[]. + + ENDIF. + +*** set variables + DESCRIBE TABLE gt_ref LINES g_tfill_1000. + + gs_1100-entry_count = g_tfill_1000. + +** display at least 100 lines for entries on screen 1100 + IF g_first_pbo_1100 = 'X' OR g_fnam = ident_dim_curtp. + IF g_tfill_1000 > 100 OR g_fnam = ident_dim_curtp. + tc_ref-lines = g_tfill_1000. + ELSE. + tc_ref-lines = 100. + ENDIF. + ENDIF. + + IF g_first_pbo_1100 = 'X'. + IF g_char_type = kepp_c_chartype-sum + OR g_char_type = kepp_c_chartype-dis. + SET CURSOR FIELD 'GT_REF-REF_LOW' LINE 1. + ELSE. + SET CURSOR FIELD 'GT_REF-SRC_LOW' LINE 1. + ENDIF. + ENDIF. + +*** set top line + IF g_first_pbo_1100 = 'X'. + tc_ref-top_line = 1. + ENDIF. + +*** set search and found position + IF gs_1100-found_line IS NOT INITIAL. + tc_ref-top_line = gs_1100-found_line. + ENDIF. + + IF gs_1100-found_col IS NOT INITIAL. + +** search corresponding column in TC + LOOP AT tc_ref-cols ASSIGNING . + + TRY. + IF -screen-name = gs_1100-found_col OR + segment( val = -screen-name + index = 2 + sep = '-' ) = gs_1100-found_col. + SET CURSOR FIELD -screen-name LINE 1. + -invisible = 0. + EXIT. + ENDIF. + CATCH cx_root. + ENDTRY. + + ENDLOOP. + +* Behind "more" > open complex selection popup + IF gs_1100-found_col = 'ICON_MORE'. + + CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE' + EXPORTING + functioncode = 'MORE' + EXCEPTIONS + OTHERS = 1. + + ENDIF. + + ENDIF. + + CLEAR gs_1100-found_col. + CLEAR gs_1100-found_line. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form LOOP_PBO_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM loop_pbo_1100 . + DATA: + s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + icon TYPE icon_d. + + g_loopc_1000 = sy-loopc. + +*** get actual line from GT_REF + READ TABLE gt_ref INDEX tc_ref-current_line. + +*** special logic for curtp + IF gt_ref-fnam = ident_dim_curtp. + IF gt_ref-ref_low IS NOT INITIAL AND gt_ref-ref_low <> 'B*' + AND gt_ref-ref_low <> '1*'. + PERFORM get_text USING 'CURTP' gt_ref-ref_low gt_ref-ref_low_txt. + ELSEIF gt_ref-ref_low = 'B*'. + PERFORM get_text USING 'CURTP' 'B0' gt_ref-ref_low_txt. + ELSEIF gt_ref-ref_low = '1*'. + PERFORM get_text USING 'CURTP' '10' gt_ref-ref_low_txt. + ENDIF. + EXIT. + ENDIF. + +* don't process initial lines + CHECK gt_ref-src_low <> space + OR gt_ref-ref_low <> space + OR gt_ref-ref_high <> space. + +*** convert to output format & fill text fields of GT_REF (in case of +*** G_FIRST_PBO_1100 = 'X' this was already done in form INIT_1100) + CLEAR gt_ref-src_low_txt. + CLEAR gt_ref-src_high_txt. + CLEAR gt_ref-ref_low_txt. + CLEAR gt_ref-ref_high_txt. + + IF NOT gt_ref-src_low IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-src_low + gt_ref-src_low + gt_ref-src_low_txt. + ENDIF. + IF NOT gt_ref-src_high IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-src_high + gt_ref-src_high + gt_ref-src_high_txt. + ENDIF. + IF NOT gt_ref-ref_low IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-ref_low + gt_ref-ref_low + gt_ref-ref_low_txt. + ENDIF. + IF NOT gt_ref-ref_high IS INITIAL. + PERFORM evaluate_entry_output + USING g_planmerk + gt_ref-ref_high + gt_ref-ref_high + gt_ref-ref_high_txt. + ENDIF. + +* use # as representation of initial value on the screen + IF g_char_type = kepp_c_chartype-ret AND + gt_ref-src_low = space AND + gt_ref-src_high = space. + gt_ref-src_low = '#'. + ENDIF. + + IF gt_ref-ref_low = space AND + gt_ref-ref_high = space. + gt_ref-ref_low = '#'. + ENDIF. + +* set 'select option' icon + CALL FUNCTION 'RKE_TD_SELOPT' + EXPORTING + i_sign = gt_ref-ref_sign + i_option = gt_ref-ref_option + i_display = ' ' + IMPORTING + e_icon = icon. + + gt_ref-icon_sel = icon. + +*** set colourless 'complex selection' icon as default + IF gt_ref-icon_more IS INITIAL + AND ( NOT gt_ref-src_low IS INITIAL + OR g_char_type = kepp_c_chartype-sum ). + gt_ref-icon_more = icon_enter_more. + ENDIF. + +*** set unspecific 'select option' icon as default + IF gt_ref-icon_sel IS INITIAL + AND ( NOT gt_ref-src_low IS INITIAL + OR g_char_type = kepp_c_chartype-sum + OR g_char_type = kepp_c_chartype-dis ). + gt_ref-icon_sel = icon_selection. + ENDIF. + + MODIFY gt_ref INDEX tc_ref-current_line. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form EXIT_1000 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM exit_1000 . + + DATA: + fcode LIKE kpp0i-ok_code, + answer. + + fcode = ok_code. + CLEAR ok_code. + g_fcode = fcode. + + CASE fcode. + WHEN kepp_c_okcode-abbr. + + CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA' + EXPORTING + textline1 = TEXT-300 + textline2 = TEXT-301 + titel = sy-title + IMPORTING + answer = answer. + + IF answer = 'J'. + SET SCREEN 0. LEAVE SCREEN. + ENDIF. + ENDCASE. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form LOOP_PAI_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM loop_pai_1100 . + CLEAR g_first_pbo_1100. + +*** convert data from screen into internal format + IF g_fnam <> ident_dim_curtp. + + PERFORM evaluate_entry_input USING g_planmerk + gt_ref-src_low + gt_ref-src_low. + PERFORM evaluate_entry_input USING g_planmerk + gt_ref-src_high + gt_ref-src_high. + PERFORM evaluate_entry_input USING g_planmerk + gt_ref-ref_low + gt_ref-ref_low. + PERFORM evaluate_entry_input USING g_planmerk + gt_ref-ref_high + gt_ref-ref_high. + ENDIF. +*** check this line + PERFORM check_line_1100 + USING + tc_ref-current_line + CHANGING + gt_ref. + +*** update GT_REF + MODIFY gt_ref INDEX tc_ref-current_line. + IF sy-subrc <> 0. + APPEND gt_ref. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_line_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> TC_REF_CURRENT_LINE +*& <-- GT_REF +*&---------------------------------------------------------------------* +FORM check_line_1100 + USING + current_line TYPE int4 + CHANGING + s_ref LIKE LINE OF gt_ref. + + FIELD-SYMBOLS: + , , , . + + DATA: + s_rkb1x LIKE rkb1x, + last_line LIKE sy-tabix. +** special logic for curtp + IF g_fnam = ident_dim_curtp. + PERFORM check_curtp CHANGING s_ref. + EXIT. + ENDIF. + +*** + s_rkb1x-erkrs = g_erkrs. + s_rkb1x-kokrs = g_kokrs. + s_rkb1x-pa_type = g_pa_type. + +*** assign field-symbols (for check of initial value) + ASSIGN s_ref-src_low(g_fieldtab-leng) TO TYPE g_fieldtab-inttype. + ASSIGN s_ref-src_high(g_fieldtab-leng) TO TYPE g_fieldtab-inttype. + ASSIGN s_ref-ref_low(g_fieldtab-leng) TO TYPE g_fieldtab-inttype. + ASSIGN s_ref-ref_high(g_fieldtab-leng) TO TYPE g_fieldtab-inttype. + +*** ignore empty lines + IF IS INITIAL AND + IS INITIAL AND + IS INITIAL. + CLEAR s_ref. + EXIT. + ENDIF. + +*** fill additional data into S_REF + s_ref-fnam = g_fnam. + +** set sign and option + +* sign: only 'I' allowed + s_ref-src_sign = 'I'. + s_ref-ref_sign = 'I'. + +* option: only EQ/BT allowed + IF IS INITIAL. + s_ref-src_option = 'EQ'. + ELSE. + s_ref-src_option = 'BT'. + ENDIF. + + IF IS INITIAL. + s_ref-ref_option = 'EQ'. + ELSE. + s_ref-ref_option = 'BT'. + ENDIF. + +*** validation of 'low' values in case of EQ and NE + IF g_fieldtab-depfl IS INITIAL AND 'EQ/NE' CS s_ref-src_option. + + IF s_ref-src_low <> '*' " note 2219191 + AND IS NOT INITIAL. + + CALL FUNCTION 'RKD_SHORT_TEXT_SINGLE' + EXPORTING + applclass = kepp_c_applclass + characteristic = s_ref-src_low + criteria = g_planmerk-fnam + i_rkb1x = s_rkb1x + mode = 'C' + EXCEPTIONS + key_not_found = 1. + + IF sy-subrc = 1. + MESSAGE e018 WITH g_fieldtab-scrtext_m . + ENDIF. + ENDIF. + + ENDIF. + + IF g_fieldtab-depfl IS INITIAL AND 'EQ/NE' CS s_ref-ref_option. + + IF s_ref-ref_low <> '*' " note 2219191 + AND IS NOT INITIAL. + + CALL FUNCTION 'RKD_SHORT_TEXT_SINGLE' + EXPORTING + applclass = kepp_c_applclass + characteristic = s_ref-ref_low + criteria = g_planmerk-fnam + i_rkb1x = s_rkb1x + mode = 'C' + EXCEPTIONS + key_not_found = 1. + + IF sy-subrc = 1. + MESSAGE e018 WITH g_fieldtab-scrtext_m . + ENDIF. + ENDIF. + ENDIF. + +*** check for correct sequence of entered data + IF > AND IS NOT INITIAL OR + > AND IS NOT INITIAL. + MESSAGE e650(db). + ENDIF. + +*** SRC_LOW must be unique in GT_REF + IF IS NOT INITIAL. + + LOOP AT gt_ref TRANSPORTING NO FIELDS + WHERE src_low = s_ref-src_low. " note 2219191 + + IF sy-tabix <> current_line. + MESSAGE e866. + ENDIF. + ENDLOOP. + + IF s_ref-src_low = '*'. " note 2219191 + LOOP AT gt_ref TRANSPORTING NO FIELDS + WHERE src_low IS NOT INITIAL. + + IF sy-tabix <> current_line. + MESSAGE e373. + ENDIF. + ENDLOOP. + ENDIF. + + ENDIF. + +*** no entry with initial S_REF-SRC_LOW value + IF g_char_type <> kepp_c_chartype-sum AND + g_char_type <> kepp_c_chartype-dis AND + IS NOT INITIAL AND + IS INITIAL. + MESSAGE e791(ke). + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_curtp +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- S_REF +*&---------------------------------------------------------------------* +FORM check_curtp + CHANGING + s_ref LIKE LINE OF gt_ref. + + DATA: so_vrgar TYPE TABLE OF selopt, + s_sel1 LIKE LINE OF gs_bpsel-t_sel1. +*** 00 can't be used as receiver at all + IF s_ref-ref_low = '00'. + MESSAGE e018 WITH g_fieldtab-scrtext_m s_ref-ref_low. + ENDIF. + +*** check if curtp is maintained in kepsl customizing + IF s_ref-ref_high IS NOT INITIAL AND cepl4b-vrgkum IS INITIAL. + SELECT COUNT(*) FROM tpsl_c04cc INTO sy-dbcnt + WHERE erkrs = g_erkrs AND + vrgar = s_ref-ref_high AND + curtp = s_ref-ref_low. + + IF sy-subrc <> 0. + MESSAGE e018 WITH g_fieldtab-scrtext_m s_ref-ref_low. + ENDIF. + ELSEIF cepl4b-vrgkum = 'X'. + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0100 AND + fnam = 'REVRGAR'. + + APPEND VALUE #( sign = 'I' + option = 'EQ' + low = s_sel1-low ) TO so_vrgar. + + ENDLOOP. + SELECT COUNT(*) FROM tpsl_c04cc INTO sy-dbcnt + WHERE erkrs = g_erkrs AND + vrgar IN so_vrgar AND + curtp = s_ref-ref_low. + + IF sy-subrc <> 0. + IF s_ref-ref_low <> 'B*' AND s_ref-ref_low <> '1*'. + MESSAGE e018 WITH g_fieldtab-scrtext_m s_ref-ref_low. + ENDIF. + ENDIF. + ELSE. + IF s_ref-ref_low <> 'B*' AND s_ref-ref_low <> '1*'. + MESSAGE e018 WITH g_fieldtab-scrtext_m s_ref-ref_low. + ENDIF. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form OK_CODE_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM ok_code_1100 . + DATA: + fcode LIKE kpp0i-ok_code, + cursor_line TYPE i, + h_index LIKE sy-index, + t_dummy TYPE TABLE OF char1, + id TYPE i, + ls_ref TYPE ys_ref_on_screen. + + fcode = ok_code. + CLEAR ok_code. + g_fcode = fcode. + CASE fcode. + +*** ENTER + WHEN kepp_c_okcode-ente. + PERFORM check_all_1000. + PERFORM check_all_1100. + +*** page up / page down + WHEN kepp_c_okcode-pagp. + tc_ref-top_line = tc_ref-top_line + g_loopc_1000. + IF tc_ref-top_line > g_tfill_1000. + tc_ref-top_line = g_tfill_1000. + ENDIF. + WHEN kepp_c_okcode-pagm. + tc_ref-top_line = tc_ref-top_line - g_loopc_1000. + IF tc_ref-top_line < 1. + tc_ref-top_line = 1. + ENDIF. + WHEN kepp_c_okcode-plas. + tc_ref-top_line = g_tfill_1000. + WHEN kepp_c_okcode-pfir. + tc_ref-top_line = 1. + +*** call multiselect-screen + WHEN kepp_c_okcode-more. +* PERFORM ref_multi_select. + +*** leave screen + WHEN kepp_c_okcode-back OR kepp_c_okcode-ende OR + '%BACK' OR '%EX'. + +** ensure that complete gt_ref is handed back + IF g_fnam = ident_dim_curtp. +* PERFORM hide_curtps USING 'SAVE'. + ENDIF. + PERFORM check_all_1000. + PERFORM check_all_1100. + PERFORM update_gs_bpsel. + SET SCREEN 0. + LEAVE SCREEN. + +*** mark rows + WHEN 'MKAL'. + LOOP AT gt_ref. + gt_ref-mark = true. + MODIFY gt_ref. + ENDLOOP. + WHEN 'MKBL'. +* PERFORM mark_block. + WHEN 'MKNO'. + LOOP AT gt_ref. + gt_ref-mark = false. + MODIFY gt_ref. + ENDLOOP. + +*** sort table + WHEN 'SRT+'. +* PERFORM sort_gt_ref USING 'ASC'. + WHEN 'SRT-'. +* PERFORM sort_gt_ref USING 'DSC'. + +*** delete / insert one single row + WHEN 'RINS'. + LOOP AT gt_ref WHERE mark = true. + CLEAR ls_ref. + ls_ref-fnam = gt_ref-fnam. + INSERT ls_ref INTO gt_ref INDEX sy-tabix. + ENDLOOP. + WHEN 'RDEL'. + LOOP AT gt_ref WHERE mark = true. + DELETE gt_ref INDEX sy-tabix. + DELETE gt_multi WHERE src_low = gt_ref-src_low. + ENDLOOP. +*** add further rows for data entry + WHEN 'RADD'. + tc_ref-lines = tc_ref-lines + 100. + +*** find entries + WHEN 'FIND'. +* PERFORM find_1100 USING false. "new search + WHEN 'FND+'. +* PERFORM find_1100 USING true. "find next + +*** toggle text + WHEN 'XTXT'. + IF gs_1100-show_text = true. + gs_1100-show_text = false. + ELSE. + gs_1100-show_text = true. + ENDIF. + +*** toggle col optimize + WHEN 'XWDT'. + IF gs_1100-col_optimize = true. + gs_1100-col_optimize = false. + ELSE. + gs_1100-col_optimize = true. + ENDIF. + +*** toggle from to + WHEN 'XIVL'. + IF gs_1100-show_from_to = true. + gs_1100-show_from_to = false. + ELSE. + gs_1100-show_from_to = true. + ENDIF. + +*** take over source data from screen 201 + WHEN kepp_c_okcode-copy. +* PERFORM copy_source_from_201. + +*** complete source data from master data + WHEN kepp_c_okcode-prop. +* PERFORM complete_source_from_master. + +*** upload reference data from file + WHEN kepp_c_okcode-upld. +* PERFORM import_data USING 'F'. "from File. + +*** upload reference data from clipboard + WHEN kepp_c_okcode-uplc. +* PERFORM import_data USING 'C'. "from Clipboard. + +*** filter psl/ calc + WHEN 'VPSL' OR 'VCAL'. +* PERFORM hide_curtps USING fcode. + +*** add missing(-> removed or newly created) curtps to screen + WHEN 'ADDCURTP'. +* PERFORM match_ref_curtp. + ENDCASE. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_all_1000 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM check_all_1000 . + DATA: l_asterix_exists, + l_anzlin TYPE i. + + + CLEAR l_asterix_exists. + LOOP AT gt_chartab WHERE NOT option IS INITIAL. + IF gt_chartab-low EQ '*'. + l_asterix_exists = 'X'. + ENDIF. + ADD 1 TO l_anzlin. + ENDLOOP. + IF sy-subrc NE 0. + gt_chartab-fnam = g_fnam. + gt_chartab-sign = 'I'. + gt_chartab-option = 'EQ'. + gt_chartab-low = '*'. + APPEND gt_chartab. + ENDIF. + IF l_asterix_exists EQ 'X' AND l_anzlin GT 1. + MESSAGE i373. + LEAVE SCREEN. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_all_1100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM check_all_1100 . + DATA: + current_line TYPE int4. + + FIELD-SYMBOLS: + LIKE LINE OF gt_ref. + +*** check all lines (not only the visible once) + LOOP AT gt_ref ASSIGNING . + + current_line = sy-tabix. + + PERFORM check_line_1100 + USING + current_line + CHANGING + . + +** delete empty lines + IF IS INITIAL. + DELETE gt_ref. + ENDIF. + + ENDLOOP. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form HELP_CRITERIA +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM help_criteria . + DATA: cursor_line TYPE i, + fieldname_for_help LIKE help_info-fieldname, + tabname_for_help LIKE help_info-tabname. + +* no f1 for curtp customizing + IF g_fnam = ident_dim_curtp. + EXIT. + ENDIF. + + GET CURSOR LINE cursor_line. + READ TABLE g_planmerk WITH KEY fnam = g_fnam. + IF sy-subrc NE 0. + MESSAGE x899. + ENDIF. + fieldname_for_help = g_planmerk-fnam. + tabname_for_help = g_ce0name. + + CALL FUNCTION 'HELP_DOCU_SHOW_FOR_FIELD' + EXPORTING + fieldname = fieldname_for_help + tabname = tabname_for_help. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form VAL_CRITERIA_VALUE_1000 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> GT_REF_SRC_LOW +*& --> P_ +*&---------------------------------------------------------------------* +FORM val_criteria_value_1000 USING p_val LIKE cepl4a-mlow + VALUE(v_dynpfield) + LIKE dynpread-fieldname. + + DATA: cursor_line TYPE i. + + + GET CURSOR LINE cursor_line. + IF g_fnam = ident_dim_curtp. + IF v_dynpfield = 'GT_REF-SRC_HIGH_TXT' + OR v_dynpfield = 'GT_REF-REF_HIGH_TXT'. + EXIT. + ELSE. + PERFORM value_help_curtp USING p_val cursor_line v_dynpfield . + EXIT. + ENDIF. + ENDIF. + READ TABLE g_planmerk WITH KEY fnam = g_fnam. + IF sy-subrc NE 0. + MESSAGE x385. + ENDIF. + + PERFORM val_criteria_value USING p_val + g_planmerk + g_display + cursor_line + v_dynpfield. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form value_help_curtp +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_VAL +*& --> CURSOR_LINE +*& --> V_DYNPFIELD +*&---------------------------------------------------------------------* +FORM value_help_curtp USING p_val LIKE cepl4a-mlow + cursor_line TYPE i + VALUE(v_dynpfield) LIKE dynpread-fieldname. + + + TYPES: + BEGIN OF s_f4, + curtp TYPE cestp_common-curtp, + text TYPE dd01d-ddtext, + END OF s_f4. + + + DATA: t_f4 TYPE TABLE OF s_f4, + s_f4 TYPE s_f4, + lt_curtp TYPE TABLE OF curtp, + t_ret TYPE TABLE OF ddshretval, + so_vrgar TYPE TABLE OF selopt, + vrgar TYPE rke_vrgar, + S_sel1 LIKE LINE OF gs_bpsel-t_sel1, + s_ref LIKE LINE OF gt_ref, + transfer TYPE rkb1t-character. + +*** cummulated vrgar + IF cepl4b-vrgkum = 'X' . + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort = kepp_c_sort_0100 AND + fnam = 'REVRGAR'. + + IF v_dynpfield = 'GT_REF-REF_LOW_TXT'. + APPEND VALUE #( sign = 'I' + option = 'EQ' + low = s_sel1-low ) TO so_vrgar. + ENDIF. + ENDLOOP. +*** normal select + ELSE. + READ TABLE gt_ref[] INDEX cursor_line INTO s_ref. + IF v_dynpfield = 'GT_REF-SRC_LOW_TXT'. + vrgar = s_ref-src_high. + ELSEIF v_dynpfield = 'GT_REF-REF_LOW_TXT'. + vrgar = s_ref-ref_high. + ENDIF. + ENDIF. + + IF vrgar IS NOT INITIAL OR + ( so_vrgar IS NOT INITIAL AND cepl4b-vrgkum = 'X' ). +*** Get relevant curtps + IF cepl4b-vrgkum = 'X'. + SELECT DISTINCT curtp + FROM tpsl_c04cc "#EC CI_BYPASS + INTO TABLE lt_curtp + WHERE erkrs = g_erkrs + AND vrgar IN so_vrgar. + + ELSE. + SELECT DISTINCT curtp + FROM tpsl_c04cc "#EC CI_BYPASS + INTO TABLE lt_curtp + WHERE erkrs = g_erkrs + AND vrgar = vrgar. + ENDIF. + CHECK lt_curtp IS NOT INITIAL. + + LOOP AT lt_curtp INTO s_f4. + IF s_f4-curtp = '00'. + CONTINUE. + ENDIF. + CLEAR s_f4-text. + transfer = s_f4-curtp. + PERFORM get_text USING 'CURTP' transfer s_f4-text. + APPEND s_f4 TO t_f4. + ENDLOOP. + +*** Call F4 + CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' + EXPORTING + retfield = 'CURTP' + value_org = 'S' + TABLES + value_tab = t_f4 + return_tab = t_ret + EXCEPTIONS + OTHERS = 1. + +*** React on value change + IF sy-subrc = 0 AND t_ret IS NOT INITIAL. + READ TABLE t_ret ASSIGNING FIELD-SYMBOL() INDEX 1. + p_val = -fieldval. + + ELSEIF sy-subrc <> 0. + MESSAGE i098(ke) WITH 'F4IF_INT_TABLE_VALUE_REQUEST'. + RETURN. + ENDIF. +*** costing based + ELSE. + CLEAR s_f4. + s_f4-curtp = 'B*'. + PERFORM get_text USING 'CURTP' 'B0' s_f4-text. + APPEND s_f4 TO t_f4. + s_f4-curtp = '1*'. + PERFORM get_text USING 'CURTP' '10' s_f4-text. + APPEND s_f4 TO t_f4. + +*** Call F4 + CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' + EXPORTING + retfield = 'CURTP' + value_org = 'S' + TABLES + value_tab = t_f4 + return_tab = t_ret + EXCEPTIONS + OTHERS = 1. + +*** React on value change + IF sy-subrc = 0 AND t_ret IS NOT INITIAL. + READ TABLE t_ret ASSIGNING INDEX 1. + p_val = -fieldval. + + ELSEIF sy-subrc <> 0. + MESSAGE i098(ke) WITH 'F4IF_INT_TABLE_VALUE_REQUEST'. + RETURN. + ENDIF. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form update_gs_bpsel +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM update_gs_bpsel . + + DATA: + t_ass_src_ref TYPE kepp_t_ass_src_ref WITH HEADER LINE, + s_ref TYPE kepp_s_ref, + s_sel1 LIKE LINE OF gs_bpsel-t_sel1. + +*** special logic for curtp + IF g_fnam = ident_dim_curtp. + PERFORM update_gs_bpsel_curtp. + EXIT. + ENDIF. + +*** update only necessary if GT_REF or GT_MULTI were changed + CHECK gt_backup_ref[] NE gt_ref[] + OR gt_backup_multi[] NE gt_multi[]. + + IF g_char_type <> kepp_c_chartype-sum + AND g_char_type <> kepp_c_chartype-dis. +*** 'normal' case - get data from GT_REF and GT_MULTI + +*** convert data from GT_REF to GT_ASS_SRC_REF + LOOP AT gt_ref. + + CHECK NOT gt_ref-src_low IS INITIAL. +* don't consider screen lines with blank source value +* (GT_REF-SRC_LOW must be at least #) + + CLEAR t_ass_src_ref. + + MOVE-CORRESPONDING gt_ref TO t_ass_src_ref. + + IF t_ass_src_ref-src_low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR t_ass_src_ref-src_low. + ENDIF. + +** build table T_ASS_SRC_REF-T_REF (with reference data) + MOVE-CORRESPONDING gt_ref TO s_ref. + IF s_ref-ref_low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR s_ref-ref_low. + ENDIF. + APPEND s_ref TO t_ass_src_ref-t_ref. + +* get residuary lines for T_ASS_SRC_REF-T_REF from GT_MULTI + LOOP AT gt_multi WHERE src_low = gt_ref-src_low. + MOVE-CORRESPONDING gt_multi TO s_ref. + IF s_ref-ref_low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR s_ref-ref_low. + ENDIF. + APPEND s_ref TO t_ass_src_ref-t_ref. + ENDLOOP. + + APPEND t_ass_src_ref. + + ENDLOOP. + + ELSE. +*** special logic for a 'summarize' or 'distribution level' char +*** because there is no GT_MULTI in this case (data are all taken +*** from GT_REF) + +*** convert data from GT_REF to GT_ASS_SRC_REF + LOOP AT gt_ref. + + IF sy-tabix = 1. +** fill T_ASS_SRC_REF fields only once (from first GT_REF entry) + MOVE-CORRESPONDING gt_ref TO t_ass_src_ref. + IF t_ass_src_ref-src_low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR t_ass_src_ref-src_low. + ENDIF. + ENDIF. + +** build table T_ASS_SRC_REF-T_REF (with all reference data) + MOVE-CORRESPONDING gt_ref TO s_ref. + IF NOT s_ref-ref_low IS INITIAL + OR NOT s_ref-ref_high IS INITIAL. +* don't append lines with blank reference data +* (GT_REF-REF_LOW must be at least #) + IF s_ref-ref_low = '#'. +* don't store # (as representation of initial value on the screen) +* in table GS_BPSEL-T_SEL1 + CLEAR s_ref-ref_low. + ENDIF. + APPEND s_ref TO t_ass_src_ref-t_ref. + ENDIF. + + ENDLOOP. + + IF NOT gt_ref[] IS INITIAL. + APPEND t_ass_src_ref. + ENDIF. + + ENDIF. + +*** update customizing table GS_BPSEL-T_SEL1 + CALL FUNCTION 'RKE_TD_DECRYPT_SRC_REF' + EXPORTING + i_characteristic = g_fnam + it_ass_src_ref = t_ass_src_ref[] + CHANGING + xt_run_def = gs_bpsel-t_sel1. + + SORT gs_bpsel-t_sel1 STABLE BY sort fnam. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form update_gs_bpsel_curtp +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM update_gs_bpsel_curtp . + DATA: s_ref LIKE gt_ref, + s_sel1 LIKE LINE OF gs_bpsel-t_sel1. + + DELETE gs_bpsel-t_sel1 WHERE sort = kepp_c_sort_curtp_ref. + + LOOP AT gt_ref INTO s_ref. + s_sel1-sort = kepp_c_sort_curtp_ref. + s_sel1-fnam = ident_dim_curtp. + s_sel1-low = s_ref-src_low. + s_sel1-lowtx = s_ref-src_high. + s_sel1-high = s_ref-REF_low. + s_sel1-hightx = s_ref-ref_high. + APPEND s_sel1 TO gs_bpsel-t_sel1. + ENDLOOP. + + SORT gs_bpsel-t_sel1 STABLE BY sort fnam. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form popup_exit +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM popup_exit . + DATA: answer(1). + + CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA' + EXPORTING + textline1 = TEXT-300 + textline2 = TEXT-301 + titel = sy-title +* START_COLUMN = 25 +* START_ROW = 6 + IMPORTING + answer = answer. + + IF answer NE 'J'. +* kein Abbruch + EXIT. + ENDIF. + + g_exit = 'X'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_combination +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM check_combination . + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1, + subrc LIKE sy-subrc, + count TYPE i. + + +* Alle Ausprägungen <> '*' müssen angezeigt werden, d.h. +* ELINE darf nicht 0 sein. + CLEAR subrc. + LOOP AT g_planmerk WHERE eline IS INITIAL. + CLEAR count. + LOOP AT gs_bpsel-t_sel1 INTO s_sel1 + WHERE sort EQ kepp_c_sort_0200 + AND fnam EQ g_planmerk-fnam. + ADD 1 TO count. + IF s_sel1-option EQ 'BT' OR s_sel1-low NE '*'. + subrc = 4. + EXIT. + ENDIF. + ENDLOOP. + IF subrc EQ 4. + EXIT. + ENDIF. + IF count GT 1. + subrc = 4. + EXIT. + ENDIF. + ENDLOOP. + IF subrc EQ 4. + READ TABLE g_fieldtab WITH KEY tabname = g_ce0name + fieldname = g_planmerk-fnam. + MESSAGE i344 WITH g_fieldtab-scrtext_m. + LEAVE SCREEN. + ENDIF. + + READ TABLE g_tkebpfm WITH KEY event = '21'. + IF sy-subrc EQ 0. + + CALL FUNCTION g_tkebpfm-funcmo + EXPORTING + i_func = g_func + i_erkrs = g_erkrs + i_kokrs = g_kokrs + i_pa_type = g_pa_type + is_bpsel = gs_bpsel + TABLES + pt_fieldtab = g_fieldtab. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_all +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_ +*&---------------------------------------------------------------------* +FORM check_all USING VALUE(i_send_success) TYPE c. + + READ TABLE g_tkebpfm WITH KEY event = '30'. + IF sy-subrc EQ 0. + +* RKE_BP_CHECK_ALL 함수내에서, STD와의 구조문제로 +* g_planmerk 가 초기화 되는 문제로 일단 사용보류. 사용할 경우, +* 위 function을 customizing하여, g_planmerk 를 인수로 전달해야 할 듯. +* CALL FUNCTION g_tkebpfm-funcmo +* EXPORTING +* i_func = g_func +* i_erkrs = g_erkrs +* i_kokrs = g_kokrs +* i_pa_type = g_pa_type +* is_bpsel = gs_bpsel +* TABLES +* ith_fieldtab = g_fieldtab +* EXCEPTIONS +* error = 01. + + IF sy-subrc EQ 01. + MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + LEAVE SCREEN. + ELSE. + IF i_send_success EQ 'X'. + MESSAGE s110(k7). + ENDIF. + ENDIF. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form find_0201 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> FALSE +*&---------------------------------------------------------------------* +FORM find_0201 USING i_find_next. + STATICS: + BEGIN OF as_last, + search TYPE string, + found TYPE flag, + line TYPE int4, + col TYPE int4, + END OF as_last. + + DATA: + BEGIN OF s_search, + artfnam TYPE cepl4a-artfnam, + merktx TYPE cepl4a-merktx, + low TYPE cepl4a-low, + lowtx TYPE cepl4a-lowtx, + mhigh TYPE cepl4a-mhigh, + mhightx TYPE cepl4a-mhightx, + more TYPE flag, + ref TYPE int4, + END OF s_search. + + DATA: + t_search LIKE TABLE OF s_search, + p_struc_descr TYPE REF TO cl_abap_structdescr, + t_comp TYPE abap_component_tab, + s_comp LIKE LINE OF t_comp, + s_sel LIKE LINE OF gs_bpsel-t_sel1, + last_fnam TYPE fieldname, + s_field TYPE sval, + t_field TYPE TABLE OF sval, + subrc. + + FIELD-SYMBOLS: . + +*** get search columns + p_struc_descr ?= cl_abap_typedescr=>describe_by_data( s_search ). + t_comp[] = p_struc_descr->get_components( ) . + DELETE t_comp WHERE name = 'MORE' OR name = 'REF'. + +*** build search table + LOOP AT g_planmerk. + + CLEAR s_search. + +** characteristic + text + s_search-artfnam = g_planmerk-fnam. + s_search-ref = sy-tabix. + + READ TABLE g_fieldtab + WITH KEY + tabname = g_ce0name + fieldname = g_planmerk-fnam. + + IF sy-subrc = 0. + s_search-merktx = g_fieldtab-scrtext_m. + ENDIF. + +** low, high + text + LOOP AT gs_bpsel-t_sel1 INTO s_sel + WHERE sort = kepp_c_sort_0200 AND + fnam = g_planmerk-fnam. + + IF s_sel-low IS NOT INITIAL. + PERFORM evaluate_entry_output + USING + g_planmerk + s_sel-low + s_search-low + s_search-lowtx. + ENDIF. + IF s_sel-high IS NOT INITIAL. + PERFORM evaluate_entry_output + USING + g_planmerk + s_sel-high + s_search-mhigh + s_search-mhightx. + ENDIF. + +* more than one line ? + IF last_fnam = g_planmerk-fnam. + s_search-more = true. + ENDIF. + last_fnam = g_planmerk-fnam. + + APPEND s_search TO t_search. + + ENDLOOP. + + ENDLOOP. + +*** get search string + IF as_last-search IS INITIAL OR i_find_next IS INITIAL. + + CLEAR as_last. + s_field-tabname = 'TKEF'. + s_field-fieldname = 'FIENM'. + APPEND s_field TO t_field. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + popup_title = TEXT-008 + IMPORTING + returncode = subrc + TABLES + fields = t_field + EXCEPTIONS + OTHERS = 1. + + CHECK: sy-subrc = 0 AND subrc = space. + READ TABLE t_field INTO s_field INDEX 1. + as_last-search = s_field-value. + + ENDIF. + +*** find next line in table + CHECK as_last-search IS NOT INITIAL. + subrc = 4. + +** search in line + LOOP AT t_search INTO s_search FROM as_last-line. + +* search in column + LOOP AT t_comp INTO s_comp FROM as_last-col. + + ASSIGN COMPONENT s_comp-name OF STRUCTURE s_search TO . + FIND FIRST OCCURRENCE OF as_last-search IN IGNORING CASE. + IF sy-subrc = 0. + as_last-col = sy-tabix + 1. + as_last-found = true. + subrc = 0. + EXIT. + ENDIF. + + ENDLOOP. + IF subrc = 0. EXIT. ENDIF. + + as_last-col = 1. + as_last-line = sy-tabix + 1. + + ENDLOOP. + +*** set line and column + IF subrc = 0. + gs_0201-found_line = s_search-ref. + +** behind "more" > set next line for next search + IF s_search-more = true. + gs_0201-found_col = 'ICON_MORE'. + + LOOP AT t_search INTO s_search WHERE ref > s_search-ref. + as_last-line = sy-tabix. + EXIT. + ENDLOOP. + IF sy-subrc <> 0. + as_last-line = 1. + ENDIF. + + ELSE. + gs_0201-found_col = s_comp-name. + ENDIF. + +** a "find next" starts again from beginning + ELSEIF as_last-found = true. + as_last-col = 1. + as_last-line = 1. + PERFORM find_0201 USING true. "find next + +** nothing found + ELSE. + CLEAR gs_0201-found_line. + CLEAR gs_0201-found_col. + MESSAGE s628(ke) WITH as_last-search TEXT-007. + ENDIF. + + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form call_save_variant +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM call_save_variant . + + DATA: s_bpsel TYPE kepp_s_bpsel. + + DATA: s_sel1 LIKE LINE OF gs_bpsel-t_sel1. + + DATA: variant TYPE covad-variant. + + CLEAR s_bpsel. + s_bpsel = gs_bpsel. + IF g_pa_type EQ '2'. +* Kostenrechnungskreis noch dazufügen + s_sel1-sort = kepp_c_sort_0001. + s_sel1-fnam = 'KOKRS'. + s_sel1-option = 'EQ'. + s_sel1-sign = 'I'. + s_sel1-low = g_kokrs. + APPEND s_sel1 TO s_bpsel-t_sel1. + SORT s_bpsel-t_sel1 STABLE BY sort fnam. + ENDIF. + + IF cl_kepsl=>is_psl_active( g_erkrs ). + PERFORM split_curtps CHANGING s_bpsel. + ENDIF. + + CALL FUNCTION 'RKE_BP_VARIANT_SAVE' + EXPORTING + i_applclass = kepp_c_applclass + i_subclass = kepp_c_subclass + i_tabname = g_tabname + i_func = g_func + is_bpsel = s_bpsel + IMPORTING + e_variant = variant + TABLES + it_sort = gt_sort + it_box = gt_box + it_fnam = gt_fnam. + +*** set new unchanged variant + IF ( g_func = kepp_c_funcl-gitd OR + g_func = kepp_c_funcl-gipb ) AND + variant IS NOT INITIAL. + + DELETE gs_bpsel-t_sel1 + WHERE + sort = kepp_c_sort_0100 AND + fnam = kepp_c_cust_variant. + + CLEAR s_sel1. + s_sel1-sort = kepp_c_sort_0100. + s_sel1-fnam = kepp_c_cust_variant. + s_sel1-low = variant. + APPEND s_sel1 TO gs_bpsel-t_sel1. + +** copy 'old' customizing table (for later comparison) + gt_old_sel = gs_bpsel-t_sel1. + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form SPLIT_CURTPS +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- S_BPSEL +*&---------------------------------------------------------------------* +FORM split_curtps CHANGING cs_bpsel TYPE kepp_s_bpsel. + + DATA: count_curtp TYPE i, + text_count TYPE char4, + s_vrgar TYPE kepp_s_sel1. + FIELD-SYMBOLS TYPE kepp_s_sel1. + + s_vrgar-sort = kepp_c_sort_curtp_ref. + LOOP AT cs_bpsel-t_sel1 ASSIGNING WHERE sort = kepp_c_sort_curtp_ref AND + fnam = ident_dim_curtp . + count_curtp = count_curtp + 1. + text_count = count_curtp. + CONCATENATE -fnam text_count INTO -fnam. +** add temporary vrgar line for variant( import/export) + CONCATENATE 'VRGAR' text_count INTO s_vrgar-fnam. + S_vrgar-low = -lowtx. + S_vrgar-high = -hightx. + APPEND s_vrgar TO cS_BPSEL-t_sel1. + ENDLOOP. + +ENDFORM. diff --git a/src/zcopatd0010f01.prog.xml b/src/zcopatd0010f01.prog.xml new file mode 100644 index 0000000..8b9dcdd --- /dev/null +++ b/src/zcopatd0010f01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0010F01 + I + K + 3 + X + + + + R + Include ZCOPATD0010F01 + 22 + + + + + diff --git a/src/zcopatd0010i01.prog.abap b/src/zcopatd0010i01.prog.abap new file mode 100644 index 0000000..f28a23d --- /dev/null +++ b/src/zcopatd0010i01.prog.abap @@ -0,0 +1,110 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0010I01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module SET_DATAR INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE set_datar INPUT. + PERFORM set_datar. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module LOOP_PAI_201 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE loop_pai_201 INPUT. + + PERFORM LOOP_PAI_201. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module OK_CODE_201 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE ok_code_201 INPUT. + + PERFORM OK_CODE_201. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module EXIT_1000 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE exit_1000 INPUT. + + PERFORM EXIT_1000. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module LOOP_PAI_1100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE loop_pai_1100 INPUT. + + PERFORM LOOP_PAI_1100. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module OK_CODE_1100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE ok_code_1100 INPUT. + + PERFORM OK_CODE_1100. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module HELP_MLOW INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE help_mlow INPUT. + + PERFORM HELP_CRITERIA. + +ENDMODULE. +*----------------------------------------------------------------------* +* MODULE VAL_SRC_FROM INPUT * +*----------------------------------------------------------------------* +MODULE VAL_SRC_FROM INPUT. + + PERFORM VAL_CRITERIA_VALUE_1000 USING GT_REF-SRC_LOW + 'GT_REF-SRC_LOW_TXT'. + +ENDMODULE. "VAL_SRC_FROM INPUT + +*----------------------------------------------------------------------* +* MODULE VAL_SRC_TO INPUT * +*----------------------------------------------------------------------* +MODULE VAL_SRC_TO INPUT. + + PERFORM VAL_CRITERIA_VALUE_1000 USING GT_REF-SRC_HIGH + 'GT_REF-SRC_HIGH_TXT'. + +ENDMODULE. "VAL_SRC_TO INPUT + +*----------------------------------------------------------------------* +* MODULE VAL_REF_FROM INPUT * +*----------------------------------------------------------------------* +MODULE VAL_REF_FROM INPUT. + + PERFORM VAL_CRITERIA_VALUE_1000 USING GT_REF-REF_LOW + 'GT_REF-REF_LOW_TXT'. + +ENDMODULE. "VAL_REF_FROM INPUT + +*----------------------------------------------------------------------* +* MODULE VAL_REF_TO INPUT * +*----------------------------------------------------------------------* +MODULE VAL_REF_TO INPUT. + + PERFORM VAL_CRITERIA_VALUE_1000 USING GT_REF-REF_HIGH + 'GT_REF-REF_HIGH_TXT'. + +ENDMODULE. "VAL_REF_TO INPUT diff --git a/src/zcopatd0010i01.prog.xml b/src/zcopatd0010i01.prog.xml new file mode 100644 index 0000000..3b32d17 --- /dev/null +++ b/src/zcopatd0010i01.prog.xml @@ -0,0 +1,20 @@ + + + + + + ZCOPATD0010I01 + I + 3 + X + + + + R + Include ZCOPATD0010I01 + 22 + + + + + diff --git a/src/zcopatd0010o01.prog.abap b/src/zcopatd0010o01.prog.abap new file mode 100644 index 0000000..d13f0ad --- /dev/null +++ b/src/zcopatd0010o01.prog.abap @@ -0,0 +1,172 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0010O01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module SET_STATUS OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE set_status OUTPUT. + + SET PF-STATUS 'GITD' EXCLUDING g_fcodetab. + + " STD 기준으로 사용하는 함수 리스트 등록. + CLEAR g_tkebpfm. + g_tkebpfm-applclass = 'KE'. + g_tkebpfm-subclass = '02'. + g_tkebpfm-func = 'GITD'. + g_tkebpfm-event = '01'. + g_tkebpfm-funcmo = 'RKE_BP_INITIALIZATION'. + APPEND g_tkebpfm. + +* CLEAR g_tkebpfm. +* g_tkebpfm-applclass = 'KE'. +* g_tkebpfm-subclass = '02'. +* g_tkebpfm-func = 'GITD'. +* g_tkebpfm-event = '02'. +* g_tkebpfm-funcmo = 'RKE_BP_SET_CUA_STATUS'. +* APPEND g_tkebpfm. + + CLEAR g_tkebpfm. + g_tkebpfm-applclass = 'KE'. + g_tkebpfm-subclass = '02'. + g_tkebpfm-func = 'GITD'. + g_tkebpfm-event = '10'. + g_tkebpfm-funcmo = 'RKE_BP_CHECK_ALL_100'. + APPEND g_tkebpfm. + + CLEAR g_tkebpfm. + g_tkebpfm-applclass = 'KE'. + g_tkebpfm-subclass = '02'. + g_tkebpfm-func = 'GITD'. + g_tkebpfm-event = '20'. + g_tkebpfm-funcmo = 'RKE_BP_CHECK_SINGLE_200'. + APPEND g_tkebpfm. + + CLEAR g_tkebpfm. + g_tkebpfm-applclass = 'KE'. + g_tkebpfm-subclass = '02'. + g_tkebpfm-func = 'GITD'. + g_tkebpfm-event = '21'. + g_tkebpfm-funcmo = 'RKE_BP_CHECK_ALL_200'. + APPEND g_tkebpfm. + + CLEAR g_tkebpfm. + g_tkebpfm-applclass = 'KE'. + g_tkebpfm-subclass = '02'. + g_tkebpfm-func = 'GITD'. + g_tkebpfm-event = '30'. + g_tkebpfm-funcmo = 'RKE_BP_CHECK_ALL'. + APPEND g_tkebpfm. + +*** new codes default off +* g_fcodetab-ok_code = kepp_c_okcode-sfvw. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-xtxt. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-find. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-fndp. COLLECT g_fcodetab. +* +* g_fcodetab-ok_code = kepp_c_okcode-pleb. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-sela. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-selk. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-vaho. COLLECT g_fcodetab. +* g_fcodetab-ok_code = kepp_c_okcode-vatr. COLLECT g_fcodetab. +** IF sy-dynnr = kepp_c_dynnr-plebn. +* IF sy-dynnr = kepp_c_dynnr-grnd. +** DELETE g_fcodetab WHERE ok_code = kepp_c_okcode-xtxt. +** DELETE g_fcodetab WHERE ok_code = kepp_c_okcode-find. +** DELETE g_fcodetab WHERE ok_code = kepp_c_okcode-fndp. +* ENDIF. + + + +* READ TABLE g_tkebpfm WITH KEY event = '02'. +* IF sy-subrc EQ 0. +* +* CALL FUNCTION g_tkebpfm-funcmo +* EXPORTING +* i_func = g_func +* i_dnum = g_dnum +* i_prog = kepp_c_prog +* TABLES +* pt_fcode = g_fcodetab. +* ENDIF. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module INIT_201 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE init_201 OUTPUT. + + PERFORM init_201. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module HELP_LOW_200 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE help_low_200 INPUT. + + PERFORM help_low USING g_begin_200. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module VAL_LOW_201 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE val_low_201 INPUT. + + PERFORM val_low_201 USING g_begin_200 kepp_c_sort_0200. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module VAL_HIGH_201 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE val_high_201 INPUT. + + PERFORM val_high_201 USING g_begin_200 kepp_c_sort_0200. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module LOOP_PBO_100 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE loop_pbo_100 OUTPUT. + PERFORM loop_pbo_100. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module INIT_1100 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE init_1100 OUTPUT. + + PERFORM init_1100. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module LOOP_PBO_1100 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE loop_pbo_1100 OUTPUT. + + PERFORM loop_pbo_1100. + +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module GET_MARK_FROM_1100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE get_mark_from_1100 INPUT. + + MODIFY gt_ref INDEX tc_ref-current_line + TRANSPORTING mark. + +ENDMODULE. diff --git a/src/zcopatd0010o01.prog.xml b/src/zcopatd0010o01.prog.xml new file mode 100644 index 0000000..444c7ec --- /dev/null +++ b/src/zcopatd0010o01.prog.xml @@ -0,0 +1,20 @@ + + + + + + ZCOPATD0010O01 + I + 3 + X + + + + R + Include ZCOPATD0010O01 + 22 + + + + + diff --git a/src/zcopatd0010top.prog.abap b/src/zcopatd0010top.prog.abap new file mode 100644 index 0000000..3d6958b --- /dev/null +++ b/src/zcopatd0010top.prog.abap @@ -0,0 +1,137 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0010TOP - Report ZCOPATD0010 +*&---------------------------------------------------------------------* +REPORT zcopatd0010 MESSAGE-ID ztopdown. +INCLUDE zcopatdcommtop . " 패키지 공용 Data + +TABLES: cepl4a, t821t, tkepc, tkequs1t, tkeplexitt, tkeptrt,cepl4b. + +* strategies +CONSTANTS: g_c_distri LIKE tkepplsz-type VALUE '1'. +CONSTANTS: g_c_forec LIKE tkepplsz-type VALUE '2'. +CONSTANTS: g_c_reval LIKE tkepplsz-type VALUE '3'. +CONSTANTS: g_c_treval LIKE tkepplsz-type VALUE '4'. +CONSTANTS: true VALUE 'X', false VALUE space, + ident_dim_curtp LIKE ceformf-field VALUE 'CURTP'. + +DATA : g_topdown TYPE REF TO zcl_copa_topdown. + +DATA: g_char_type. + +TYPES: + BEGIN OF ys_ref_on_screen, + mark TYPE flag, + fnam LIKE cedst-fnam. + INCLUDE TYPE kepp_s_src. + INCLUDE TYPE kepp_s_ref. +TYPES: + src_low_txt TYPE scrtext_m, + src_high_txt TYPE scrtext_m, + ref_low_txt TYPE scrtext_m, + ref_high_txt TYPE scrtext_m, + icon_more TYPE char5, + icon_sel TYPE char5, + END OF ys_ref_on_screen. + +TYPES: + BEGIN OF ys_0201, + show_text, + found_col TYPE fieldname, + found_line TYPE int4, + END OF ys_0201, + + BEGIN OF ys_1100, + fieldname TYPE fieldname, + fieldname_txt TYPE scrtext_m, + entry_count(8) TYPE n, + cursor_line TYPE n, + but_filter TYPE char5, + but_filter_txt TYPE char30, + found_col TYPE fieldname, + found_line TYPE int4, + show_text, + show_from_to, + col_optimize, + + END OF ys_1100. + +DATA: BEGIN OF g_fieldtabkey, + tabname LIKE dd03p-tabname, + fieldname LIKE dd03p-fieldname, + END OF g_fieldtabkey. + + +DATA: tscrol(1) OCCURS 0 WITH HEADER LINE. +DATA: g_planmerk LIKE cepl5 OCCURS 0 WITH HEADER LINE. +DATA: g_planwert LIKE cepl9 OCCURS 0 WITH HEADER LINE. + +DATA: g_tkebpfm LIKE tkebpfm OCCURS 0 WITH HEADER LINE. +DATA: gs_tkeb TYPE rkea1_v_tkeb. +DATA: g_tkebpsf LIKE tkebpsf OCCURS 0 WITH HEADER LINE, + gt_fnam TYPE kepp_t_fnam WITH HEADER LINE, + gt_sort TYPE kepp_t_sort WITH HEADER LINE, + gt_box TYPE kepp_t_box WITH HEADER LINE. + +DATA : + gt_backup_ref TYPE STANDARD TABLE OF ys_ref_on_screen + WITH HEADER LINE, + gt_backup_multi TYPE STANDARD TABLE OF ys_ref_on_screen + WITH HEADER LINE. + +DATA: g_fcodetab LIKE kpp0i OCCURS 0 WITH HEADER LINE. + +DATA : g_exit(1), + g_tfill_200 LIKE sy-tfill, + g_func LIKE tkebpsf-func VALUE 'GITD', + gs_0201 TYPE ys_0201, + g_begin_200 LIKE sy-tabix, + g_datar LIKE sy-datar, + g_index_200 LIKE sy-tabix VALUE 1, + g_ce0name LIKE dd03p-tabname VALUE 'CE01000', + g_ce1name LIKE dd03p-tabname VALUE 'CE11000', + g_tabname LIKE dd03p-tabname VALUE 'CEx1000', + kepp_c_prog LIKE tkebpsf-prog VALUE 'SAPLKEPP', + g_fcode LIKE kpp0i-ok_code, + g_dnum LIKE tkebpsf-dnum VALUE '0200', + g_fnam TYPE kepp_s_sel1-fnam, + g_display(1), + gt_chartab TYPE kepp_t_sel1 WITH HEADER LINE, + gs_1100 TYPE ys_1100, + g_first_pbo_1100 TYPE flag, + g_loopc_200 LIKE sy-tabix, + g_begin_1000 LIKE sy-tabix, + g_tfill_1000 LIKE sy-tfill, + g_loopc_1000 LIKE sy-tabix. + +** curtp texts +DATA: src_high TYPE char20, + ref_high TYPE char20. + +DATA: gs_bpsel TYPE kepp_s_bpsel, + gt_old_sel TYPE kepp_t_sel1. + +DATA: g_fieldtab TYPE rkea1_fieldtab WITH HEADER LINE. +DATA: g_ftab_dep TYPE rkea1_t_depend WITH HEADER LINE. + +DATA: g_erkrs LIKE tkeb-erkrs VALUE '1000', + g_kokrs LIKE tka01-kokrs, + g_pa_type LIKE ceddb-pa_type VALUE '1'. + +DATA: subrc LIKE sy-subrc. + +DATA: + gt_ref TYPE STANDARD TABLE OF ys_ref_on_screen WITH HEADER LINE, + gt_multi TYPE STANDARD TABLE OF ys_ref_on_screen WITH HEADER LINE. + +CONTROLS: + tctd_sk TYPE TABLEVIEW USING SCREEN '0100', + tc_ref TYPE TABLEVIEW USING SCREEN '1100'. + + + +*-- Selection Screen 입력값 +SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-s01. + PARAMETERS: p_erkrs TYPE erkrs OBLIGATORY, "경영단위 코드 + p_perio TYPE jahrper OBLIGATORY, "기간(YYYYMM) + p_varint TYPE covariant OBLIGATORY. "변형 +SELECTION-SCREEN END OF BLOCK b1. diff --git a/src/zcopatd0010top.prog.xml b/src/zcopatd0010top.prog.xml new file mode 100644 index 0000000..8692a6a --- /dev/null +++ b/src/zcopatd0010top.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0010TOP + I + K + 3 + X + + + + R + Include ZCOPATD0010TOP + 22 + + + + + diff --git a/src/zcopatd0020.prog.abap b/src/zcopatd0020.prog.abap new file mode 100644 index 0000000..7113bac --- /dev/null +++ b/src/zcopatd0020.prog.abap @@ -0,0 +1,39 @@ +*&---------------------------------------------------------------------* +*& Report ZCOPATD0020 +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* + +INCLUDE zcopatd0020top . " Global Data +INCLUDE zcopatdcommF01 . " 패키지 Form-Routines +INCLUDE zcopatd0020o01 . " PBO-Modules +INCLUDE zcopatd0020i01 . " PAI-Modules +INCLUDE zcopatd0020f01 . " FORM-Routines + + +*----------------------------------------------------------------------* +* INITIALIZATION * +*----------------------------------------------------------------------* +INITIALIZATION. + PERFORM get_table_info. "패키지 DB Table 정보(필수 사전 작업) + +*----------------------------------------------------------------------* +* AT SELECTION-SCREEN * +*----------------------------------------------------------------------* +AT SELECTION-SCREEN. + + +*----------------------------------------------------------------------* +* START-OF-SELECTION. +*----------------------------------------------------------------------* +START-OF-SELECTION. + + PERFORM show_progress(sapfztdpool) USING 30 '데이타 조회 중 입니다.'. + + PERFORM select_data. + +*----------------------------------------------------------------------* +* END-OF-SELECTION. +*----------------------------------------------------------------------* +END-OF-SELECTION. + CALL SCREEN 0100. diff --git a/src/zcopatd0020.prog.xml b/src/zcopatd0020.prog.xml new file mode 100644 index 0000000..aabb0c7 --- /dev/null +++ b/src/zcopatd0020.prog.xml @@ -0,0 +1,293 @@ + + + + + + ZCOPATD0020 + 1 + K + 3 + X + X + + + +

+ ZCOPATD0020 + 0100 + 3 + 조회 + N + 0100 + 043 + 219 +
+ + + SCREEN + SCREEN + + + CUST_CTRL + CONTAINER_LEFT + SCREEN + 003 + 002 + 094 + 040 + X + X + 019 + 040 + + + CUST_CTRL + CONTAINER_RIGHT + SCREEN + 003 + 114 + 094 + 040 + X + X + 019 + 040 + + + + + SCREEN + SCREEN + TEXT + %#AUTOTEXT001 + 전체_변형_리스트_______ + 002 + 002 + 016 + 016 + 001 + CHAR + N + + + SCREEN + SCREEN + TEXT + %#AUTOTEXT002 + 선택_리스트_____ + 002 + 114 + 011 + 011 + 001 + CHAR + N + + + SCREEN + SCREEN + PUSH + BTN_ADD + >>__지정__>>_____ + 008 + 098 + 015 + 015 + 001 + ADD + CHAR + N + + + SCREEN + SCREEN + PUSH + BTN_DEL + <<__해제__<<_____ + 010 + 098 + 015 + 015 + 001 + DEL + CHAR + N + + + SCREEN + SCREEN + OKCODE + OK_CODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + + + PROCESS BEFORE OUTPUT. + + + MODULE status_0100. + + + MODULE init_object_010. + + + + PROCESS AFTER INPUT. + + + MODULE exit_0100 AT EXIT-COMMAND. + + + MODULE user_command_0100. + + + + + + + 000001 + 000001 + + + + 0100 + D + 000001 + 000001 + 0001 + 조회 + + + + + BACK + 001 + E + S + 뒤로 + + + EXIT + 001 + E + S + ICON_CANCEL + @0W@ + 취소 + + + RW + 001 + E + S + 종료 + + + SAVE + 001 + S + ICON_SYSTEM_SAVE + @2L@ + 저장 + + + + + 000001 + 03 + BACK + 001 + + + 000001 + 11 + SAVE + 001 + + + 000001 + 12 + EXIT + 001 + + + 000001 + 15 + RW + 001 + + + + + 0100 + BACK + + + 0100 + EXIT + + + 0100 + RW + + + 0100 + SAVE + + + + + A + 000001 + D + 조회 + + + P + 000001 + D + 조회 + + + B + 000001 + 0001 + D + 조회 + + + + + + I + S01 + 선택조건 + 14 + + + R + 하향식 배부 사이클 지정 + 13 + + + S + P_ERKRS + 경영 단위 + 13 + + + S + P_PERIO + 기간/년도 + 13 + + + + + diff --git a/src/zcopatd0020f01.prog.abap b/src/zcopatd0020f01.prog.abap new file mode 100644 index 0000000..76d6728 --- /dev/null +++ b/src/zcopatd0020f01.prog.abap @@ -0,0 +1,361 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0020F01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Form select_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM select_data . + PERFORM get_variant_list. "하향식 배부 변형 리스트 조회(좌측 grid) + PERFORM get_selected_variant_list. "선택 변형 리스트 조회(우측 grid) + + IF gt_covat_all[] IS INITIAL AND gt_covat_sel[] IS INITIAL. + MESSAGE e006. "데이타가 존재하지 않습니다. + ENDIF. + + PERFORM exclude_variant_list. "이미 선택된 변형은 전체 리스트에서 제외 +ENDFORM. +*&---------------------------------------------------------------------* +*& Form get_variant_list +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM get_variant_list . + + PERFORM get_variant_list(sapfztdpool) TABLES gt_covat_all + USING p_erkrs. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form get_selected_variant_list +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM get_selected_variant_list . + + PERFORM get_target_variant(sapfztdpool) TABLES gt_covat_sel + USING p_erkrs + p_perio. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_object +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_object . + + PERFORM create_left_grid. + PERFORM create_right_grid. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_left_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_left_grid . + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-sel_mode = 'A'. " 행 선택 버튼 활성화 + +* 1. 컨테이너 생성 + CREATE OBJECT g_container_left + EXPORTING + container_name = 'CONTAINER_LEFT'. + +* 2. ALV Grid 생성 + CREATE OBJECT g_grid_left + EXPORTING + i_parent = g_container_left. + +* 3. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog USING 'CONTAINER_LEFT' lt_fieldcat. + +* 4. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + CALL METHOD g_grid_left->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = lt_fieldcat + it_outtab = gt_covat_all. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_right_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_right_grid . + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-sel_mode = 'A'. " 행 선택 버튼 활성화 + +* 1. 컨테이너 생성 + CREATE OBJECT g_container_right + EXPORTING + container_name = 'CONTAINER_RIGHT'. + +* 2. ALV Grid 생성 + CREATE OBJECT g_grid_right + EXPORTING + i_parent = g_container_right. + +* 3. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog USING 'CONTAINER_RIGHT' lt_fieldcat. + +* 4. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + CALL METHOD g_grid_right->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = lt_fieldcat + it_outtab = gt_covat_sel. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form add_variant_select_item +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM add_variant_select_item . + DATA: lt_row TYPE lvc_t_roid, + ls_row TYPE lvc_s_roid, + ls_select TYPE ty_variant. + + CALL METHOD g_grid_left->get_selected_rows + IMPORTING + et_row_no = lt_row. + + IF lt_row[] IS INITIAL. + MESSAGE s005 WITH '지정할 대상'. + RETURN. + ENDIF. + + " 선택된 데이터 처리 + LOOP AT lt_row INTO ls_row. + CLEAR : ls_select. + + READ TABLE gt_covat_all INTO DATA(ls_data) INDEX ls_row-row_id. + MOVE-CORRESPONDING ls_data TO ls_select. + ls_select-perio = p_perio. + APPEND ls_select TO gt_covat_sel. + + ENDLOOP. + + LOOP AT gt_covat_sel INTO DATA(ls_del). + DELETE gt_covat_all WHERE variant = ls_del-variant. + ENDLOOP. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form delete_variant_select_item +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM delete_variant_select_item . + DATA: lt_row TYPE lvc_t_roid, + ls_row TYPE lvc_s_roid, + ls_select TYPE ty_variant. + + CALL METHOD g_grid_right->get_selected_rows + IMPORTING + et_row_no = lt_row. + + IF lt_row[] IS INITIAL. + MESSAGE e005 WITH '해제할 대상'. + ENDIF. + + " 선택된 데이터 사용 유무 점검 + LOOP AT lt_row INTO ls_row. + READ TABLE gt_covat_sel INTO DATA(ls_data) INDEX ls_row-row_id. + IF ls_data-sender = 'X' OR ls_data-receiver = 'X' OR ls_data-proc_dist = 'X' + OR ls_data-post = 'X'. + MESSAGE i001 WITH '지정을 취소'. + RETURN. + ENDIF. + ENDLOOP. + + LOOP AT lt_row INTO ls_row. + READ TABLE gt_covat_sel INTO DATA(ls_sel) INDEX ls_row-row_id. + APPEND ls_sel TO gt_covat_all. "지정 해제된 건은 다시 선택 대상으로 추가(이동) + + ENDLOOP. + + LOOP AT gt_covat_all INTO DATA(ls_del). + DELETE gt_covat_sel WHERE variant = ls_del-variant. + ENDLOOP. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form exclude_variant_list +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM exclude_variant_list . + LOOP AT gt_covat_sel INTO DATA(l_sel). + "전체 변형 리스트 중에서, 이미 해당월 작업 대상으로 추가된 경우는 삭제. + PERFORM delete_sel_itm_from_all USING l_sel-erkrs l_sel-variant. + ENDLOOP. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form delete_sel_itm_from_all +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> ERKRS +*& --> VARIANT +*&---------------------------------------------------------------------* +FORM delete_sel_itm_from_all USING p_erkrs + p_variant. + DELETE gt_covat_all WHERE erkrs = p_erkrs + AND variant = p_variant. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form save_selected_variant +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM save_selected_variant . + DATA : ans TYPE c LENGTH 1. + DATA lv_question TYPE string. + + MESSAGE s002 INTO lv_question. + + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + titlebar = '변형저장' + text_question = lv_question + text_button_1 = 'OK' + icon_button_1 = 'ICON_CHECKED' + text_button_2 = 'NO' + icon_button_2 = 'ICON_NO' + display_cancel_button = ' ' + popup_type = 'ICON_MESSAGE_ERROR' + IMPORTING + answer = ans. + + IF ans = 2. + RETURN. + ENDIF. + + DELETE FROM (gv_variant) WHERE erkrs = p_erkrs + AND perio = p_perio. + + MODIFY (gv_variant) FROM TABLE gt_covat_sel. + IF sy-subrc NE 0. + ROLLBACK WORK. + MESSAGE e004 WITH '오류'. + ENDIF. + + "배부 기준 세부 정보 삭제(초기화) + DELETE FROM (gv_distinfo) WHERE erkrs = p_erkrs + AND perio = p_perio. + + "기간/연도의 모든 배부 기준 세부 정보 재 생성 - Class 메소드 사용 + CREATE OBJECT g_top_down. + + LOOP AT gt_covat_sel INTO DATA(ls_sel). + + CALL METHOD g_top_down->set_variant_desc + EXPORTING + erkrs = p_erkrs + variant = ls_sel-variant + perio = p_perio. + + ENDLOOP. + + + + COMMIT WORK. + MESSAGE s007 WITH '성공'. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_field_catalog +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM set_field_catalog USING VALUE(lv_container_name) TYPE c + pt_fieldcat TYPE lvc_t_fcat. + FIELD-SYMBOLS TYPE lvc_s_fcat. + +* structure의 필드 얻기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = 'ZSTOP_VARIANT' + CHANGING + ct_fieldcat = pt_fieldcat[] + EXCEPTIONS + inconsistent_interface = 1 + program_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + LOOP AT pt_fieldcat ASSIGNING . + CASE -fieldname. + WHEN 'ERKRS'. + -key = 'X'. + WHEN 'PERIO'. + IF LV_CONtainer_name = 'CONTAINER_LEFT'. + -tech = 'X'. + ELSE. + -key = 'X'. + ENDIF. + WHEN 'VARIANT'. + -key = 'X'. + WHEN 'VTEXT'. + -key = 'X'. + WHEN 'SENDER'. + -seltext = -coltext = '센더데이타 생성'. + -col_opt = 'X'. + WHEN 'RECEIVER'. + -seltext = -coltext = '리시버 실적 집계'. + -col_opt = 'X'. + WHEN 'PROC_DIST'. + -seltext = -coltext = '배부 수행'. + -col_opt = 'X'. + WHEN 'POST'. + -seltext = -coltext = 'PA전표 전기'. + -col_opt = 'X'. + WHEN OTHERS. + -tech = 'X'. + ENDCASE. + ENDLOOP. + + +ENDFORM. diff --git a/src/zcopatd0020f01.prog.xml b/src/zcopatd0020f01.prog.xml new file mode 100644 index 0000000..529cbcb --- /dev/null +++ b/src/zcopatd0020f01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0020F01 + I + K + 3 + X + + + + R + Include ZCOPATD0020F01 + 22 + + + + + diff --git a/src/zcopatd0020i01.prog.abap b/src/zcopatd0020i01.prog.abap new file mode 100644 index 0000000..00b1871 --- /dev/null +++ b/src/zcopatd0020i01.prog.abap @@ -0,0 +1,33 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0020I01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module USER_COMMAND_0100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE user_command_0100 INPUT. + + CASE ok_code. + WHEN 'ADD'. + PERFORM add_variant_select_item. + WHEN 'DEL'. + PERFORM delete_variant_select_item. + WHEN 'SAVE'. + PERFORM save_selected_variant. + ENDCASE. + + CALL METHOD g_grid_left->refresh_table_display. + CALL METHOD g_grid_right->refresh_table_display. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module EXIT_0100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE exit_0100 INPUT. + CASE ok_code. + WHEN 'BACK' OR 'RW' OR 'EXIT'. + LEAVE TO SCREEN 0. + ENDCASE. +ENDMODULE. diff --git a/src/zcopatd0020i01.prog.xml b/src/zcopatd0020i01.prog.xml new file mode 100644 index 0000000..e6cde3a --- /dev/null +++ b/src/zcopatd0020i01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0020I01 + I + K + 3 + X + + + + R + Include ZCOPATD0020I01 + 22 + + + + + diff --git a/src/zcopatd0020o01.prog.abap b/src/zcopatd0020o01.prog.abap new file mode 100644 index 0000000..12cbe49 --- /dev/null +++ b/src/zcopatd0020o01.prog.abap @@ -0,0 +1,22 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0020O01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module STATUS_0100 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE status_0100 OUTPUT. + SET PF-STATUS '0100'. +* SET TITLEBAR 'xxx'. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module INIT_OBJECT_010 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE init_object_010 OUTPUT. + IF g_container_left IS INITIAL. + PERFORM create_object. + ENDIF. +ENDMODULE. diff --git a/src/zcopatd0020o01.prog.xml b/src/zcopatd0020o01.prog.xml new file mode 100644 index 0000000..311baff --- /dev/null +++ b/src/zcopatd0020o01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0020O01 + I + K + 3 + X + + + + R + Include ZCOPATD0020O01 + 22 + + + + + diff --git a/src/zcopatd0020top.prog.abap b/src/zcopatd0020top.prog.abap new file mode 100644 index 0000000..8d8cbea --- /dev/null +++ b/src/zcopatd0020top.prog.abap @@ -0,0 +1,18 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0020TOP - Report ZCOPATD0020 +*&---------------------------------------------------------------------* +REPORT zcopatd0020 MESSAGE-ID ztopdown. + +INCLUDE zcopatdcommtop . " 패키지 공용 Data + +*-- 내부 테이블/워크에어리어 +DATA: gt_covat_all TYPE TABLE OF ty_variant, "전체 목록(좌측) + gt_covat_sel TYPE TABLE OF ty_variant. "선택 목록(우측) + +*-- Selection Screen 입력값 +SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-s01. + + PARAMETERS: p_erkrs TYPE erkrs OBLIGATORY, "경영단위 코드 + p_perio TYPE jahrper OBLIGATORY. "기간(YYYYMM) + +SELECTION-SCREEN END OF BLOCK b1. diff --git a/src/zcopatd0020top.prog.xml b/src/zcopatd0020top.prog.xml new file mode 100644 index 0000000..53dce64 --- /dev/null +++ b/src/zcopatd0020top.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0020TOP + I + K + 3 + X + + + + R + Include ZCOPATD0020TOP + 22 + + + + + diff --git a/src/zcopatd0030.prog.abap b/src/zcopatd0030.prog.abap new file mode 100644 index 0000000..829ea31 --- /dev/null +++ b/src/zcopatd0030.prog.abap @@ -0,0 +1,42 @@ +*&---------------------------------------------------------------------* +*& Report ZCOPATD0030 +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* + +INCLUDE zcopatd0030top . " Global Data +INCLUDE ZCOPATD0030c01 . "Event. +INCLUDE zcopatdcommF01 . " 패키지 Form-Routines +INCLUDE zcopatd0030o01 . " PBO-Modules +INCLUDE zcopatd0030i01 . " PAI-Modules +INCLUDE zcopatd0030f01 . " FORM-Routines + +*----------------------------------------------------------------------* +* INITIALIZATION * +*----------------------------------------------------------------------* +INITIALIZATION. + PERFORM get_table_info. "패키지 DB Table 정보(필수 사전 작업) + +*----------------------------------------------------------------------* +* AT SELECTION-SCREEN * +*----------------------------------------------------------------------* +AT SELECTION-SCREEN. + + +*----------------------------------------------------------------------* +* START-OF-SELECTION. +*----------------------------------------------------------------------* +START-OF-SELECTION. + PERFORM show_progress(sapfztdpool) USING 30 '데이타 조회 중 입니다.'. + + PERFORM select_data. + PERFORM make_simple_tree_node. + +* 하향식 배부 클래스 생성. + PERFORM create_top_down_object. + +*----------------------------------------------------------------------* +* END-OF-SELECTION. +*----------------------------------------------------------------------* +END-OF-SELECTION. + CALL SCREEN 0100. diff --git a/src/zcopatd0030.prog.xml b/src/zcopatd0030.prog.xml new file mode 100644 index 0000000..0e96ce5 --- /dev/null +++ b/src/zcopatd0030.prog.xml @@ -0,0 +1,626 @@ + + + + + + ZCOPATD0030 + 1 + K + 3 + X + X + + + +
+ ZCOPATD0030 + 0100 + 3 + 조회 + N + 0100 + 045 + 218 +
+ + + SCREEN + SCREEN + + + STRIP_CTRL + C_TAB + SCREEN + 001 + 001 + 216 + 045 + X + X + 045 + 216 + + + SUBSCREEN + TAB1_SUB + C_TAB + 003 + 002 + 214 + 042 + X + X + 003 + 003 + X + X + + + SUBSCREEN + TAB2_SUB + C_TAB + 003 + 002 + 214 + 042 + X + X + 003 + 003 + X + X + + + SUBSCREEN + TAB3_SUB + C_TAB + 003 + 002 + 214 + 042 + X + X + 003 + 003 + X + X + + + + + SCREEN + SCREEN + OKCODE + OK_CODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + STRIP_CTRL + C_TAB + PUSH + TAB1 + 리시버___ + 001 + 001 + 006 + 006 + 001 + TAB1 + CHAR + N + TAB1_SUB + + + STRIP_CTRL + C_TAB + PUSH + TAB2 + 배부결과____ + 001 + 002 + 008 + 008 + 001 + TAB2 + CHAR + N + TAB2_SUB + + + STRIP_CTRL + C_TAB + PUSH + TAB3 + CO-PA_전표__ + 001 + 003 + 010 + 010 + 001 + TAB3 + CHAR + N + TAB3_SUB + + + + + PROCESS BEFORE OUTPUT. + + + MODULE status_0100. + + + MODULE init_object_010. + + + MODULE set_tabs. + + + + CALL SUBSCREEN tab1_sub INCLUDING sy-repid '0101'. + + + CALL SUBSCREEN tab2_sub INCLUDING sy-repid '0102'. + + + CALL SUBSCREEN tab3_sub INCLUDING sy-repid '0103'. + + + + + PROCESS AFTER INPUT. + + + MODULE exit_0100 AT EXIT-COMMAND. + + + MODULE user_command_0100. + + + + CALL SUBSCREEN tab1_sub. + + + CALL SUBSCREEN tab2_sub. + + + CALL SUBSCREEN tab3_sub. + + +
+ +
+ ZCOPATD0030 + 0101 + 3 + 조회 + I + 0101 + 045 + 217 +
+ + + SCREEN + SCREEN + + + CUST_CTRL + C_TAB1 + SCREEN + 001 + 001 + 217 + 045 + X + X + 001 + 108 + + + + + SCREEN + SCREEN + OKCODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + + + PROCESS BEFORE OUTPUT. + + + MODULE tab1_pbo. + + + + PROCESS AFTER INPUT. + + + * MODULE USER_COMMAND_0201. + + +
+ +
+ ZCOPATD0030 + 0102 + 3 + 조회 + I + 0102 + 045 + 218 +
+ + + SCREEN + SCREEN + + + CUST_CTRL + C_TAB2 + SCREEN + 001 + 001 + 218 + 045 + X + X + 020 + 109 + + + + + SCREEN + SCREEN + OKCODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + + + PROCESS BEFORE OUTPUT. + + + MODULE tab2_pbo. + + + + PROCESS AFTER INPUT. + + + * MODULE USER_COMMAND_0202. + + +
+ +
+ ZCOPATD0030 + 0103 + 3 + 조회 + I + 0103 + 045 + 218 +
+ + + SCREEN + SCREEN + + + CUST_CTRL + C_TAB3 + SCREEN + 001 + 001 + 218 + 045 + X + X + 020 + 109 + + + + + SCREEN + SCREEN + OKCODE + ____________________ + 020 + 020 + 001 + CHAR + X + + + + + PROCESS BEFORE OUTPUT. + + + MODULE tab3_pbo. + + + + PROCESS AFTER INPUT. + + + * MODULE USER_COMMAND_0202. + + +
+
+ + + 000001 + 000001 + + + + 0100 + D + 000001 + 000001 + 0001 + 조회 + + + + + BACK + 001 + E + S + 뒤로 + + + CONFIRM + 001 + S + ICON_WORKING_PLAN + @AJ@ + ICON_WORKING_PLAN + 배부기준 확정 + 배부기준 확정 + + + DELETE + 001 + S + ICON_DELETE_TEMPLATE + @Q0@ + 센더/리시버 데이타 삭제 + 센더/리시버 데이타 삭제 + 센더/리시버 데이타 삭제합니다. + + + EXEC + 001 + S + ICON_EXECUTE_OBJECT + @15@ + 하향식 배부 실행 + 하향식 배부 실행 + 하향식 배부 실제 수행 + + + EXIT + 001 + E + S + ICON_CANCEL + @0W@ + 취소 + + + POST + 001 + S + ICON_SYSTEM_SAVE + @2L@ + POST + 전표전기 + 전표전기 + + + REGEN + 001 + S + ICON_WRITE_FILE + @HK@ + 센더/리시버 데이타 추출 + 센더/리시버 데이타 추출 + 센더/리시버 데이타 추출합니다. + + + RW + 001 + E + S + 종료 + + + SAVE + 001 + S + ICON_SYSTEM_SAVE + @2L@ + 저장 + + + + + 000001 + 0001 + 01 + 18 + + + 000001 + 0001 + 02 + 21 + + + 000001 + 0001 + 03 + 20 + + + 000001 + 0001 + 04 + 23 + + + + + 000001 + 03 + BACK + 001 + + + 000001 + 12 + EXIT + 001 + + + 000001 + 15 + RW + 001 + + + 000001 + 18 + CONFIRM + 001 + + + 000001 + 20 + REGEN + 001 + + + 000001 + 21 + DELETE + 001 + + + 000001 + 23 + EXEC + 001 + + + + + 0100 + BACK + + + 0100 + CONFIRM + + + 0100 + DELETE + + + 0100 + EXEC + + + 0100 + EXIT + + + 0100 + REGEN + + + 0100 + RW + + + 0100 + SAVE + + + + + A + 000001 + D + 조회 + + + P + 000001 + D + 조회 + + + B + 000001 + 0001 + D + 조회 + + + + + + I + S01 + 선택조건 + 14 + + + R + 하향식 배부 수행 + 9 + + + S + P_ERKRS + 경영 단위 + 13 + + + S + P_PERIO + 기간/년도 + 13 + + +
+
+
diff --git a/src/zcopatd0030c01.prog.abap b/src/zcopatd0030c01.prog.abap new file mode 100644 index 0000000..cbcb1ec --- /dev/null +++ b/src/zcopatd0030c01.prog.abap @@ -0,0 +1,156 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0030C01 +*&---------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +* Object Event +*----------------------------------------------------------------------* + +CLASS lcl_event_receiver DEFINITION. + PUBLIC SECTION. + " Tree node 더블클릭 이벤트 + METHODS: handle_node_double_click + FOR EVENT node_double_click OF cl_gui_simple_tree + IMPORTING node_key. + + "ALV ToolBar 핸들러 + METHODS: handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid + IMPORTING e_object sender, + handle_user_command FOR EVENT user_command OF cl_gui_alv_grid + IMPORTING e_ucomm sender. + + "ALV 더블클릭 이벤트 핸들러. + METHODS: handle_double_click + FOR EVENT double_click OF cl_gui_alv_grid + IMPORTING e_row e_column es_row_no sender. +ENDCLASS. + +CLASS lcl_event_receiver IMPLEMENTATION. + METHOD handle_node_double_click. + PERFORM select_sender_receiver_data USING node_key. + ENDMETHOD. + + METHOD handle_toolbar. + DATA ls_toolbar TYPE stb_button. + CLEAR ls_toolbar. + + ls_toolbar-function = '&&SEP07'. + ls_toolbar-butn_type = 3. "분리자 + APPEND ls_toolbar TO e_object->mt_toolbar. + + CASE sender. + WHEN g_grid_sender. + CLEAR ls_toolbar. + ls_toolbar-function = 'FUNC1'. +* ls_toolbar-icon = icon_display. + ls_toolbar-text = '전체 조회'. + ls_toolbar-quickinfo = '이전 전체 데이타 조회 상태로 전환'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + WHEN g_grid_receiver. + CLEAR ls_toolbar. + ls_toolbar-function = 'FUNC1'. + ls_toolbar-text = '전체 조회'. + ls_toolbar-quickinfo = '이전 전체 데이타 조회 상태로 전환'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + WHEN g_grid_result. + CLEAR ls_toolbar. + ls_toolbar-function = 'FUNC1'. + ls_toolbar-text = '전체 조회'. + ls_toolbar-quickinfo = '이전 전체 데이타 조회 상태로 전환'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + ls_toolbar-function = 'FUNC3'. + ls_toolbar-text = '배부결과삭제'. + ls_toolbar-quickinfo = '배부 결과 데이타 삭제'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + ls_toolbar-function = 'FUNC2'. + ls_toolbar-text = '전표 전기'. + ls_toolbar-quickinfo = '배부 결과를 PA전표로 전기'. + APPEND ls_toolbar TO e_object->mt_toolbar. + WHEN g_grid_target. + CLEAR ls_toolbar. + ls_toolbar-function = 'FUNC4'. + ls_toolbar-text = '역분개 포함'. + ls_toolbar-quickinfo = '역분개 전표를 포함한 모든 전표 조회'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + ls_toolbar-function = 'FUNC5'. + ls_toolbar-text = '역분개 제외'. + ls_toolbar-quickinfo = '역분개된 전표를 제외한 모든 전표 조회'. + APPEND ls_toolbar TO e_object->mt_toolbar. + + ls_toolbar-function = 'FUNC6'. + ls_toolbar-text = '역분개'. + ls_toolbar-quickinfo = 'CO-PA전표 역분개 처리'. + APPEND ls_toolbar TO e_object->mt_toolbar. + ENDCASE. + ENDMETHOD. + + METHOD handle_user_command. + CASE e_ucomm. + WHEN 'FUNC1'. " 전체 조회 버튼 + CLEAR : gs_sel_item-dist_id. + PERFORM select_data_display_only USING gs_sel_item. + + WHEN 'FUNC2'. " 전표 전기 버튼 + PERFORM post_copa_document. + PERFORM select_data_display_only USING gs_sel_item. + + WHEN 'FUNC3'. " 배부 데이타 삭제 + PERFORM delete_dist_data. + PERFORM select_data_display_only USING gs_sel_item. + + WHEN 'FUNC4'. " 역분개 전표(포함) 조회 + PERFORM select_copa_doc_all USING gs_sel_item ''. + + WHEN 'FUNC5'. " 전표(역분개 제외) 조회 + PERFORM select_copa_doc_all USING gs_sel_item 'X'. + + WHEN 'FUNC6'. " CO-PA전표 역분개 + PERFORM reverse_copa_document. + + ENDCASE. + ENDMETHOD. + + METHOD handle_double_click. + DATA: ls_row TYPE lvc_s_row. + + CLEAR : gs_sel_item. + + " 더블클릭한 행 번호 + ls_row = e_row. + + CASE sender. + WHEN g_grid_sender. + READ TABLE gt_sender INTO DATA(gs_sender) INDEX ls_row-index. + IF sy-subrc EQ 0. + gs_sel_item-perio = gs_sender-perio. + gs_sel_item-variant = gs_sender-variant. + gs_sel_item-dist_id = gs_sender-dist_id. + ENDIF. + + WHEN g_grid_receiver. + READ TABLE gt_receiver INTO DATA(gs_receiver) INDEX ls_row-index. + IF sy-subrc EQ 0. + gs_sel_item-perio = gs_receiver-perio. + gs_sel_item-variant = gs_receiver-variant. + gs_sel_item-dist_id = gs_receiver-dist_id. + ENDIF. + WHEN g_grid_result. + READ TABLE gt_result INTO DATA(gs_result) INDEX ls_row-index. + IF sy-subrc EQ 0. + gs_sel_item-perio = gs_result-perio. + gs_sel_item-variant = gs_result-variant. + gs_sel_item-dist_id = gs_result-dist_id. + ENDIF. + ENDCASE. + + IF gs_sel_item IS NOT INITIAL. + PERFORM select_data_display_only USING gs_sel_item. + ENDIF. + ENDMETHOD. + +ENDCLASS. diff --git a/src/zcopatd0030c01.prog.xml b/src/zcopatd0030c01.prog.xml new file mode 100644 index 0000000..32885a3 --- /dev/null +++ b/src/zcopatd0030c01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0030C01 + I + K + 3 + X + + + + R + Include ZCOPATD0030C01 + 22 + + + + + diff --git a/src/zcopatd0030f01.prog.abap b/src/zcopatd0030f01.prog.abap new file mode 100644 index 0000000..e3965bf --- /dev/null +++ b/src/zcopatd0030f01.prog.abap @@ -0,0 +1,1548 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0030F01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Form select_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM select_data . + PERFORM get_target_variant(sapfztdpool) TABLES gt_variant + USING p_erkrs + p_perio. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_selection_item_info +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_PERIO +*& --> P_NODEKEY +*& --> P_ +*&---------------------------------------------------------------------* +FORM set_selection_item_info USING VALUE(p_perio) + VALUE(p_nodekey) + VALUE(p_dist_id). + gs_sel_item-perio = p_perio. + gs_sel_item-variant = p_nodekey. + gs_sel_item-dist_id = p_dist_id. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form make_simple_tree_node +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM make_simple_tree_node . + DATA : ls_node TYPE mtreesnode. + DATA : l_text TYPE c LENGTH 30. + + ls_node-node_key = root_node_key. + ls_node-text = p_erkrs. + ls_node-isfolder = 'X'. + APPEND ls_node TO gt_nodes. + + + LOOP AT gt_variant INTO DATA(ls_variant). + CLEAR : ls_node, l_text. + CONCATENATE ls_variant-variant ls_variant-vtext INTO l_text SEPARATED BY space. + ls_node-node_key = ls_variant-variant. + ls_node-relatkey = root_node_key. + ls_node-text = l_text. + ls_node-isfolder = ' '. + APPEND ls_node TO gt_nodes. + ENDLOOP. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_top_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_top_grid . + DATA : lt_fcatalog TYPE TABLE OF dfies. + +* 1. ALV Grid 생성 + CREATE OBJECT g_grid_sender + EXPORTING + i_parent = g_docking_container_top. + + PERFORM register_event_sender_alv. + + PERFORM display_top_alv CHANGING lt_fcatalog. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_bottom_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_RECEIVER_grid . + DATA : lt_fcatalog TYPE TABLE OF dfies. + + IF g_grid_receiver IS INITIAL. + " Custom Container 생성(C_TAB1) 위에 ALV 표시 + CREATE OBJECT c_tab1 + EXPORTING + container_name = 'C_TAB1'. + +* 1. ALV Grid 생성 + CREATE OBJECT g_grid_receiver + EXPORTING + i_parent = c_tab1. + + PERFORM register_event_tab1_alv. + + + PERFORM display_receiver_alv CHANGING lt_fcatalog. + + + ENDIF. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_field_catalog_top +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM set_field_catalog_top CHANGING pt_fieldcat TYPE lvc_t_fcat + pt_fcatalog TYPE dfies_tab. + FIELD-SYMBOLS TYPE lvc_s_fcat. +* DATA : ls_fieldcat TYPE lvc_s_fcat. + +* structure의 필드 얻기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = 'ZSTOP_SENDER' + CHANGING + ct_fieldcat = pt_fieldcat[] + EXCEPTIONS + inconsistent_interface = 1 + program_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + LOOP AT pt_fieldcat ASSIGNING . + CASE -fieldname. + WHEN 'PERIO'. + -key = 'X'. + -col_pos = 1. + WHEN 'VARIANT'. + -key = 'X'. + -col_pos = 2. + WHEN 'DIST_ID'. + -key = 'X'. + -coltext = '배부키'. + -col_pos = 3. + ENDCASE. + + IF pt_fcatalog[] IS NOT INITIAL. "variant에 정의된 field catalog가 있는 경우. + READ TABLE pt_fcatalog WITH KEY tabname = 'SENDER' + fieldname = -fieldname + TRANSPORTING NO FIELDS . + IF sy-subrc EQ 0 AND pt_fcatalog[ sy-tabix ]-inttype <> 'T'. "존재하지 않는 필드인 경우. 안보이게. +* IF pt_fcatalog[ sy-tabix ]-inttype = 'C' OR pt_fcatalog[ sy-tabix ]-inttype = 'T'. "value 필드이므로 참조 필드 지정. +* -ref_field = 'REC_WAERS'. +* ENDIF. + + -no_out = ''. + ELSE. + -no_out = 'X'. + ENDIF. + ENDIF. + ENDLOOP. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_field_catalog_bottom +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM set_field_catalog_receiver CHANGING pt_fieldcat TYPE lvc_t_fcat + pt_fcatalog TYPE dfies_tab. + FIELD-SYMBOLS TYPE lvc_s_fcat. +* DATA : ls_fieldcat TYPE lvc_s_fcat. + +* structure의 필드 얻기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = 'ZSTOP_RECEIVER' + CHANGING + ct_fieldcat = pt_fieldcat[] + EXCEPTIONS + inconsistent_interface = 1 + program_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + LOOP AT pt_fieldcat ASSIGNING . +* -coltext = -reptext. + CASE -fieldname. + WHEN 'PERIO'. + -key = 'X'. + -col_pos = 1. + WHEN 'VARIANT'. + -key = 'X'. + -col_pos = 2. + WHEN 'DIST_ID'. + -key = 'X'. + -coltext = '배부키'. + -col_pos = 3. + ENDCASE. + + IF pt_fcatalog[] IS NOT INITIAL. "variant에 정의된 field catalog가 있는 경우. + READ TABLE pt_fcatalog WITH KEY fieldname = -fieldname + TRANSPORTING NO FIELDS . + IF sy-subrc EQ 0 AND pt_fcatalog[ sy-tabix ]-inttype <> 'C'. "존재하지 않는 필드인 경우. 안보이게. +* IF pt_fcatalog[ sy-tabix ]-inttype = 'C' OR pt_fcatalog[ sy-tabix ]-inttype = 'T'. "value 필드이므로 참조 필드 지정. +* -ref_field = 'REC_WAERS'. +* ENDIF. + + -no_out = ''. + ELSE. + -no_out = 'X'. + ENDIF. + ENDIF. + ENDLOOP. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form register_events +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM register_events . + DATA: go_event_receiver TYPE REF TO lcl_event_receiver. + + DATA: lt_events TYPE cntl_simple_events, + l_event TYPE cntl_simple_event. + +* 현재 등록된 이벤트 가져오기 + CALL METHOD g_simple_tree->get_registered_events + IMPORTING + events = lt_events. + +* 노드 더블클릭 이벤트 추가 + l_event-eventid = cl_gui_simple_tree=>eventid_node_double_click. + l_event-appl_event = 'X'. + APPEND l_event TO lt_events. + +* 이벤트 등록 + CALL METHOD g_simple_tree->set_registered_events + EXPORTING + events = lt_events + EXCEPTIONS + cntl_error = 1 + cntl_system_error = 2 + illegal_event_combination = 3. + + IF sy-subrc <> 0. + MESSAGE 'Error registering events' TYPE 'E'. + ENDIF. + + CREATE OBJECT go_event_receiver. + + SET HANDLER go_event_receiver->handle_node_double_click FOR g_simple_tree. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_sender_receiver_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> NODE_KEY +*&---------------------------------------------------------------------* +FORM select_sender_receiver_data USING VALUE(p_nodekey). + DATA : lt_fieldcatalog TYPE STANDARD TABLE OF dfies WITH DEFAULT KEY. + DATA : l_result TYPE bapiret2, + l_variant TYPE covariant. + + "선택 정보 key(perio, variant, node_id) 등록 - 주요 작업을 위해. + PERFORM set_selection_item_info USING p_perio p_nodekey ''. + + PERFORM select_sender_data USING p_nodekey ''. + PERFORM select_receiver_data USING p_nodekey ''. + PERFORM select_result_data USING p_nodekey ''. + + l_variant = p_nodekey. + + CALL METHOD g_top_down->get_field_catalog + EXPORTING + erkrs = p_erkrs + perio = p_perio + variant = l_variant + IMPORTING + fieldcatalog = lt_fieldcatalog + RECEIVING + result = l_result. + + + PERFORM display_top_alv CHANGING lt_fieldcatalog. + PERFORM display_receiver_alv CHANGING lt_fieldcatalog. + PERFORM display_result_alv CHANGING lt_fieldcatalog. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_table_display +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM refresh_table_display . + CALL METHOD g_grid_sender->refresh_table_display. + CALL METHOD g_grid_receiver->refresh_table_display. + CALL METHOD g_grid_result->refresh_table_display. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_PA_DOC_table_display +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM refresh_PA_DOC_table_display . + CALL METHOD g_grid_target->refresh_table_display. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_sender_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM select_sender_data USING VALUE(p_variant) + VALUE(p_dist_id). + + DATA(lv_where) = |perio = @p_perio AND variant = @p_variant| . + IF p_dist_id IS NOT INITIAL. + lv_where = |{ lv_where } AND dist_id = @p_dist_id| . + ENDIF. + + SELECT * + FROM (gv_sender) + WHERE (lv_where) + ORDER BY dist_id + INTO CORRESPONDING FIELDS OF TABLE @gt_sender. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_receiver_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM select_receiver_data USING VALUE(p_variant) + VALUE(p_dist_id). + + DATA(lv_where) = |perio = @p_perio AND variant = @p_variant| . + IF p_dist_id IS NOT INITIAL. + lv_where = |{ lv_where } AND dist_id = @p_dist_id| . + ENDIF. + + SELECT * + FROM (gv_receiver) + WHERE (lv_where) + ORDER BY dist_id + INTO CORRESPONDING FIELDS OF TABLE @gt_receiver. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_result_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_NODEKEY +*&---------------------------------------------------------------------* +FORM select_result_data USING VALUE(p_variant) + VALUE(p_dist_id). + + DATA(lv_where) = |perio = @p_perio AND variant = @p_variant| . + IF p_dist_id IS NOT INITIAL. + lv_where = |{ lv_where } AND dist_id = @p_dist_id| . + ENDIF. + + SELECT * + FROM (gv_result) + WHERE (lv_where) + ORDER BY dist_id + INTO CORRESPONDING FIELDS OF TABLE @gt_result. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_TARGET_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> P_NODEKEY +*&---------------------------------------------------------------------* +FORM select_TARGET_data USING VALUE(p_perio) + VALUE(p_variant) + VALUE(p_reverse). + DATA : ls_result TYPE bapiret2. + DATA lt_target TYPE zcl_copa_topdown=>target_tb. + + CALL METHOD g_top_down->get_copa_doc_list + EXPORTING + erkrs = p_erkrs + perio = gs_sel_item-perio + variant = gs_sel_item-variant + reverse = p_reverse + IMPORTING + copa_doc_list = lt_target + RECEIVING + result = ls_result. + + gt_target[] = lt_target[]. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_display_top +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM refresh_display_top USING pt_fieldcat. + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-cwidth_opt = 'X'. + + CALL METHOD g_grid_sender->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = pt_fieldcat + it_outtab = gt_sender. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_display_bottom +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM refresh_display_receiver USING pt_fieldcat. + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-cwidth_opt = 'X'. + + CALL METHOD g_grid_receiver->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = pt_fieldcat + it_outtab = gt_receiver. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_top_down_object +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_top_down_object . + CREATE OBJECT g_top_down. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form display_top_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FCATALOG +*&---------------------------------------------------------------------* +FORM display_top_alv CHANGING pt_fcatalog. +* 2. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog_top CHANGING lt_fieldcat pt_fcatalog. + +* 3. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + PERFORM refresh_display_top USING lt_fieldcat. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form display_bottom_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FCATALOG +*&---------------------------------------------------------------------* +FORM display_receiver_alv CHANGING pt_fcatalog. + +* 2. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog_receiver CHANGING lt_fieldcat pt_fcatalog. + +* 3. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + PERFORM refresh_display_receiver USING lt_fieldcat. + + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_display_object_0100 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_display_object_0100 . + + CREATE OBJECT g_docking_container + EXPORTING + repid = g_repid + dynnr = g_dynnr + side = g_docking_container->dock_at_left + extension = 200 + EXCEPTIONS + cntl_error = 1 + cntl_system_error = 2 + create_error = 3 + lifetime_error = 4 + lifetime_dynpro_dynpro_link = 5 + OTHERS = 6. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CREATE OBJECT g_docking_container_top + EXPORTING + repid = g_repid + dynnr = g_dynnr + side = g_docking_container_top->dock_at_top + extension = 200 + EXCEPTIONS + cntl_error = 1 + cntl_system_error = 2 + create_error = 3 + lifetime_error = 4 + lifetime_dynpro_dynpro_link = 5 + OTHERS = 6. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CREATE OBJECT g_simple_tree + EXPORTING + parent = g_docking_container + node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single. + + CALL METHOD g_simple_tree->add_nodes + EXPORTING + table_structure_name = 'MTREEITM' + node_table = gt_nodes. + + CALL METHOD g_simple_tree->expand_node + EXPORTING + node_key = root_node_key. + + PERFORM create_top_grid. "센더 + + PERFORM register_events. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Module SET_TABS OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE set_tabs OUTPUT. + c_tab-activetab = g_active_tab. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Form CREATE_ALV +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_alv_tab1 . + PERFORM create_RECEIVER_grid. "리시버/배부결과 +ENDFORM. +*&---------------------------------------------------------------------* +*& Form CREATE_ALV_TAB2 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_alv_tab2 . + PERFORM create_result_grid. "리시버/배부결과 +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_result_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_result_grid . + DATA : lt_fcatalog TYPE TABLE OF dfies. + + IF g_grid_result IS INITIAL. + " Custom Container 생성(C_TAB1) 위에 ALV 표시 + CREATE OBJECT c_tab2 + EXPORTING + container_name = 'C_TAB2'. + +* 1. ALV Grid 생성 + CREATE OBJECT g_grid_result + EXPORTING + i_parent = c_tab2. + + PERFORM register_event_tab2_alv. + + PERFORM display_result_alv CHANGING lt_fcatalog. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form display_result_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- LT_FIELDCATALOG +*&---------------------------------------------------------------------* +FORM display_result_alv CHANGING pt_fcatalog. + +* 1. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog_result CHANGING lt_fieldcat pt_fcatalog. + +* 2. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + PERFORM refresh_display_result USING lt_fieldcat. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form display_target_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- LT_FIELDCATALOG +*&---------------------------------------------------------------------* +FORM display_target_alv CHANGING pt_fcatalog. + +* 1. 필드카탈로그 생성 + DATA: lt_fieldcat TYPE lvc_t_fcat. + PERFORM set_field_catalog_target CHANGING lt_fieldcat pt_fcatalog. + +* 2. ALV Grid에 데이터와 필드카탈로그 전달하여 출력 + PERFORM refresh_display_target USING lt_fieldcat. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_field_catalog_result +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- LT_FIELDCAT +*& <-- PT_FCATALOG +*&---------------------------------------------------------------------* +FORM set_field_catalog_result CHANGING pt_fieldcat TYPE lvc_t_fcat + pt_fcatalog TYPE dfies_tab. + FIELD-SYMBOLS TYPE lvc_s_fcat. +* DATA : ls_fieldcat TYPE lvc_s_fcat. + +* structure의 필드 얻기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = 'ZSTOP_RESULT' + CHANGING + ct_fieldcat = pt_fieldcat[] + EXCEPTIONS + inconsistent_interface = 1 + program_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + LOOP AT pt_fieldcat ASSIGNING . +* -coltext = -reptext. + CASE -fieldname. + WHEN 'PERIO'. + -key = 'X'. + -col_pos = 1. + WHEN 'VARIANT'. + -key = 'X'. + -col_pos = 2. + WHEN 'DIST_ID'. + -key = 'X'. + -coltext = '배부키'. + -col_pos = 3. + ENDCASE. + + IF pt_fcatalog[] IS NOT INITIAL. "variant에 정의된 field catalog가 있는 경우. + READ TABLE pt_fcatalog WITH KEY fieldname = -fieldname + TRANSPORTING NO FIELDS . + IF sy-subrc EQ 0 AND pt_fcatalog[ sy-tabix ]-inttype <> 'T'. "존재하지 않는 필드인 경우. 안보이게. +* IF pt_fcatalog[ sy-tabix ]-inttype = 'C' OR pt_fcatalog[ sy-tabix ]-inttype = 'T'. "value 필드이므로 참조 필드 지정. +* -ref_field = 'REC_WAERS'. +* ENDIF. + + -no_out = ''. + ELSE. + -no_out = 'X'. + ENDIF. + ENDIF. + ENDLOOP. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form set_field_catalog_target +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& <-- LT_FIELDCAT +*& <-- PT_FCATALOG +*&---------------------------------------------------------------------* +FORM set_field_catalog_target CHANGING pt_fieldcat TYPE lvc_t_fcat + pt_fcatalog TYPE dfies_tab. + FIELD-SYMBOLS TYPE lvc_s_fcat. +* DATA : ls_fieldcat TYPE lvc_s_fcat. + +* structure의 필드 얻기 + CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' + EXPORTING + i_structure_name = 'ZSTOP_TARGET' + CHANGING + ct_fieldcat = pt_fieldcat[] + EXCEPTIONS + inconsistent_interface = 1 + program_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + LOOP AT pt_fieldcat ASSIGNING . +* -coltext = -reptext. + CASE -fieldname. + WHEN 'PERIO'. + -key = 'X'. + -col_pos = 1. + WHEN 'VARIANT'. + -key = 'X'. + -col_pos = 2. + WHEN 'DIST_ID'. + -key = 'X'. + -coltext = '배부키'. + -col_pos = 3. + WHEN 'VRGAR'. + -key = 'X'. + -coltext = '레코드유형'. + -col_pos = 4. + WHEN 'BELNR'. + -key = 'X'. + -coltext = '전표번호'. + -col_pos = 5. + WHEN 'STO_BELNR'. + -coltext = '역분개 전표번호'. + -col_pos = 6. + + ENDCASE. + + IF pt_fcatalog[] IS NOT INITIAL. "variant에 정의된 field catalog가 있는 경우. + CHECK -fieldname NE 'BELNR' "필수 추가필드 + AND -fieldname NE 'STO_BELNR' + AND -fieldname NE 'VRGAR'. + + READ TABLE pt_fcatalog WITH KEY fieldname = -fieldname + TRANSPORTING NO FIELDS . + IF sy-subrc EQ 0 AND pt_fcatalog[ sy-tabix ]-inttype <> 'T'. "존재하지 않는 필드인 경우. 안보이게. +* IF pt_fcatalog[ sy-tabix ]-inttype = 'C' OR pt_fcatalog[ sy-tabix ]-inttype = 'T'. "value 필드이므로 참조 필드 지정. +* -ref_field = 'REC_WAERS'. +* ENDIF. + + -no_out = ''. + ELSE. + -no_out = 'X'. + ENDIF. + ENDIF. + ENDLOOP. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_display_result +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM refresh_display_result USING pt_fieldcat. + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-cwidth_opt = 'X'. + + CALL METHOD g_grid_result->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = pt_fieldcat + it_outtab = gt_result. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form refresh_display_target +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDCAT +*&---------------------------------------------------------------------* +FORM refresh_display_target USING pt_fieldcat. + DATA : ls_layout TYPE lvc_s_layo. + ls_layout-sel_mode = 'A'. " 행 선택 버튼 활성화 + ls_layout-cwidth_opt = 'X'. + + CALL METHOD g_grid_target->set_table_for_first_display + EXPORTING + is_layout = ls_layout + CHANGING + it_fieldcatalog = pt_fieldcat + it_outtab = gt_target. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form register_event_tab1_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM register_event_tab1_alv . + DATA: gr_reciever1 TYPE REF TO lcl_event_receiver, + gr_event TYPE REF TO lcl_event_receiver. + + CREATE OBJECT gr_reciever1. + SET HANDLER gr_reciever1->handle_toolbar FOR g_grid_receiver. + SET HANDLER gr_reciever1->handle_user_command FOR g_grid_receiver. + + CREATE OBJECT gr_event. + SET HANDLER gr_event->handle_double_click FOR g_grid_receiver. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form register_event_tab2_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM register_event_tab2_alv . + DATA: gr_reciever2 TYPE REF TO lcl_event_receiver, + gr_event TYPE REF TO lcl_event_receiver. + + CREATE OBJECT gr_reciever2. + SET HANDLER gr_reciever2->handle_toolbar FOR g_grid_result. + SET HANDLER gr_reciever2->handle_user_command FOR g_grid_result. + + CREATE OBJECT gr_event. + SET HANDLER gr_event->handle_double_click FOR g_grid_result. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form register_event_sender_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM register_event_sender_alv . + DATA: gr_sender TYPE REF TO lcl_event_receiver, + gr_event TYPE REF TO lcl_event_receiver. + + CREATE OBJECT gr_sender. + SET HANDLER gr_sender->handle_toolbar FOR g_grid_sender. + SET HANDLER gr_sender->handle_user_command FOR g_grid_sender. + + CREATE OBJECT gr_event. + SET HANDLER gr_event->handle_double_click FOR g_grid_sender. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_data_display_only +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> GS_SEL_ITEM +*&---------------------------------------------------------------------* +FORM select_data_display_only USING p_sel_item TYPE ty_sel_item. + PERFORM select_sender_data USING p_sel_item-variant p_sel_item-dist_id. + PERFORM select_receiver_data USING p_sel_item-variant p_sel_item-dist_id. + PERFORM select_result_data USING p_sel_item-variant p_sel_item-dist_id. + + PERFORM refresh_table_display . +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_copa_doc_all +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> GS_SEL_ITEM +*&---------------------------------------------------------------------* +FORM select_copa_doc_all USING p_sel_item TYPE ty_sel_item p_reverse. + PERFORM select_TARGET_data USING p_sel_item-perio p_sel_item-variant p_reverse. + + PERFORM refresh_PA_DOC_table_display . +ENDFORM. + + + + +*&---------------------------------------------------------------------* +*& Form get_sender_receiver_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM get_sender_receiver_data . + + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c, + ls_result TYPE bapiret2. + + DATA : ls_sel_item TYPE ty_sel_item. + + PERFORM check_input_parameter TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + +* 센더 / 리시버 데이타 생성은 클래스 메소드에서.. + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + ENDCASE. + ENDLOOP. + + CALL METHOD g_top_down->get_sender_receiver_data + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio + RECEIVING + result = ls_result. + + IF ls_result-type = 'E'. "오류인경우. + MESSAGE s000 WITH ls_result-message. + RETURN. + ENDIF. + + PERFORM set_selection_item_info USING ls_sel_item-perio + ls_sel_item-variant + ' '. + + MESSAGE s008 WITH '작업'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form delete_topdown_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM delete_topdown_data . + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c, + ls_result TYPE bapiret2. + + DATA : ls_sel_item TYPE ty_sel_item, + l_type TYPE ztbls VALUE '2'. + + PERFORM check_input_parameter TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + +* 센더 / 리시버 데이타 생성은 클래스 메소드에서.. + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + ENDCASE. + ENDLOOP. + + DO 2 TIMES. + l_type = l_type + 1. + + CALL METHOD g_top_down->delete_topdown_tb_data + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio + type = l_type + RECEIVING + result = ls_result. + + ENDDO. + + IF ls_result-type = 'E'. "오류인경우. + MESSAGE s000 WITH ls_result-message. + RETURN. + ENDIF. + + PERFORM set_selection_item_info USING ls_sel_item-perio + ls_sel_item-variant + ' '. + + MESSAGE s008 WITH '작업'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_input_parameter +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDS +*& <-- LV_RETURNCODE +*&---------------------------------------------------------------------* +FORM check_input_parameter TABLES pt_fields + CHANGING p_returncode. + + DATA: ls_fields TYPE sval, + lv_returncode TYPE c. + + "Perio 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'CEST1'. + ls_fields-fieldname = 'PERIO'. + ls_fields-fieldtext = '기간/년도'. + ls_fields-value = gs_sel_item-perio. + APPEND ls_fields TO pt_fields. + + "Variant 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'COVA1'. + ls_fields-fieldname = 'VARIANT'. + ls_fields-fieldtext = 'Variant'. + ls_fields-value = gs_sel_item-variant. + APPEND ls_fields TO pt_fields. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + popup_title = 'Perio/Variant 입력' + IMPORTING + returncode = p_returncode + TABLES + fields = pt_fields. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form check_input_parameter_post +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> LT_FIELDS +*& <-- LV_RETURNCODE +*&---------------------------------------------------------------------* +FORM check_input_parameter_post TABLES pt_fields + CHANGING p_returncode. + DATA: ls_fields TYPE sval, + lv_returncode TYPE c. + + "Perio 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'CEST1'. + ls_fields-fieldname = 'PERIO'. + ls_fields-fieldtext = '기간/년도'. + ls_fields-value = gs_sel_item-perio. + APPEND ls_fields TO pt_fields. + + "Variant 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'COVA1'. + ls_fields-fieldname = 'VARIANT'. + ls_fields-fieldtext = 'Variant'. + ls_fields-value = gs_sel_item-variant. + APPEND ls_fields TO pt_fields. + + "VRGAR 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'CEST1'. + ls_fields-fieldname = 'VRGAR'. + ls_fields-fieldtext = '레코드유형'. + ls_fields-value = ''. + APPEND ls_fields TO pt_fields. + + "TEST-RUN 입력필드 추가 + CLEAR ls_fields. + ls_fields-tabname = 'BAPI0017'. + ls_fields-fieldname = 'TESTRUN'. + ls_fields-fieldtext = '테스트실행여부'. + ls_fields-value = 'X'. + APPEND ls_fields TO pt_fields. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING + popup_title = 'CO-PA 전표 발행' + IMPORTING + returncode = p_returncode + TABLES + fields = pt_fields. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form delete_dist_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM delete_dist_data . + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c, + ls_result TYPE bapiret2. + + DATA : ls_sel_item TYPE ty_sel_item, + l_type TYPE ztbls VALUE '5'. "배부결과테이블 + + PERFORM check_input_parameter TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + +* 배부 결과 데이타 삭제는 클래스 메소드에서.. + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + ENDCASE. + ENDLOOP. + + CALL METHOD g_top_down->delete_topdown_tb_data + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio + type = l_type + RECEIVING + result = ls_result. + + + + IF ls_result-type = 'E'. "오류인경우. + MESSAGE s000 WITH ls_result-message. + RETURN. + ENDIF. + + PERFORM set_selection_item_info USING ls_sel_item-perio + ls_sel_item-variant + ' '. + + MESSAGE s008 WITH '작업'. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form execute_top_down_dist +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM execute_top_down_dist . + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c, + ls_result TYPE bapiret2. + + DATA : ls_sel_item TYPE ty_sel_item. + + PERFORM check_input_parameter TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + +* 배부 결과 데이타 삭제는 클래스 메소드에서.. + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + ENDCASE. + ENDLOOP. + + CALL METHOD g_top_down->execute_topdown_distribute + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio + save_yn = 'X' + RECEIVING + result = ls_result. + + IF ls_result-type = 'E'. "오류인경우. + MESSAGE s000 WITH ls_result-message. + RETURN. + ENDIF. + + PERFORM set_selection_item_info USING ls_sel_item-perio + ls_sel_item-variant + ' '. + + MESSAGE s008 WITH '작업'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form post_copa_document +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM post_copa_document . + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c, + lt_result TYPE TABLE OF bapiret2. + + TYPES : BEGIN OF ty_sel_item_pa. + INCLUDE TYPE ty_sel_item. + TYPES : vrgar TYPE rke_vrgar, + testrun TYPE c, + END OF ty_sel_item_pa. + + DATA : ls_sel_item TYPE ty_sel_item_pa. + + PERFORM check_input_parameter_post TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + +* CO-PA 전표 발행은 클래스 메소드에서.. + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + WHEN 'VRGAR'. + ls_sel_item-vrgar = ls_fields-value. + WHEN 'TESTRUN'. + ls_sel_item-testrun = ls_fields-value. + + ENDCASE. + ENDLOOP. + + + CALL METHOD g_top_down->post_actual_topdown_documents + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio + vrgar = ls_sel_item-vrgar + testrun = ls_sel_item-testrun + RECEIVING + result = lt_result. + + IF lt_result IS NOT INITIAL. "return값이 있는 경우. + READ TABLE lt_result INTO DATA(ls_result) INDEX 1. + IF ls_result-type = 'E'. + MESSAGE s000 WITH ls_result-message. + RETURN. + ELSE. + MESSAGE s000 WITH ls_result-message. + ENDIF. + ELSE. "Return값이 없는 경우. + IF ls_sel_item-testrun = 'X'. + MESSAGE i009 WITH '오류내역'. + ENDIF. + ENDIF. + + PERFORM set_selection_item_info USING ls_sel_item-perio + ls_sel_item-variant + ' '. + + MESSAGE s008 WITH '작업'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form CREATE_ALV_TAB3 +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_alv_tab3 . + PERFORM create_post_doc_grid. "리시버/배부결과 +ENDFORM. +*&---------------------------------------------------------------------* +*& Form create_post_doc_grid +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM create_post_doc_grid . + DATA : lt_fcatalog TYPE TABLE OF dfies. + + IF g_grid_target IS INITIAL. + " Custom Container 생성(C_TAB1) 위에 ALV 표시 + CREATE OBJECT c_tab3 + EXPORTING + container_name = 'C_TAB3'. + +* 1. ALV Grid 생성 + CREATE OBJECT g_grid_target + EXPORTING + i_parent = c_tab3. + + PERFORM register_event_tab3_alv. + + PERFORM display_target_alv CHANGING lt_fcatalog. + ENDIF. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form select_posting_doc_data +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM select_posting_doc_data USING p_reverse. + DATA : ls_result TYPE bapiret2. + DATA lt_target TYPE zcl_copa_topdown=>target_tb. + DATA : lt_fieldcatalog TYPE STANDARD TABLE OF dfies WITH DEFAULT KEY. + + IF gs_sel_item IS INITIAL. + MESSAGE s010. "좌측 메뉴에서 원하는 변형을 더블클릭 한 후 사용하십시요. + g_active_tab = 'TAB1'. + RETURN. + ENDIF. + + PERFORM select_target_data USING gs_sel_item-perio + gs_sel_item-variant + p_reverse. + + CALL METHOD g_top_down->get_field_catalog + EXPORTING + erkrs = p_erkrs + perio = gs_sel_item-perio + variant = gs_sel_item-variant + IMPORTING + fieldcatalog = lt_fieldcatalog + RECEIVING + result = ls_result. + + + PERFORM display_target_alv CHANGING lt_fieldcatalog. + + + g_active_tab = 'TAB3'. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form register_event_tab3_alv +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM register_event_tab3_alv . + DATA: gr_reciever3 TYPE REF TO lcl_event_receiver, + gr_event TYPE REF TO lcl_event_receiver. + + CREATE OBJECT gr_reciever3. + SET HANDLER gr_reciever3->handle_toolbar FOR g_grid_target. + SET HANDLER gr_reciever3->handle_user_command FOR g_grid_target. + +ENDFORM. +*&---------------------------------------------------------------------* +*& Form reverse_copa_document +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM reverse_copa_document . + DATA: lt_row TYPE lvc_t_roid, + ls_row TYPE lvc_s_roid, + ls_select TYPE ty_target. + DATA : ans TYPE c LENGTH 8. + DATA : lv_qas TYPE string. + + DATA: lr_vrgar TYPE RANGE OF rke_vrgar, + lr_belnr TYPE RANGE OF rke_belnr, + lr_perio TYPE RANGE OF jahrper. + + CALL METHOD g_grid_target->get_selected_rows + IMPORTING + et_row_no = lt_row. + + DATA(lv_count) = lines( lt_row ). + IF lv_count = 0. + MESSAGE s005 WITH '지정할 대상'. + RETURN. + ENDIF. + + MESSAGE s011 WITH lv_count INTO lv_qas. + + CALL FUNCTION 'POPUP_TO_CONFIRM' + EXPORTING + titlebar = 'POPUP_TO_CONFIRM' + text_question = lv_qas + text_button_1 = 'YES' + icon_button_1 = 'ICON_CHECKED' + text_button_2 = 'NO' + icon_button_2 = 'ICON_NO' + display_cancel_button = ' ' + popup_type = 'ICON_MESSAGE_ERROR' + IMPORTING + answer = ans. + + IF ans = 2. + RETURN. + ENDIF. + + " 선택된 데이터 처리 + LOOP AT lt_row INTO ls_row. + READ TABLE gt_target INTO DATA(ls_data) INDEX ls_row-row_id. + MOVE-CORRESPONDING ls_data TO ls_select. + + "CO-PA 역분개 처리(KE4S00) + CLEAR lr_vrgar. + lr_vrgar = VALUE #( ( sign = 'I' option = 'EQ' low = ls_data-vrgar high = '' ) ). + + CLEAR lr_belnr. + lr_belnr = VALUE #( ( sign = 'I' option = 'EQ' low = ls_data-belnr high = '' ) ). + + CLEAR lr_perio. + lr_perio = VALUE #( ( sign = 'I' option = 'EQ' low = ls_data-perio high = '' ) ). + + SUBMIT rkecadl1 WITH g_erkrs = p_erkrs + WITH vrgar IN lr_vrgar + WITH belnr IN lr_belnr + WITH perio IN lr_perio + WITH g_test = ' ' + WITH g_log = ' ' + AND RETURN. + + ENDLOOP. + + "해당월에 전기된 전표가 존재하지 않는 경우, 진행 상태값 초기화 + DATA : ls_result TYPE bapiret2. + DATA lt_target TYPE zcl_copa_topdown=>target_tb. + + CALL METHOD g_top_down->get_copa_doc_list + EXPORTING + erkrs = p_erkrs + perio = gs_sel_item-perio + variant = gs_sel_item-variant + reverse = 'X' + IMPORTING + copa_doc_list = lt_target + RECEIVING + result = ls_result. + + IF lt_target[] IS INITIAL. + UPDATE (gv_variant) + SET post = '' + WHERE perio = @gs_sel_item-perio + AND variant = @gs_sel_item-variant. + ENDIF. + + PERFORM select_copa_doc_all USING gs_sel_item 'X'. "pa전표 조회 재실행. + + MESSAGE s012 WITH lv_count. +ENDFORM. +*&---------------------------------------------------------------------* +*& Form SET_VARIANT_DESC +*&---------------------------------------------------------------------* +*& text +*&---------------------------------------------------------------------* +*& --> p1 text +*& <-- p2 text +*&---------------------------------------------------------------------* +FORM set_variant_desc . + DATA: lt_fields TYPE TABLE OF sval, + ls_fields TYPE sval, + lv_returncode TYPE c. + + DATA : ls_sel_item TYPE ty_sel_item. + + PERFORM check_input_parameter TABLES lt_fields + CHANGING lv_returncode. + + IF lv_returncode EQ 'A'. + MESSAGE s007 WITH '취소'. + RETURN. + ENDIF. + + LOOP AT lt_fields INTO ls_fields. + CASE ls_fields-fieldname. + WHEN 'PERIO'. + ls_sel_item-perio = ls_fields-value. + WHEN 'VARIANT'. + ls_sel_item-variant = ls_fields-value. + ENDCASE. + ENDLOOP. + + CALL METHOD g_top_down->set_variant_desc + EXPORTING + erkrs = p_erkrs + variant = ls_sel_item-variant + perio = ls_sel_item-perio. + +ENDFORM. diff --git a/src/zcopatd0030f01.prog.xml b/src/zcopatd0030f01.prog.xml new file mode 100644 index 0000000..6bba5a0 --- /dev/null +++ b/src/zcopatd0030f01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0030F01 + I + K + 3 + X + + + + R + Include ZCOPATD0030F01 + 22 + + + + + diff --git a/src/zcopatd0030i01.prog.abap b/src/zcopatd0030i01.prog.abap new file mode 100644 index 0000000..d030cd6 --- /dev/null +++ b/src/zcopatd0030i01.prog.abap @@ -0,0 +1,46 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0030I01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module EXIT_0100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE exit_0100 INPUT. + CASE ok_code. + WHEN 'BACK' OR 'RW' OR 'EXIT'. + LEAVE TO SCREEN 0. + ENDCASE. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module USER_COMMAND_0100 INPUT +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +MODULE user_command_0100 INPUT. + CASE ok_code. + WHEN 'EXIT' OR 'BACK' OR 'CANCEL'. + LEAVE PROGRAM. + WHEN 'TAB1'. + g_active_tab = 'TAB1'. + WHEN 'TAB2'. + g_active_tab = 'TAB2'. + WHEN 'TAB3'. + PERFORM select_posting_doc_data using 'X'. "탭을 선택할때 데이타 추출. performence 고려. + WHEN 'CONFIRM'. "배부기준 확정 + PERFORM SET_VARIANT_DESC. + WHEN 'DELETE'. "센더/리시버 데이타 삭제. + PERFORM delete_topdown_data. + PERFORM select_data_display_only USING gs_sel_item. + WHEN 'REGEN'. "센더/리시버 데이타 (재)추출. + PERFORM get_sender_receiver_data. + PERFORM select_data_display_only USING gs_sel_item. + WHEN 'EXEC'. "하향식 배부 실행. + PERFORM execute_top_down_dist. + PERFORM select_data_display_only USING gs_sel_item. + + WHEN OTHERS. + " 기타 버튼 처리 + ENDCASE. + +ENDMODULE. diff --git a/src/zcopatd0030i01.prog.xml b/src/zcopatd0030i01.prog.xml new file mode 100644 index 0000000..d1cf409 --- /dev/null +++ b/src/zcopatd0030i01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0030I01 + I + K + 3 + X + + + + R + Include ZCOPATD0030I01 + 22 + + + + + diff --git a/src/zcopatd0030o01.prog.abap b/src/zcopatd0030o01.prog.abap new file mode 100644 index 0000000..b9962e6 --- /dev/null +++ b/src/zcopatd0030o01.prog.abap @@ -0,0 +1,50 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0030O01 +*&---------------------------------------------------------------------* +*&---------------------------------------------------------------------* +*& Module STATUS_0100 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE status_0100 OUTPUT. + SET PF-STATUS '0100'. +* SET TITLEBAR 'xxx'. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module INIT_OBJECT_010 OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE init_object_010 OUTPUT. + IF g_docking_container IS INITIAL. + "Container 생성 + PERFORM create_display_object_0100. + +* 1번째 탭을 TABSTRIP의 기본 탭으로. + c_tab-activetab = 'TAB1'. + ENDIF. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module TAB1_PBO OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE tab1_pbo OUTPUT. + PERFORM CREATE_ALV_TAB1. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module TAB2_PBO OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE tab2_pbo OUTPUT. + PERFORM CREATE_ALV_TAB2. +ENDMODULE. +*&---------------------------------------------------------------------* +*& Module TAB3_PBO OUTPUT +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* +MODULE tab3_pbo OUTPUT. + PERFORM CREATE_ALV_TAB3. +ENDMODULE. diff --git a/src/zcopatd0030o01.prog.xml b/src/zcopatd0030o01.prog.xml new file mode 100644 index 0000000..49953e0 --- /dev/null +++ b/src/zcopatd0030o01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0030O01 + I + K + 3 + X + + + + R + Include ZCOPATD0030O01 + 22 + + + + + diff --git a/src/zcopatd0030top.prog.abap b/src/zcopatd0030top.prog.abap new file mode 100644 index 0000000..50f9b81 --- /dev/null +++ b/src/zcopatd0030top.prog.abap @@ -0,0 +1,65 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0030TOP - Report ZCOPATD0030 +*&---------------------------------------------------------------------* +REPORT zcopatd0030 MESSAGE-ID ztopdown. + +INCLUDE zcopatdcommtop . " 패키지 공용 Data + +*----------------------------------------------------------------------* +* Constants +*----------------------------------------------------------------------* +CONSTANTS : root_node_key TYPE TV_NODEKEY VALUE 'ROOT'. + +* +*----------------------------------------------------------------------* +* CONTROLs +*----------------------------------------------------------------------* +DATA: c_tab1 TYPE REF TO cl_gui_custom_container, + c_tab2 TYPE REF TO cl_gui_custom_container, + c_tab3 TYPE REF TO cl_gui_custom_container. + +* +*----------------------------------------------------------------------* +* TYPES +*----------------------------------------------------------------------* +TYPES : BEGIN OF ty_sel_item , + perio TYPE jahrper, + variant TYPE covariant, + dist_id TYPE pbr_seqre, + END OF ty_sel_item. + +* +*----------------------------------------------------------------------* +* Structure +*----------------------------------------------------------------------* +DATA : gs_sel_item TYPE ty_sel_item. "alv 선택 item. + +* +*----------------------------------------------------------------------* +* Table +*----------------------------------------------------------------------* +DATA : gt_sender_bakup TYPE TABLE OF ty_sender, "센더 데이타(구조) + gt_receiver_bakup TYPE TABLE OF ty_receiver, "배부 기준 데이타(구조) + gt_result_bakup TYPE TABLE OF ty_result. "배부 결과 데이타(구조) + +* +*----------------------------------------------------------------------* +* OBJECT +*----------------------------------------------------------------------* +DATA : g_grid_sender TYPE REF TO cl_gui_alv_grid, + g_grid_receiver TYPE REF TO cl_gui_alv_grid, + g_grid_result TYPE REF TO cl_gui_alv_grid, + g_grid_target TYPE REF TO cl_gui_alv_grid. + +* +*----------------------------------------------------------------------* +* Variance +*----------------------------------------------------------------------* +DATA: g_active_tab TYPE c LENGTH 4 VALUE 'TAB1'. + + +*-- Selection Screen 입력값 +SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-s01. + PARAMETERS: p_erkrs TYPE erkrs OBLIGATORY, "경영단위 코드 + p_perio TYPE jahrper OBLIGATORY. "기간(YYYYMM) +SELECTION-SCREEN END OF BLOCK b1. diff --git a/src/zcopatd0030top.prog.xml b/src/zcopatd0030top.prog.xml new file mode 100644 index 0000000..08459c6 --- /dev/null +++ b/src/zcopatd0030top.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0030TOP + I + K + 3 + X + + + + R + Include ZCOPATD0030TOP + 22 + + + + + diff --git a/src/zcopatd0040.prog.abap b/src/zcopatd0040.prog.abap new file mode 100644 index 0000000..e68af68 --- /dev/null +++ b/src/zcopatd0040.prog.abap @@ -0,0 +1,12 @@ +*&---------------------------------------------------------------------* +*& Report ZCOPATD0040 +*&---------------------------------------------------------------------* +*& +*&---------------------------------------------------------------------* + +INCLUDE ZCOPATD0040TOP . " Global Data + +* INCLUDE ZCOPATD0040O01 . " PBO-Modules +* INCLUDE ZCOPATD0040I01 . " PAI-Modules +* INCLUDE ZCOPATD0040F01 . " FORM-Routines + diff --git a/src/zcopatd0040.prog.xml b/src/zcopatd0040.prog.xml new file mode 100644 index 0000000..7820922 --- /dev/null +++ b/src/zcopatd0040.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZCOPATD0040 + 1 + K + 3 + X + X + + + + R + CO-PA 전표 전기 + 11 + + + + + diff --git a/src/zcopatd0040top.prog.abap b/src/zcopatd0040top.prog.abap new file mode 100644 index 0000000..99d584f --- /dev/null +++ b/src/zcopatd0040top.prog.abap @@ -0,0 +1,4 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATD0040TOP - Report ZCOPATD0040 +*&---------------------------------------------------------------------* +REPORT ZCOPATD0040 MESSAGE-ID ZTOPDOWN. diff --git a/src/zcopatd0040top.prog.xml b/src/zcopatd0040top.prog.xml new file mode 100644 index 0000000..ef4443f --- /dev/null +++ b/src/zcopatd0040top.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATD0040TOP + I + K + 3 + X + + + + R + Include ZCOPATD0040TOP + 22 + + + + + diff --git a/src/zcopatdcommf01.prog.abap b/src/zcopatdcommf01.prog.abap new file mode 100644 index 0000000..32f4812 --- /dev/null +++ b/src/zcopatdcommf01.prog.abap @@ -0,0 +1,41 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATDCOMMF01 +*&---------------------------------------------------------------------* +* +*&---------------------------------------------------------------------* +*& Form get_table_info +*&---------------------------------------------------------------------* +FORM get_table_info. + TYPES : BEGIN OF ty_table, + type TYPE db2type, + tbname TYPE tabname, + END OF ty_table. + + DATA : lt_mng_table TYPE TABLE OF ty_table. + + DATA : lv_tabname TYPE tabname. + + " 환경정보에서 관리 테이블명 조회 + CALL FUNCTION 'ZTOPDOWN_ENV' + IMPORTING + tb_name = lv_tabname. + + " 관리 테이블 정보 로딩 + SELECT type, + tbname + FROM (lv_tabname) + INTO CORRESPONDING FIELDS OF TABLE @Lt_mng_table. + + LOOP AT lt_mng_table INTO DATA(ls_table). + CASE ls_table-type. + WHEN '1'. gv_manager = ls_table-tbname. + WHEN '2'. gv_variant = ls_table-tbname. + WHEN '3'. gv_sender = ls_table-tbname. + WHEN '4'. gv_receiver = ls_table-tbname. + WHEN '5'. gv_result = ls_table-tbname. + WHEN '6'. gv_target = ls_table-tbname. + WHEN '7'. gv_distinfo = ls_table-tbname. + WHEN '8'. gv_distrule = ls_table-tbname. + ENDCASE. + ENDLOOP. +ENDFORM. diff --git a/src/zcopatdcommf01.prog.xml b/src/zcopatdcommf01.prog.xml new file mode 100644 index 0000000..c8329e1 --- /dev/null +++ b/src/zcopatdcommf01.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATDCOMMF01 + I + K + 3 + X + + + + R + Include ZCOPATDCOMMF01 + 22 + + + + + diff --git a/src/zcopatdcommon.prog.abap b/src/zcopatdcommon.prog.abap new file mode 100644 index 0000000..5c84c23 --- /dev/null +++ b/src/zcopatdcommon.prog.abap @@ -0,0 +1,19 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATDCOMMON +*&---------------------------------------------------------------------* + +DATA : gt_sender TYPE TABLE OF zstop_sender, "센더 데이타(구조) + gt_receiver TYPE TABLE OF zstop_receiver, "배부 기준 데이타(구조) + gt_variant TYPE TABLE OF zstop_variant, "배부 기준 정보(월별)(구조) + gt_result TYPE TABLE OF zstop_result, "배부 결과 데이타(구조) + gt_target TYPE TABLE OF zstop_target, "전표 발행 대상 데이타(구조) + gt_TY_DISTINFO TYPE TABLE OF zstop_distinfo, "배부 기준 세부 정보(구조) + gt_DISTRULE TYPE TABLE OF zstop_distrule. "배부 조건 Customizing(구조) + + +DATA: g_container TYPE REF TO cl_gui_custom_container, + g_container_left TYPE REF TO cl_gui_custom_container, + g_container_right TYPE REF TO cl_gui_custom_container, + g_grid TYPE REF TO cl_gui_alv_grid, + g_grid_left TYPE REF TO cl_gui_alv_grid, + g_grid_right TYPE REF TO cl_gui_alv_grid. diff --git a/src/zcopatdcommon.prog.xml b/src/zcopatdcommon.prog.xml new file mode 100644 index 0000000..21628eb --- /dev/null +++ b/src/zcopatdcommon.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATDCOMMON + I + K + 3 + X + + + + R + Include ZCOPATDCOMMON + 21 + + + + + diff --git a/src/zcopatdcommtop.prog.abap b/src/zcopatdcommtop.prog.abap new file mode 100644 index 0000000..adff951 --- /dev/null +++ b/src/zcopatdcommtop.prog.abap @@ -0,0 +1,78 @@ +*&---------------------------------------------------------------------* +*& Include ZCOPATDCOMMON +*&---------------------------------------------------------------------* +*-- 화면용 변수 +DATA : ok_code LIKE sy-ucomm, " Screen F-Code + g_repid LIKE sy-repid, + g_dynnr LIKE sy-dynnr. + +*----------------------------------------------------------------------* +* Constants +*----------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CONTROLs +*----------------------------------------------------------------------* +CONTROLS: c_tab TYPE TABSTRIP. "탭스트립 선언 + +*----------------------------------------------------------------------* +* TYPES +*----------------------------------------------------------------------* +TYPES : ty_sender TYPE zstop_sender, + ty_receiver TYPE zstop_receiver, + ty_variant TYPE zstop_variant, + ty_result TYPE zstop_result, + ty_target TYPE zstop_target, + ty_distinfo TYPE zstop_distinfo, + ty_distrule TYPE zstop_distrule. + +* +*----------------------------------------------------------------------* +* Table +*----------------------------------------------------------------------* +DATA : gt_sender TYPE TABLE OF ty_sender, "센더 데이타(구조) + gt_receiver TYPE TABLE OF ty_receiver, "배부 기준 데이타(구조) + gt_variant TYPE TABLE OF ty_variant, "배부 기준 정보(월별)(구조) + gt_result TYPE TABLE OF ty_result, "배부 결과 데이타(구조) + gt_target TYPE TABLE OF ty_target, "전표 발행 대상 데이타(구조) + gt_TY_DISTINFO TYPE TABLE OF ty_distinfo, "배부 기준 세부 정보(구조) + gt_DISTRULE TYPE TABLE OF ty_distrule. "배부 조건 Customizing(구조) + +* +*----------------------------------------------------------------------* +* OBJECT +*----------------------------------------------------------------------* +DATA : g_docking_container TYPE REF TO cl_gui_docking_container, + g_docking_container_top TYPE REF TO cl_gui_docking_container. + +DATA : g_simple_tree TYPE REF TO cl_gui_simple_tree, + gt_nodes TYPE STANDARD TABLE OF mtreesnode. + +DATA : splitter TYPE REF TO cl_gui_splitter_container, + container TYPE REF TO cl_gui_custom_container. + +* 하향식 배부를 수행하기 위한 핵심 cbo 클래스 +DATA : g_top_down TYPE REF TO zcl_copa_topdown. + +DATA: g_container TYPE REF TO cl_gui_custom_container, + g_container_left TYPE REF TO cl_gui_custom_container, + g_container_right TYPE REF TO cl_gui_custom_container, + g_grid TYPE REF TO cl_gui_alv_grid, + g_grid_left TYPE REF TO cl_gui_alv_grid, + g_grid_right TYPE REF TO cl_gui_alv_grid. +*----------------------------------------------------------------------* +* Variance +*----------------------------------------------------------------------* +* 패키지 에서 사용하는 주요 테이블명 +* 모든 프로그램은 직접적인 테이블 명이 아닌 아래 변수를 통해 처리해야 함. +DATA : gv_manager TYPE tabname, "관리테이블 + gv_variant TYPE tabname, "변형(사이클) 지정 테이블 + gv_sender TYPE tabname, "센더 테이블 + gv_receiver TYPE tabname, "Receiver 실적 테이블(배부기준) + gv_result TYPE tabname, "배부 결과 테이블 + gv_target TYPE tabname, "전표 발행 대상 테이블(Not Used..yet) + gv_distinfo TYPE tabname, "변형 세부 내용 테이블 + gv_distrule TYPE tabname. "cbo 추가 조건 테이블 + +DATA : dynnr_up TYPE sy-dynnr, + dynnr_bottom TYPE sy-dynnr. diff --git a/src/zcopatdcommtop.prog.xml b/src/zcopatdcommtop.prog.xml new file mode 100644 index 0000000..8ad94c4 --- /dev/null +++ b/src/zcopatdcommtop.prog.xml @@ -0,0 +1,21 @@ + + + + + + ZCOPATDCOMMTOP + I + K + 3 + X + + + + R + Include ZCOPATDCOMMON + 21 + + + + + diff --git a/src/zcotopdown.fugr.lzcotopdowntop.abap b/src/zcotopdown.fugr.lzcotopdowntop.abap new file mode 100644 index 0000000..ac36ee1 --- /dev/null +++ b/src/zcotopdown.fugr.lzcotopdowntop.abap @@ -0,0 +1,3 @@ +FUNCTION-POOL ZCOTOPDOWN. "MESSAGE-ID .. + +* INCLUDE LZCOTOPDOWND... " Local class definition diff --git a/src/zcotopdown.fugr.lzcotopdowntop.xml b/src/zcotopdown.fugr.lzcotopdowntop.xml new file mode 100644 index 0000000..1970f68 --- /dev/null +++ b/src/zcotopdown.fugr.lzcotopdowntop.xml @@ -0,0 +1,17 @@ + + + + + + LZCOTOPDOWNTOP + S + D$ + I + S + X + D$S + X + + + + diff --git a/src/zcotopdown.fugr.saplzcotopdown.abap b/src/zcotopdown.fugr.saplzcotopdown.abap new file mode 100644 index 0000000..a4a28af --- /dev/null +++ b/src/zcotopdown.fugr.saplzcotopdown.abap @@ -0,0 +1,15 @@ +******************************************************************* +* System-defined Include-files. * +******************************************************************* + INCLUDE LZCOTOPDOWNTOP. " Global Declarations + INCLUDE LZCOTOPDOWNUXX. " Function Modules + +******************************************************************* +* User-defined Include-files (if necessary). * +******************************************************************* +* INCLUDE LZCOTOPDOWNF... " Subroutines +* INCLUDE LZCOTOPDOWNO... " PBO-Modules +* INCLUDE LZCOTOPDOWNI... " PAI-Modules +* INCLUDE LZCOTOPDOWNE... " Events +* INCLUDE LZCOTOPDOWNP... " Local class implement. +* INCLUDE LZCOTOPDOWNT99. " ABAP Unit tests diff --git a/src/zcotopdown.fugr.saplzcotopdown.xml b/src/zcotopdown.fugr.saplzcotopdown.xml new file mode 100644 index 0000000..9e40bac --- /dev/null +++ b/src/zcotopdown.fugr.saplzcotopdown.xml @@ -0,0 +1,18 @@ + + + + + + SAPLZCOTOPDOWN + S + D$ + F + S + 3 + X + D$S + X + + + + diff --git a/src/zcotopdown.fugr.xml b/src/zcotopdown.fugr.xml new file mode 100644 index 0000000..2fac160 --- /dev/null +++ b/src/zcotopdown.fugr.xml @@ -0,0 +1,30 @@ + + + + + CO-PA 하향식 배부 AddOn 서비스 + + LZCOTOPDOWNTOP + SAPLZCOTOPDOWN + + + + ZTOPDOWN_ENV + 테이블명 반환 함수 + + + TB_NAME + TABNAME + + + + + TB_NAME + P + + + + + + + diff --git a/src/zcotopdown.fugr.ztopdown_env.abap b/src/zcotopdown.fugr.ztopdown_env.abap new file mode 100644 index 0000000..987142c --- /dev/null +++ b/src/zcotopdown.fugr.ztopdown_env.abap @@ -0,0 +1,13 @@ +FUNCTION ZTOPDOWN_ENV. +*"-------------------------------------------------------------------- +*"*"로컬인터페이스: +*" EXPORTING +*" VALUE(TB_NAME) TYPE TABNAME +*"-------------------------------------------------------------------- + tb_name = 'ZCOTD1000'. + + + + + +ENDFUNCTION. diff --git a/src/ztopdown.msag.xml b/src/ztopdown.msag.xml new file mode 100644 index 0000000..93f2d26 --- /dev/null +++ b/src/ztopdown.msag.xml @@ -0,0 +1,98 @@ + + + + + + ZTOPDOWN + 3 + CO-PA 하향식 배부 메시지 클래스 + + + + 3 + ZTOPDOWN + 000 + & & & & + + + 3 + ZTOPDOWN + 001 + 이미 처리된 내역이 존재하여, &할 수 없습니다. + + + 3 + ZTOPDOWN + 002 + 작업 내용을 저장하시겠습니까? + + + 3 + ZTOPDOWN + 003 + & 되었습니다. + + + 3 + ZTOPDOWN + 004 + 처리중 &가 발생하였습니다. + + + 3 + ZTOPDOWN + 005 + &을(를) 선택하십시요. + + + 3 + ZTOPDOWN + 006 + 데이타가 존재하지 않습니다. + + + 3 + ZTOPDOWN + 007 + & 하였습니다. + + + 3 + ZTOPDOWN + 008 + & 이(가) 완료되었습니다. + + + 3 + ZTOPDOWN + 009 + & 이(가) 확인되지 않았습니다. + + + 3 + ZTOPDOWN + 010 + 좌측 메뉴에서 원하는 변형을 더블클릭 한 후 사용하십시요. + + + 3 + ZTOPDOWN + 011 + 선택된 &건의 전표를 역분개 하시겠습니까? + + + 3 + ZTOPDOWN + 012 + 선택된 &건의 전표가 역분개 되었습니다. + + + 3 + ZTOPDOWN + 344 + 특성 &가(이) 화면에 없습니다. + + + + +