✏️ ALV COMBO 박스 동적 제어

빵섭·2025년 12월 9일

✏️ ABAP 공부

목록 보기
15/15
post-thumbnail

💡 ALV 콤보박스 삽입

❓ 예시

1. TOP

메인 테이블에 HANDLE 컬럼 추가

2. FCAT

3. set_drop_down_table

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.
profile
ABAP / SAP

0개의 댓글