안녕하세요, 좋은 아침입니다.
제 생각으로는 두가지 정도의 방법이 있을거 같아요.
1. Max 값이 정해져 있을경우 전체 fieldcatalog를 생성한 뒤 fieldcat 옵션에서 no_out 을 이용하여 제어하는 방법
2. fieldcatalog 생성시부터 정해준 수만큼 생성하는 방법
경우에 따라 각각 장단점이 있겠습니다만... 아래는 2번 방법을 간단하게 구현해 봤습니다.
참조하세요.
DATA: lv_field01(10),
lv_text01(20),
lv_idx TYPE i.
DO gv_time TIMES. "gv_times : 입력받은 col 수
CLEAR : lv_field01, lv_text01, lv_idx.
lv_idx = sy-index.
CONCATENATE 'FIELD' lv_idx INTO lv_field01. "필드명
CONCATENATE '필드' lv_idx INTO lv_text01. "필드텍스트
PERFORM set_fieldcat
TABLES gt_fieldcat
USING : lv_field01 lv_text01 'X' '' '' '12' '' '' '' '' 'EA'.
ENDDO.
*&---------------------------------------------------------------------*
*& Form set_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_fieldcat TABLES pt_fieldcat
USING value(p_field) value(p_text) value(p_just)
value(p_key) value(p_exit) value(p_outlen)
value(p_noout) value(p_sum) value(p_zero)
value(p_icon) value(p_unit).
* COLUMN 위치
STATICS lv_pos TYPE i.
IF gt_fieldcat[] IS INITIAL.
CLEAR lv_pos.
ENDIF.
lv_pos = lv_pos + 1.
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = lv_pos.
gs_fieldcat-fieldname = p_field.
gs_fieldcat-seltext_m = p_text.
gs_fieldcat-just = p_just.
gs_fieldcat-key = p_key.
gs_fieldcat-outputlen = p_outlen.
gs_fieldcat-no_out = p_noout.
gs_fieldcat-do_sum = p_sum.
gs_fieldcat-no_zero = p_zero.
gs_fieldcat-icon = p_icon.
gs_fieldcat-quantity = p_unit.
APPEND gs_fieldcat TO pt_fieldcat.
ENDFORM. " set_fieldcat
실제 출력될 itab에 data를 넣는 과정은 아래처럼 field-symbol을 이용하시면 될거 같습니다.
CONCATENATE 'GT_ITAB-FIELD' lv_idx INTO fieldname01.
ASSIGN (fieldname01) TO < fs01 >.
< fs01 > = (Data Value).
도움이 되시길...