*&---------------------------------------------------------------------* *& 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.