
메인 테이블에 HANDLE 컬럼 추가
ALV에 드롭다운을 등록해주는 METHOD
CHECK pv_modified = 'X'. CLEAR gs_data. LOOP AT pt_good_cells INTO DATA(ls_good_cell). READ TABLE gt_data INTO gs_data INDEX ls_good_cell-row_id. IF sy-subrc = 0. CASE ls_good_cell-fieldname. * 손익센터 값이 변경되었을 때, 코스트센터 콤보박스 적용 WHEN 'PRCTR'. SELECT SINGLE verak INTO gs_data-prctr_name1 FROM cepc WHERE prctr = ls_good_cell-value AND datbi = '99991231'. * 정상적으로 처리된 후, 값을 변경할 경우 DROP_DOWN_HANDLE 초기화. IF gs_data-prctr_name1 IS INITIAL. MESSAGE s000 WITH '잘못된 손익센터입니다.' DISPLAY LIKE 'E'. CLEAR : gs_data-prctr_name1 ,gs_data-drop_down_handle. MODIFY gt_data FROM gs_data INDEX ls_good_cell-row_id TRANSPORTING prctr_name1 drop_down_handle. PERFORM refresh_screen. EXIT. ELSE. DATA : lv_line TYPE i. DATA : ls_combo TYPE lvc_s_drop, lt_combo TYPE lvc_t_drop. CLEAR : lv_line, gs_prctr. * 손익센터 - HANDLE (1:1 관계) 을 저장할 GT_PRCTR IF gt_prctr IS INITIAL. lv_line = 1. ELSE. lv_line = lines( gt_prctr ) + 1. ENDIF. * 위 테이블에 입력된 손익센터가 있는지 확인 READ TABLE gt_prctr INTO gs_prctr WITH KEY prctr = ls_good_cell-value. * 이미 저장된 데이터일 경우엔 일치하는 HANDLE 정보를 준다 IF sy-subrc = 0. gs_data-drop_down_handle = gs_prctr-handle. * 없는 경우 ELSE. * GT_PRCTR 에 손익센터, HANDLE 정보를 추가 gs_prctr-prctr = ls_good_cell-value. gs_prctr-handle = lv_line. gs_data-drop_down_handle = lv_line. APPEND gs_prctr TO gt_prctr. * HANDLE에 따른 DROP_DOWN_LIST SELECT kostl FROM csks INTO TABLE @DATA(lt_kokrs) WHERE prctr = @ls_good_cell-value AND datbi = '99991231'. LOOP AT lt_kokrs INTO DATA(ls_kokrs). ls_combo-handle = lv_line. ls_combo-value = ls_kokrs-kostl. APPEND ls_combo TO lt_combo. CLEAR ls_combo. ENDLOOP. ENDIF. * GS_DATA-HANDLE 에 값이 있어야 일치하는 DROP BOX를 읽을 수 있음 MODIFY gt_data FROM gs_data INDEX ls_good_cell-row_id TRANSPORTING prctr_name1 drop_down_handle. ENDIF. ENDCASE. ENDIF. ENDLOOP. * DROP_DOWN LIST를 ALV에 등록 CALL METHOD gcl_grid->set_drop_down_table EXPORTING it_drop_down = lt_combo. PERFORM refresh_screen.