ABAP 개발 공부한지 한달안되는 초보입니다~
이런 자료도 찾으실 분이 분명 있으시리라 생각하고 올립니다.
기본적으로는 인터널테이블과 WRITE 구문을 이용해서 짠후(1번)
이 코드를 뼈대로 해서 ALV를 이용해서 다시 코드를 재구성했습니다.(2번)
1번. WRITE 이용.
*======================================================================*& WRITE 를 이용한 구구단
*======================================================================
DATA: BEGIN OF line,
col1 TYPE n,
col2 TYPE n,
col3 TYPE i,
END OF line.
* line의 구조를 가지는 Standard table 형태의 인터널 테이블 itab 선언
DATA itab LIKE STANDARD TABLE OF line.
line-col1 = 1.
DO 9 TIMES.
DO 9 TIMES.
line-col2 = sy-Index.
line-col3 = line-col1 * line-col2.
* INSERT line INTO TABLE itab.
APPEND line TO itab.
ENDDO.
line-col1 = line-col1 + 1.
ENDDO.
LOOP AT itab INTO line.
IF line-col2 = 1.
WRITE: /, '=============== ', line-col1, ' 단 =============== ' .
ENDIF.
WRITE: /, line-col1, '*', line-col2, '=', line-col3 LEFT-JUSTIFIED.
ENDLOOP.
*======================================================================
*& WRITE를 이용한 구구단 END
*======================================================================
2번. ALV 이용
*======================================================================
*& ALV 를 이용한 구구단
*======================================================================
TYPE-POOLS: slis.
*&---------------------------------------------------------------------
*& Data Declaration
*&---------------------------------------------------------------------
* 카테고리 필드 선언
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv.
* line-col3 = line-col1 * line-col2
DATA: BEGIN OF line,
col1 TYPE n VALUE 1, "단수
col2 TYPE n, "곱해지는 수
col3 TYPE i, "결과 값
col4 TYPE string VALUE '', " 곱셈식 표현
col5 TYPE string VALUE '', " 단수 표현
col6 TYPE i VALUE 0, " 각 단수의 값 합계
END OF line.
* line의 구조를 가지는 인터널 테이블 itab 선언
DATA ITAB LIKE TABLE OF line.
**&--------------------------------------------------------------------
**& DATA Processing
**&--------------------------------------------------------------------
* ITAB 에 구구단값 입력
DO 9 TIMES.
DO 9 TIMES.
COMPUTE line-col2 = sy-Index.
COMPUTE line-col3 = line-col1 * line-col2.
ADD line-col3 TO line-col6.
* COMPUTE line-col6 = line-col6 + line-col3.
* 각각의 처음 단수 시작시에만 몇단인지 표현
IF line-col2 = 1.
CONCATENATE line-col1 ' 단' INTO line-col5.
ELSE.
CLEAR line-col5 . "곱해지는 수가 1(시작)이 아니면 CLEAR
ENDIF.
* ITAB 테이블에 들어 갈 수식.
CONCATENATE line-col1 ' * ' line-col2 ' = '
INTO line-col4.
* INSERT line INTO TABLE ITAB. "아래의 APPEND와 같은 기능을 함.
APPEND line TO ITAB.
ENDDO.
* 각 단수의 합을 만들기 위한 설정.
line-col4 = '각 단수 합 :'.
line-col3 = line-col6.
INSERT line INTO TABLE ITAB.
CLEAR line-col6.
ADD 1 TO line-col1.
* COMPUTE line-col1 = line-col1 + 1.
ENDDO.
**&--------------------------------------------------------------------
**& START-OF-SELECTION
**&--------------------------------------------------------------------
* 카테고리 필드 설정
START-OF-SELECTION.
wa_fieldcat-fieldname = 'COL5'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'DAN'.
APPEND wa_fieldcat TO gt_fieldcat.
wa_fieldcat-fieldname = 'COL4'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'STATEMENT'.
APPEND wa_fieldcat TO gt_fieldcat.
wa_fieldcat-fieldname = 'COL3'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'ANSWER'.
APPEND wa_fieldcat TO gt_fieldcat.
* 합계값 확인을 위한 임시 컬럼.
wa_fieldcat-fieldname = 'COL6'. " Fieldname in the data table
wa_fieldcat-seltext_m = 'MULTI'.
APPEND wa_fieldcat TO gt_fieldcat.
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = gt_fieldcat
TABLES
t_outtab = ITAB.
*======================================================================
*& ALV 를 이용한 구구단 END
*======================================================================
저두 간단하게 Write 로 9X9를 만들어봤어요. 재귀호출로 했습니다.
상수 CO_DAN 으로 단수조절하실 수 있구요.
co_dan = 9 (9x9단), co_dan = 5 ( 5x5단), 등...
[소스]
CONSTANTS CO_DAN TYPE I VALUE 9.
DATA X TYPE I VALUE 1.
DATA Y TYPE I VALUE 1.
PERFORM GUGUDAN USING X Y.
*
FORM GUGUDAN USING PV_X PV_Y .
DATA RT TYPE I.
IF PV_Y = 1.
WRITE /.
ENDIF.
RT = PV_X * PV_Y.
WRITE : (1) PV_X, (1) 'X', (1) PV_Y, (1) '=', (2) RT, ' '.
IF PV_X = CO_DAN AND PV_Y = CO_DAN.
RETURN.
ENDIF.
IF PV_Y = CO_DAN.
ADD 1 TO PV_X.
CLEAR PV_Y.
ENDIF.
ADD 1 TO PV_Y.
PERFORM GUGUDAN USING PV_X PV_Y.
ENDFORM. "gugudan