입력받은 월의 숫자만큼 인터널 테이블의 필드수를 정의하는 방법 문의드립니다.
필드심블을 써서 구현이 가능한지.. 아님 다른 방법이 있다면 도움 주시기 바랍니다..
입력화면의 조건
입력월 : 10
인터널 테이블 형태는 아래와 같습니다.
DATA : BEGIN OF gt_itab OCCURS 0 WITH HEADER LINE,
objnr LIKE cosp-objnr,
wkg001 1월
wkg002 2월
.....
wkg 010 10월
END OF gt_itab.
댓글 5
-
e-abap
2007.10.09 17:34
GENERATE 구문으로 프로그램을 동적으로 생성하면 됩니다. 예제를 못 찾겟네요. 한번 찾아볼게요~ -
백혜정
2007.10.09 19:27
처리방법
1. 1월~12월이 있는 ALV용 itab이라면,
간단하게는 1월~12월 모두 만들고, 숨기고 싶은 월의 fieldcatalog-tech = 'X'로 설정하면됩니다.
2. 일반적인 danamic internal table이라면, 아래 link를 참고하세요.
http://www.sap-img.com/ab030.htm
(예제를 그대로 실행하면 오류가 있어서 약간 손보시고 실행시키시면 됩니다)
핵심은 Class 'CL_ALV_TABLE_CREATE'의 method 'CREATE_DYNAMIC_TABLE' 입니다.
-
e-abap
2007.10.09 20:11
백혜정님의 답변도 좋네요.
generate를 이용해 예전에 만든 소스인데, 보시면 이해가실겁니다.
DATA: BEGIN OF r OCCURS 200, line TYPE t_sline, END OF r.
DATA: pool_name LIKE sy-repid.
DATA: BEGIN OF syn_msg, l1(72), l2(72), l3(72), END OF syn_msg.
DATA: syn_lin TYPE i, syn_wrd(30).
DATA : l_cnt TYPE c.
CLEAR : r , r[] .
g_fname = '123'.
* l_rep_name = sy-repid.
r = 'REPORT ZQMR0400 MESSAGE-ID ZQM1 NO STANDARD PAGE HEADING.' .
APPEND r .
r = 'FORM create_itab.'.
APPEND r .
r = 'DATA: BEGIN OF GT_DISPLAY2 OCCURS 0.'.
APPEND r .
r = 'DATA: kurztext LIKE QPMT-kurztext.'.
APPEND r .
DO 9 TIMES.
l_cnt = l_cnt + 1.
CONCATENATE 'DATA : C' l_cnt '(30) TYPE C.'
INTO r.
APPEND r .
ENDDO.
r = 'DATA: END OF GT_DISPLAY2.'.
APPEND r .
** r = 'ASSIGN (G_FNAME) TO <fs1>.'.
* r = 'LOOP AT GT_DISPLAY2.'.
* APPEND r .
*
* r = 'PERFORM ASSIGN_STR(MZQM0400F01).'.
* APPEND r .
*
* r = 'ENDLOOP.'.
* APPEND r .
*
r = 'ENDFORM .'.
APPEND r .
* GT_DISPLAY2를 글로별 인터널 테이블 구조로 만들기 위해서
* PERFORM ASSIGN_STR USING GT_DISPLAY1.
GENERATE SUBROUTINE POOL r NAME pool_name
MESSAGE syn_msg LINE syn_lin
WORD syn_wrd.
PERFORM create_itab IN PROGRAM (pool_name) .
IF sy-subrc EQ 0.
ENDIF.
PERFORM create_itab IN PROGRAM (sy-repid).
-
w
2007.10.09 23:19
e-abap님 소스에서 t_sline 가 없다고 에러 나는데...
PERFORM create_itab 이것도 없고..
그냥 소스보고 이런식으로 구현한다고 이해하라는건가봐요.
실제 돌아가는 소스면 좋을텐데요.