*********************************************************
* SAP Module : XX
* Description : XXXXXXXXXXXXXXXXXXXXX
* Created by : XX XX XX
* Created on : YYYY/MM/DD.
* Modification Log:
* Date
*********************************************************
*--------------------------------------------------------
* REPORT IDENTIFICATION
* 리포트 선언부. 리포트 전체 라인 사이즈와 Message ID를 정의.
* Line-Size : 한 라인당 칼럼 수를 정의.
* Line-count : 한 페이지당 라인 수를 정의.
* Message-id : 메시지 구문을 모아서 정의한 Message Set을 정의.
*--------------------------------------------------------
REPORT ZREPORT
* NO STANDARD PAGE HEADING
* LINE-SIZE <XX> LINE-COUNT <YY>
* MESSAGE-ID <ZC>.
*--------------------------------------------------------
* TABLES : 프로그램에서 이용하는 테이블을 정의한다.
*--------------------------------------------------------
TABLES :
*--------------------------------------------------------
* CONSTANTS : 프로그램에서 상수로 이용할 변수를 지정
*--------------------------------------------------------
CONSTANTS :
*--------------------------------------------------------
* TYPES : 프로그램에서 사용할 타입을 미리 선언.
*--------------------------------------------------------
TYPES : begin of st_xyz,
end of st_xyz.
*--------------------------------------------------------
* TABLE TYPES : 프로그램에서 사용할 테이블 타입을 미리 선언.
*--------------------------------------------------------
TYPES : tt_xyz type standard table of st_xyz.
*--------------------------------------------------------
* INTERNAL TABLES
* 프로그램에서 사용할 인터널 테이블의 선언부.
* 테이블에서 데이터를 선택해서 저장하고, 연산하기 위한 DATA SET을
* 저장하는 데이터의 평태로 지정한 필드들의 값 세트를 n*m
* 형태의 여러 라인으로 가진다.
*--------------------------------------------------------
DATA : gi_xyz type tt_xyz.
*--------------------------------------------------------
* GLOBAL VARIABLES
* 프로그램 전체에서 사용할 수 있는 전역변수의 선언.
*--------------------------------------------------------
DATA : g_xyz type st_xtz.
*--------------------------------------------------------
* SELECTION-SCREEN
* 프로그램 실행 시 초기 화면의 형태를 구성.
*--------------------------------------------------------
SELECTION-SCREEN BEGION OF BLOCK 1 WITH FRAME TITLE TEXT-XXX.
SELECT-OPTIONS : <SELFIELD1> FOR <TABLE1-FIELD>
OBLIGATORY
DEFAULT <XXX>.
PARAMETER : <P_RB01> RADIOBUTTON GROUP <G1> DEFAULT 'X',
<P_RB02> RADIOBUTTON GROUP <G1>,
<CHK_BOX1> AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK 1
*--------------------------------------------------------
* AT SELECTION-SCREEN OUTPUT
* SELECTION-SCREEN의 PBO와 같은 역할로
* 화면이 처음 실행될 떄, 사용자가 enter키를 칠때 작동하는 이벤트.
*--------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
PERFORM ATSELOUT_MODIFY_SCREEN.
*--------------------------------------------------------
* INITIALIZATION
* SELECTION-SCREEN이 출력되기 전에 실행되는 이벤트.
* SELECTION-SCREEN의 필드값과 변수, 인터널 테이블을 초기화하는 이벤트.
*--------------------------------------------------------
INITIALIZATION.
PERFORM INIT_VARIABLES.
*--------------------------------------------------------
* AT-SELECTION-SCREEN.
* SELECTION-SCREEN에서 입력한 필드값에 이상이 있거나,
* 범위외 또는 타입에 맞지 않는 값을 입력했을 경우에
* 이상 여부를 체크하여 오류메시지를 사용자에게 보여주도록 설정 가능.
*--------------------------------------------------------
AT SELECTION-SCREEN ON selfield1.
IF SELFIELD1 <logical expression>.
MESSAGE E002 WITH TEXT-003.
ENDIF.
*--------------------------------------------------------
* START-OF-SELECTION
* 주로 이 부분에서 데이터를 처리한다.
*--------------------------------------------------------
START-OF-SELECTION.
* SET PF-STATUS <'XXXX'>.
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* TEXT = T2
* EXCEPTIONS
* OHERS = 1.
PERFORM READ_DATA.
*--------------------------------------------------------
* END-OF-SELECTION
* SELECTION 부분이 종료된 후 실행하는 이벤트.
*--------------------------------------------------------
END-OF-SELECTION.
PERFORM WRITE_REPORT.
* CLEAR <ITAB1-FIELD1>.
*--------------------------------------------------------
* TOP-OF-PAGE
* 리포트 출력 시 헤더의 위치에 출력되는 내용을 정의하는 이벤트.
*--------------------------------------------------------
TOP-OF-PAGE.
PERFORM WIRTE_REPORT_HEADER.
*--------------------------------------------------------
* END-OF-PAGE
* 리포트 데이터 부분 아래에 미주형태로 출력 내용을 정의하는 이벤트.
*--------------------------------------------------------
END-OF-PAGE.
PERFORM WIRTE_REPORT_FOOTER.
*--------------------------------------------------------
* AT USER-COMMAND
* 사용자가 특정 버튼을 클릭하거나 액션을 취할 때 처리하는 이벤트
* 연계하여 실행할 프로그램이나 데이터를 처리할 때 사용.
*--------------------------------------------------------
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'XXX'.
PERFORM <XXX>.
WHEN 'YYY'.
PERFORM <YYY>.
ENDCASE.
*--------------------------------------------------------
* AT LINE-SELECTION
* 리포트의 특정 라인을 선택하여 취하려는 경우에 사용하는 이벤트.
* 인터널 테이블 정보를 기반으로 다른 프로그램에 정보를 전달하여 사용.
*--------------------------------------------------------
AT LINE-SELECTION.
CHECK NOT <ITAB1-FIELD1> IS INITIAL.
PERFORM <ZZZZ>.
CLEAR <ITAB1-FIELD1>.
*--------------------------------------------------------
* FORM ATSELOUT_MODIFY_SCREEN
* AT SELECTION-SCREEN OUTPUT 의 PERFORM.
* SELECTION-SCREEN 변경할 떄 사용하는 수행문.
*--------------------------------------------------------
FORM ATSELOUT_MODIFY_SCREEN.
ENDFORM.
*--------------------------------------------------------
* FORM INIT_VARIABLES
* 프로그램 시작 전 프로그램에서 사용하는 모든 변수나,
* 인터널 테이블 등을 초기화하는 수행문.
* SELECTION-SCREEN의 필드값을 정할 수 있다.
*--------------------------------------------------------
FORM INIT_VARIABLES.
DATA : year(4) TYPE c,
month(2) TYPE c,
day(2) TYPE c.
MOVE sy-datum+0(4) TO year. "offset에서 4자리
MOVE sy-datum+4(2) TO month. "offset 4에서 2자리
MOVE : 'I' TO s_year-sign,
'EQ' TO s_year-option,
year TO s_year-low.
APPEND s_year.
MOVE : 'I' TO s_month-sign,
'EQ' TO s_month-option,
month TO s_month-low.
APPEND s_md.
REFRESH gi_xyz. "인터널 테이블 초기화.
CLEAR g_xyz. "변수나 인터널 테이블 헤드 초기화.
ENDFORM.
*--------------------------------------------------------
* FORM READ_DATA
* sql문을 이용하여 데이터베이스 테이블로부터 데이터를 읽어와서
* 인터널 테이블에 저장하는 수행문.
*--------------------------------------------------------
FORM READ_DATA.
SELECT zzz yyy
FROM databasetable
INTO TABLE gi_xyz
WHERE zzz in <selfield1>.
ENDFORM.
*--------------------------------------------------------
* FORM WRITE_REPORT_HEADER
* 리포트의 머리글 부분에 쓸 내용 정의.
*--------------------------------------------------------
FORM WRITE_REPORT_HEADER.
FORMAT COLOR COL_HEADING.
WRITE AT (10) <TEXT1>.
WRITE AT (20) <TEXT2>.
ULINE.
ENDFORM.
*--------------------------------------------------------
* FORM WIRTE_REPORT_FOOTER
* 리포트의 바닥글 부분에 쓸 내용을 정의.
*--------------------------------------------------------
FORM WRITE_REPORT_FOOTER.
WRITE : / <TEXT4>.
ENDFORM.
*--------------------------------------------------------
* FORM WRITE REPORT
* 실제 리포트 상세 내역을 화면에 출력.
* 인터널 테이블에 여러 데이터가 있어써 반복문을 이용하여 출력.
*--------------------------------------------------------
FORM WRITE REPORT.
LOOP AT gi_xyz into g_xyz.
WRITE : /AT 10<ITAB1-FIELD1> COLOR COL_KEY INTENSIFIED.
FORMAT RESET.
FORMAT COLOR COL_NORMAL.
WRITE : /AT 25 gi_xyz-field1.
WRITE : /AT 40 gi_xyz-field2.
HIDE <ITAB1-FIELD1>.
NEW-LINE.
ENDLOOP.
*********************************************************
* SAP Module : XX
* Description : XXXXXXXXXXXXXXXXXXXXX
* Created by : XX XX XX
* Created on : YYYY/MM/DD.
* Modification Log:
* Date
*********************************************************
*--------------------------------------------------------
* REPORT IDENTIFICATION
* 리포트 선언부. 리포트 전체 라인 사이즈와 Message ID를 정의.
* Line-Size : 한 라인당 칼럼 수를 정의.
* Line-count : 한 페이지당 라인 수를 정의.
* Message-id : 메시지 구문을 모아서 정의한 Message Set을 정의.
*--------------------------------------------------------
REPORT ZREPORT
* NO STANDARD PAGE HEADING
* LINE-SIZE <XX> LINE-COUNT <YY>
* MESSAGE-ID <ZC>.
*--------------------------------------------------------
* TABLES : 프로그램에서 이용하는 테이블을 정의한다.
*--------------------------------------------------------
TABLES :
*--------------------------------------------------------
* CONSTANTS : 프로그램에서 상수로 이용할 변수를 지정
*--------------------------------------------------------
CONSTANTS :
*--------------------------------------------------------
* TYPES : 프로그램에서 사용할 타입을 미리 선언.
*--------------------------------------------------------
TYPES : begin of st_xyz,
end of st_xyz.
*--------------------------------------------------------
* TABLE TYPES : 프로그램에서 사용할 테이블 타입을 미리 선언.
*--------------------------------------------------------
TYPES : tt_xyz type standard table of st_xyz.
*--------------------------------------------------------
* INTERNAL TABLES
* 프로그램에서 사용할 인터널 테이블의 선언부.
* 테이블에서 데이터를 선택해서 저장하고, 연산하기 위한 DATA SET을
* 저장하는 데이터의 평태로 지정한 필드들의 값 세트를 n*m
* 형태의 여러 라인으로 가진다.
*--------------------------------------------------------
DATA : gi_xyz type tt_xyz.
*--------------------------------------------------------
* GLOBAL VARIABLES
* 프로그램 전체에서 사용할 수 있는 전역변수의 선언.
*--------------------------------------------------------
DATA : g_xyz type st_xtz.
*--------------------------------------------------------
* SELECTION-SCREEN
* 프로그램 실행 시 초기 화면의 형태를 구성.
*--------------------------------------------------------
SELECTION-SCREEN BEGION OF BLOCK 1 WITH FRAME TITLE TEXT-XXX.
SELECT-OPTIONS : <SELFIELD1> FOR <TABLE1-FIELD>
OBLIGATORY
DEFAULT <XXX>.
PARAMETER : <P_RB01> RADIOBUTTON GROUP <G1> DEFAULT 'X',
<P_RB02> RADIOBUTTON GROUP <G1>,
<CHK_BOX1> AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK 1
*--------------------------------------------------------
* AT SELECTION-SCREEN OUTPUT
* SELECTION-SCREEN의 PBO와 같은 역할로
* 화면이 처음 실행될 떄, 사용자가 enter키를 칠때 작동하는 이벤트.
*--------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
PERFORM ATSELOUT_MODIFY_SCREEN.
*--------------------------------------------------------
* INITIALIZATION
* SELECTION-SCREEN이 출력되기 전에 실행되는 이벤트.
* SELECTION-SCREEN의 필드값과 변수, 인터널 테이블을 초기화하는 이벤트.
*--------------------------------------------------------
INITIALIZATION.
PERFORM INIT_VARIABLES.
*--------------------------------------------------------
* AT-SELECTION-SCREEN.
* SELECTION-SCREEN에서 입력한 필드값에 이상이 있거나,
* 범위외 또는 타입에 맞지 않는 값을 입력했을 경우에
* 이상 여부를 체크하여 오류메시지를 사용자에게 보여주도록 설정 가능.
*--------------------------------------------------------
AT SELECTION-SCREEN ON selfield1.
IF SELFIELD1 <logical expression>.
MESSAGE E002 WITH TEXT-003.
ENDIF.
*--------------------------------------------------------
* START-OF-SELECTION
* 주로 이 부분에서 데이터를 처리한다.
*--------------------------------------------------------
START-OF-SELECTION.
* SET PF-STATUS <'XXXX'>.
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* TEXT = T2
* EXCEPTIONS
* OHERS = 1.
PERFORM READ_DATA.
*--------------------------------------------------------
* END-OF-SELECTION
* SELECTION 부분이 종료된 후 실행하는 이벤트.
*--------------------------------------------------------
END-OF-SELECTION.
PERFORM EDIT_DATA.
* CLEAR <ITAB1-FIELD1>.
*--------------------------------------------------------
* FORM READ_DATA
* sql문을 이용하여 데이터베이스 테이블로부터 데이터를 읽어와서
* 인터널 테이블에 저장하는 수행문.
*--------------------------------------------------------
FORM READ_DATA.
SELECT zzz yyy
FROM databasetable
INTO TABLE gi_xyz
WHERE zzz in <selfield1>.
ENDFORM.
*--------------------------------------------------------
* FORM EDIT_DATA
* data의 내용을 화면에 출력. ALV 형태에 맞게 조정하여 출력한다.
*--------------------------------------------------------
FORM edit_data.
PERFORM fieldcat_crt_rtn.
PERFORM layout_edit_rtn.
PERFORM header_edit_rtn.
PERFORM event_edit_rtn CHANGING g_eventcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_pgm
i_callback_pf_status_set = 'SET_PF_STATUS'=
is_layout = g_layout
it_fieldcat = g_field_cat[]
it_sort = g_sortcat
it_events = g_eventcat[]
is_print = g_print_cat
TABLES
t_outtab = gi_list.
ENDFORM.
*--------------------------------------------------------
* FORM ALV_HEADER
* ALV의 헤더 부분을 세팅
*--------------------------------------------------------
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = g_top_of_page.
ENDFORM.
*--------------------------------------------------------
* FORM SET_PF_STATUS
* 리포트의 머리글 부분에 쓸 내용 정의.
*--------------------------------------------------------
FORM SET_PF_STATUS USING extab TYPE slis_t_extab.
SET PF-STATUS 'ALV_PF'.
SET TITLEBAR 'ALV_TITLE'.
ENDFORM.
*--------------------------------------------------------
* FORM FIELDCAT_CRT_RTN
+ ALV 화면에 출력할 필드 정의
* 컬럼병은 반드시 대문자로 써야한다.
*--------------------------------------------------------
FORM fieldcat_crt_rtn.
* FIELD CATALOG -----------------------------------------
* P_FNAM P_TEXT P_TYPE P_OLEN P_FIXC P_NOUT P_CAT
PERFORM fieldcat_edit_rtn USING :
'PSPID' 'Project No ' ' ' '15' 'X' ' ' 'C1',
'PSPID' 'WBS elem ' ' ' '15' 'X' ' ' 'C1',
'POST1' 'WBS 명 ' ' ' '50' ' ' ' ' 'C1',
'INTR ' '이자 ' ' ' '15' ' ' ' ' 'C1'.
ENDFORM.
*--------------------------------------------------------
* FORM LAYOUT_EDIT_RTN
* ALV 화면에 출력할 레이아웃 속성 정의
*--------------------------------------------------------
FORM layout_edit_rtn.
* LAYOUT OPTIONS ----------------------------------------
g_layout-box_fieldname = 'CHK'.
g_layout-box_tabname = 'GI_LIST'.
g_layout-totals_before_items = 'X'.
g_layout-totals_only = 'X'.
g_layout-totals_text = 'Total'.
g_layout-subtotals_text = 'Sub Total'.
g_layout-colwidth_optimize = 'X'.
g_layout-zebra = 'X'.
g_layout-NO_VLINE = 'X'.
g_layout-F2CODE = '&ETA'.
g_layout-MAX_LINESIZE = '1000'
g_layout-DEF_STATUS = 'ALV_PF.
* GRID OPTIONS ----------------------------------------
g_layout-cell_merge = 'X'.
g_layout-EDIT = 'X'.
g_layout-edit_mode = 'X'.
g_layout-WINDOW_TITLEBAR = SY-TITLE.
g_layout-NO_ULINE_HS = 'X'.
g_layout-KEY_HOTSPOT = SPACE.
g_layout-COLTAB_FIELDNAME = 'T-FLD'.
g_layout-LIST_APPEND = SPACE.
* PRINT OPTIONS ----------------------------------------
S_SELFIELD-REFRESH = 'X'.
g_print_cat-no_print_selinfos = 'X'.
g_print_cat-no_print_listinfos = 'X'.
g_print_cat-no_coverpage = 'X'.
g_print_cat-no_new_page = 'X'.
ENDFORM.
*--------------------------------------------------------
* FORM HEADER_EDIT_RTN
* ALV 화면에 출력할 헤더 속성 정의
*--------------------------------------------------------
FORM HEADER_EDIT_RTN.
DATA : lv_date(10) TYPE c.
* TOP Description Edit
CLEAR : g_sline, g_top_of_page.
g_sline-typ = 'H".
g_sline-info = '계획 Report'.
APPEND g_sline to g_top_of_page.
* Project Description
g_sline-typ = 'H'.
g_sline-info = 'Project No. :'.
g_sline-info+15(20) = p_pspid.
APPEND g_sline TO g_top_of_page.
* Date Description
DATA : lv_time(20) TYPE c.
CONCATENATE sy-datum+0(4) '.' sy-datum+4(2) '.' sy-datum+6(2)
INTO lv_date.
CONCATENATE sy-uzeit+0(2) ':' sy-uzeit+2(2) ':' sy-uzeit+4(2)
INTO lv_time.
g_sline-typ = 'S'.
g_sline-info = 'DATE : '.
g_sline-info+10(20) = lv_date.
g_sline-info+30(10) = '/ TIME : '.
g_sline-info+40(20) = lv_time.
APPEND g_sline TO g_top_of_page.
* User Description
g_sline-typ = 'S'.
g_sline-info = 'USER :'.
g_sline-info+15(20) = sy-uname.
APPEND g_sline TO g_top_of_page.
ENDFORM.
*--------------------------------------------------------
* FORM EVENT_EDIT_RTN
* ALV 화면에 출력할 이벤트 속성 정의
*--------------------------------------------------------
FORM event_edit_rtn CHANGING p_event_cats TYPE slis_t_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = g_eventcat.
READ TABKE g_eventcat WITH KEY name = slis_ev_tio_of_page
INTO g_event_ccat.
IF sy-subrc = 0.
MOVE s_form_top_of_page TO g_event_cat-form.
APPEND g_event_cat TO g_eventcat.
ENDIF.
ENDFORM.
*--------------------------------------------------------
* FORM FIELDCAT_EDIT_RTN
* ALV 화면에 출력할 필드 속성 정의
*--------------------------------------------------------
FORM fieldcat_edit_rtn USING
p_fnam p_text p_type p_olen p_fixc p_nout p_cat.
g_pos = g_pos +1.
g_fieldcat-col_pos = p_pos.
g_fieldcat-fieldname = p_fnam.
g_fieldcat-reptext_ddic = p_text.
g_fieldcat-datatype = p_type.
g_fieldcat-outputlen = p_olen.
g_fieldcat-fix_column = p_fixc.
g_fieldcat-no_out = p_nout.
g_fieldcat-input = p_edit.
g_fieldcat-edit = p_edit.
g_fieldcat-no_zero = 'X'.
* 특정한 칼럼의 필드에 속성을 지정
CASE p_fnam.
WHEN 'WKGBTR'.
g_fieldcat-just = 'R'. * 위치 정렬
g_fieldcat-edit_mask = '____%'.
WHEN 'SUM_WKG'.
g_fieldcat-just = 'R'. * 위치 정렬
WHEN 'RATE1'.
g_fieldcat-just = 'R'. * 위치 정렬
WHEN 'INTR'.
g_fieldcat-just = 'R'. * 위치 정렬
ENDCASE.
CASE p_cat.
WHEN 'C1'.
APPEND : g_fieldcat TO g_field_cat.
ENDCASE.
* SORT CATALOG 특정 칼럼의 필드에 정렬 속성을 지정함
CASE p_fnam.
WHEN 'PSPID'.
PERFORM sort_cat_edit_rtn USING :
p_fnam g_pos 'X' ' ' 'X'.
WHEN 'POSID'.
PERFORM sort_cat_edit_rtn USING :
p_fnam g_pos 'X' ' ' 'X'.
WHEN 'POST1'.
PERFORM sort_cat_edit_rtn USING :
p_fnam g_pos 'X' ' ' 'X'.
ENDCASE.
CLEAR : g_fieldcat.
EMDFORM.
*--------------------------------------------------------
* FORM sort_cat_edit_rtn
* ALV 화면에 출력될 Column Sort 속성 정의
*--------------------------------------------------------
FORM sort_cat_edit_rtn USING p_fname p_pos p_up p_down p_subtot.
g_sort_cat-spos = p_pos. * 필드위치
g_sort_cat-fieldname = p_fname. * 필드 Name
g_sort_cat-up = p_up. * Ascending Sort(Space or 'X')
g_sort_cat-down = p_down. * Descending Sort(Space or 'X')
g_sort_cat-subtot = p_subtot. * Sub Total(Space or 'X')
APPEND g_sort_cat TO g_sortcat. * X로 체크하면 설정됨.
ENDFORM.
생략.
*********************************************************
* SAP Module : XX
* Description : XXXXXXXXXXXXXXXXXXXXX
* Created by : XX XX XX
* Created on : YYYY/MM/DD.
* Modification Log:
* Date
*********************************************************
*--------------------------------------------------------
* REPORT IDENTIFICATION
* 프로그램 선언부. Message ID를 정의.
* Message-id : 메시지 구문을 모아서 정의한 Message Set을 정의.
*--------------------------------------------------------
REPORT ZREPORT
* MESSAGE-ID <ZC>.
*--------------------------------------------------------
* TABLES : 프로그램에서 이용하는 테이블을 정의한다.
*--------------------------------------------------------
TABLES :
*--------------------------------------------------------
* CONSTANTS : 프로그램에서 상수로 이용할 변수를 지정
*--------------------------------------------------------
CONSTANTS :
*--------------------------------------------------------
* STANDARD TYPES : 프로그램에서 사용할 타입을 미리 선언.
*--------------------------------------------------------
TYPES : begin of st_xyz,
end of st_xyz.
*--------------------------------------------------------
* TABLE TYPES : 프로그램에서 사용할 테이블 타입을 미리 선언.
*--------------------------------------------------------
TYPES : tt_xyz type standard table of st_xyz.
*--------------------------------------------------------
* INTERNAL TABLES
* 프로그램에서 사용할 인터널 테이블의 선언부.
* 테이블에서 데이터를 선택해서 저장하고, 연산하기 위한 DATA SET을
* 저장하는 데이터의 평태로 지정한 필드들의 값 세트를 n*m
* 형태의 여러 라인으로 가진다.
*--------------------------------------------------------
DATA : gi_xyz type tt_xyz.
*--------------------------------------------------------
* GLOBAL VARIABLES
* 프로그램 전체에서 사용할 수 있는 전역변수의 선언.
*--------------------------------------------------------
DATA : g_xyz type st_xtz.
*--------------------------------------------------------
* SELECTION-SCREEN
* 프로그램 실행 시 초기 화면의 형태를 구성.
*--------------------------------------------------------
SELECTION-SCREEN BEGION OF BLOCK 1 WITH FRAME TITLE TEXT-XXX.
SELECT-OPTIONS : <SELFIELD1> FOR <TABLE1-FIELD>
OBLIGATORY
DEFAULT <XXX>.
PARAMETER : <P_RB01> RADIOBUTTON GROUP <G1> DEFAULT 'X',
<P_RB02> RADIOBUTTON GROUP <G1>,
<CHK_BOX1> AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK 1
*--------------------------------------------------------
* AT SELECTION-SCREEN OUTPUT
* SELECTION-SCREEN의 PBO와 같은 역할로
* 화면이 처음 실행될 떄, 사용자가 enter키를 칠때 작동하는 이벤트.
*--------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
PERFORM ATSELOUT_MODIFY_SCREEN.
*--------------------------------------------------------
* INITIALIZATION
* SELECTION-SCREEN이 출력되기 전에 실행되는 이벤트.
* SELECTION-SCREEN의 필드값과 변수, 인터널 테이블을 초기화하는 이벤트.
*--------------------------------------------------------
INITIALIZATION.
PERFORM INIT_VARIABLES.
*--------------------------------------------------------
* AT-SELECTION-SCREEN.
* SELECTION-SCREEN에서 입력한 필드값에 이상이 있거나,
* 범위외 또는 타입에 맞지 않는 값을 입력했을 경우에
* 이상 여부를 체크하여 오류메시지를 사용자에게 보여주도록 설정 가능.
*--------------------------------------------------------
AT SELECTION-SCREEN ON selfield1.
IF SELFIELD1 <logical expression>.
MESSAGE E002 WITH TEXT-003.
ENDIF.
*--------------------------------------------------------
* START-OF-SELECTION
* 주로 이 부분에서 데이터를 처리한다.
*--------------------------------------------------------
START-OF-SELECTION.
* SET PF-STATUS <'XXXX'>.
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* TEXT = T2
* EXCEPTIONS
* OHERS = 1.
PERFORM READ_DATA.
*--------------------------------------------------------
* END-OF-SELECTION
* SELECTION 부분이 종료된 후 실행하는 이벤트.
*--------------------------------------------------------
END-OF-SELECTION.
PERFORM EDIT_DATA.
* CLEAR <ITAB1-FIELD1>.
*--------------------------------------------------------
* FORM ATSELOUT_MODIFY_SCREEN
* AT SELECTION-SCREEN OUTPUT 의 PERFORM.
* SELECTION-SCREEN 변경할 떄 사용하는 수행문.
*--------------------------------------------------------
FORM ATSELOUT_MODIFY_SCREEN.
ENDFORM.
*--------------------------------------------------------
* FORM INIT_VARIABLES
* 프로그램 시작 전 프로그램에서 사용하는 모든 변수나,
* 인터널 테이블 등을 초기화하는 수행문.
* SELECTION-SCREEN의 필드값을 정할 수 있다.
*--------------------------------------------------------
FORM INIT_VARIABLES.
DATA : year(4) TYPE c,
month(2) TYPE c,
day(2) TYPE c.
MOVE sy-datum+0(4) TO year. "offset에서 4자리
MOVE sy-datum+4(2) TO month. "offset 4에서 2자리
MOVE : 'I' TO s_year-sign,
'EQ' TO s_year-option,
year TO s_year-low.
APPEND s_year.
MOVE : 'I' TO s_month-sign,
'EQ' TO s_month-option,
month TO s_month-low.
APPEND s_md.
REFRESH gi_xyz. "인터널 테이블 초기화.
CLEAR g_xyz. "변수나 인터널 테이블 헤드 초기화.
ENDFORM.
*--------------------------------------------------------
* FORM READ_DATA
* sql문을 이용하여 데이터베이스 테이블로부터 데이터를 읽어와서
* 인터널 테이블에 저장하는 수행문.
*--------------------------------------------------------
FORM READ_DATA.
SELECT zzz yyy
FROM databasetable
INTO TABLE gi_xyz
WHERE zzz in <selfield1>.
ENDFORM.
*--------------------------------------------------------
* FORM EDIT_DATA
* data의 내용을 화면에 출력.
*--------------------------------------------------------
FORM EDIT_DATA.
CALL SCREEN 0100.
ENDFORM.
Screen Attribute 설정 -> Layout 설정 -> FLOW LOGIC
*--------------------------------------------------------
* FLOW LOGIC
* data의 내용을 화면에 출력.
*--------------------------------------------------------
PROCESS BEFORE OUTPUT.
MODULE status_0100.
LOOP AT it_zsd0003 WITH CONTROL tcl
CURSOR tcl-current_line.
MODULE modify_screen_0100.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
LOOP AT it_zsd00003.
MODULE modify_tcl.
ENDLOOP.
MODULE user_command_0100.
*--------------------------------------------------------
* MODULE STATUS_100 OUTPUT
* Status(menubar, toolbar, function key) 지정.
*--------------------------------------------------------
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'SCREEN0100'.
SET TITLEBAR 'SCREEN0100'.
* Setting the number of line of the table control
DESCRIBE TABLE it_zsd00003 LINES tcl-lines.
* Optional : Place the cursor on line g_current_line e.g.
* after a validation error has occured
IF NOT (g_current_line IS INITIAL).
tcl-top_line = g_current_line.
CLEAR g_current_line.
ENDIF.
ENDMODULE.
*--------------------------------------------------------
* MODULE STATUS_100 OUTPUT
* 화면 속성 변경
*--------------------------------------------------------
MODULE modify_screen_0100 OUTPUT.
* Optional : Protect some of the coulumns on the table control
LOOP AT SCREEN.
IF screen-group1 = 'X'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
*--------------------------------------------------------
* MODULE EXIT INPUT.
* 화면 Exit 처리
*--------------------------------------------------------
MODULE EXIT INPUT.
CASE sy-ucomm.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'CANC'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
CLEAR : sy-ucomm.
ENDMODULE.
*--------------------------------------------------------
* MODULE MODIFY_TCL INPUT.
* Table control 속성 변경.
*--------------------------------------------------------
MODULE MODIFY_TCL INPUT.
* Modify an existing entry
MODIFY it_zsd00003 INDEX tcl-current_line.
* OR
* Appending a anew entry
APPEND it_zsd00003.
ENDMODULE.
*--------------------------------------------------------
* MODULE USER_COMMAND_0100 INPUT
* 사용자 함수 키 처리.
*--------------------------------------------------------
MODULE user_command_0100 INPUT.
cASE sy-ucomm.
WHEN 'SAVE'.
WHEN 'INSR'.
WHEN 'CHAN'.
WHEN 'DELE'.
WHEN 'UPLD'.
WHEN 'LOGD'.
WHEN 'EXCE'.
WHEN 'DOWN'.
WHEN 'SORT'.
ENDCASE.
CLEAR : sy-ucomm.
ENDMODULE.
Menu Bar -> Application Bar -> Function Keys -> Title 설정
*********************************************************
* SAP Module : XX
* Description : XXXXXXXXXXXXXXXXXXXXX
* Created by : XX XX XX
* Created on : YYYY/MM/DD.
* Modification Log:
* Date
*********************************************************
*--------------------------------------------------------
* REPORT IDENTIFICATION
* 프로그램 선언부. Message ID를 정의.
* Message-id : 메시지 구문을 모아서 정의한 Message Set을 정의.
*--------------------------------------------------------
REPORT ZBDC
* MESSAGE-ID <ZC>.
*--------------------------------------------------------
* TABLES : 프로그램에서 이용하는 테이블을 정의한다.
*--------------------------------------------------------
TABLES :
*--------------------------------------------------------
* CONSTANTS : 프로그램에서 상수로 이용할 변수를 지정
*--------------------------------------------------------
CONSTANTS :
*--------------------------------------------------------
* STANDARD TYPES : 프로그램에서 사용할 타입을 미리 선언.
*--------------------------------------------------------
TYPES : begin of st_xyz,
end of st_xyz.
*--------------------------------------------------------
* TABLE TYPES : 프로그램에서 사용할 테이블 타입을 미리 선언.
*--------------------------------------------------------
TYPES : tt_xyz type standard table of st_xyz.
*--------------------------------------------------------
* INTERNAL TABLES
* 프로그램에서 사용할 인터널 테이블의 선언부.
* 테이블에서 데이터를 선택해서 저장하고, 연산하기 위한 DATA SET을
* 저장하는 데이터의 평태로 지정한 필드들의 값 세트를 n*m
* 형태의 여러 라인으로 가진다.
*--------------------------------------------------------
DATA : gi_xyz type tt_xyz.
*--------------------------------------------------------
* BDC TABLE
* BDC를 실행하기 위한 DATA TEMPLAT INTERNAL TABLE.
*--------------------------------------------------------
DATA : BEGIN OF bdc_tab OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA : END OF bdc_tab.
*--------------------------------------------------------
* BDC MESSAGE TABLE
* BDC를 실행한 후 결과 메시지를 되돌려받기 위한 INTERNAL TABLE.
*--------------------------------------------------------
DATA : BEGIN OF GT_ITAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA : END OF GT_ITAB.
*--------------------------------------------------------
* GLOBAL VARIABLES
* 프로그램 전체에서 사용할 수 있는 전역변수의 선언.
*--------------------------------------------------------
DATA : g_xyz type st_xtz.
*--------------------------------------------------------
* SELECTION-SCREEN
* 프로그램 실행 시 초기 화면의 형태를 구성.
*--------------------------------------------------------
SELECTION-SCREEN BEGION OF BLOCK 1 WITH FRAME TITLE TEXT-XXX.
SELECT-OPTIONS : <SELFIELD1> FOR <TABLE1-FIELD>
OBLIGATORY
DEFAULT <XXX>.
PARAMETER : <P_RB01> RADIOBUTTON GROUP <G1> DEFAULT 'X',
<P_RB02> RADIOBUTTON GROUP <G1>,
<CHK_BOX1> AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK 1
*--------------------------------------------------------
* AT-SELECTION-SCREEN.
* SELECTION-SCREEN에서 입력한 필드값에 이상이 있거나,
* 범위외 또는 타입에 맞지 않는 값을 입력했을 경우에
* 이상 여부를 체크하여 오류메시지를 사용자에게 보여주도록 설정 가능.
*--------------------------------------------------------
AT SELECTION-SCREEN ON selfield1.
IF SELFIELD1 <logical expression>.
MESSAGE E002 WITH TEXT-003.
ENDIF.
*--------------------------------------------------------
* INITIALIZATION
* SELECTION-SCREEN이 출력되기 전에 실행되는 이벤트.
* SELECTION-SCREEN의 필드값과 변수, 인터널 테이블을 초기화하는 이벤트.
*--------------------------------------------------------
INITIALIZATION.
PERFORM INIT_VARIABLES.
*--------------------------------------------------------
* START-OF-SELECTION
* 주로 이 부분에서 데이터를 처리한다.
*--------------------------------------------------------
START-OF-SELECTION.
* SET PF-STATUS <'XXXX'>.
* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
* EXPORTING
* TEXT = T2
* EXCEPTIONS
* OHERS = 1.
PERFORM READ_DATA.
*--------------------------------------------------------
* END-OF-SELECTION
* SELECTION 부분이 종료된 후 실행하는 이벤트.
*--------------------------------------------------------
END-OF-SELECTION.
PERFORM EDIT_DATA.
* CLEAR <ITAB1-FIELD1>.
*--------------------------------------------------------
* FORM ATSELOUT_MODIFY_SCREEN
* AT SELECTION-SCREEN OUTPUT 의 PERFORM.
* SELECTION-SCREEN 변경할 떄 사용하는 수행문.
*--------------------------------------------------------
FORM ATSELOUT_MODIFY_SCREEN.
ENDFORM.
*--------------------------------------------------------
* FORM INIT_VARIABLES
* 프로그램 시작 전 프로그램에서 사용하는 모든 변수나,
* 인터널 테이블 등을 초기화하는 수행문.
* SELECTION-SCREEN의 필드값을 정할 수 있다.
*--------------------------------------------------------
FORM INIT_VARIABLES.
DATA : year(4) TYPE c,
month(2) TYPE c,
day(2) TYPE c.
MOVE sy-datum+0(4) TO year. "offset에서 4자리
MOVE sy-datum+4(2) TO month. "offset 4에서 2자리
MOVE : 'I' TO s_year-sign,
'EQ' TO s_year-option,
year TO s_year-low.
APPEND s_year.
MOVE : 'I' TO s_month-sign,
'EQ' TO s_month-option,
month TO s_month-low.
APPEND s_md.
REFRESH gi_xyz. "인터널 테이블 초기화.
CLEAR g_xyz. "변수나 인터널 테이블 헤드 초기화.
ENDFORM.
*--------------------------------------------------------
* FORM READ_DATA
* sql문을 이용하여 데이터베이스 테이블로부터 데이터를 읽어와서
* 인터널 테이블에 저장하는 수행문.
*--------------------------------------------------------
FORM READ_DATA.
SELECT zzz yyy
FROM databasetable
INTO TABLE gi_xyz
WHERE zzz in <selfield1>.
ENDFORM.
*--------------------------------------------------------
* FORM EDIT_DATA
* data의 내용을 화면에 출력.
*--------------------------------------------------------
FORM EDIT_DATA.
ENDFORM.
*--------------------------------------------------------
* FORM BDC_RUN
* BDC 실행 데이터 생성 및 실행하는 form
* BDC프로그램을 실행하기 위한 데이터를 생성 및 설정하고 BDC를 실행.
*--------------------------------------------------------
FORM BDC_RUN.
PERFORM DYNPRO USING :
* <DYNBEGIN> <BDC_TAB-PROGRAM> <BDC_TAB-DYNPRO>,
* 'X' 'SAPMF77a' '2100',
* ' ' 'BDC_OKCODE' '/00',
* ' ' 'VTB_HEADER-BUKRS' IT_DATA-BUKRS,
* ' ' 'VTB_HEADER-SGSART' '60A',
*--------------------------------------------------------
* 실행시 mode option : 'A' - BDC all 과정
'E' - error시 BDC를 멈추고 보여줌
'N' - BDC 과정 보지 않음.
* 실행시 update option : 'A' 'S' 'L'
*--------------------------------------------------------
CALL TRANSACTION <실행t-code>
USING BDC_TAB
MODE mode_option
UPDATE update_option
MESSAGES INTO 메시지 internal_table
ENDFORM.
*--------------------------------------------------------
* FORM DYNPRO
* BDC로 실행할 데이터를 BDC TAB에 SAVE하는 form.
*--------------------------------------------------------
FORM DYNPRO USING DYNBEGIN NAME VALUE.
IF DYNBEGIN = 'X'.
CLEAR BDC_TAB.
MOVE : NAME TO BDC_TAB-PROGRAM,
VALUE TO BDC_TAB-DYNPRO,
'X' TO BDC_TAB-DYNBEGIN.
APPEND BDC_TAB.
ELSE.
CLEAR BDC_TAB.
MOVE : NAME TO BDC_TAB-FNAM,
VALUE TO BDC_TAB-FVAL.
APPEND DBC_TAB>.
ENDIF.
ENDFORM.
Screen Attribute 설정 -> Layout 설정 -> FLOW LOGIC
*--------------------------------------------------------
* FLOW LOGIC
* data의 내용을 화면에 출력.
*--------------------------------------------------------
PROCESS BEFORE OUTPUT.
MODULE status_0200.
MODULE SCREEN_DETAIL_DISPLAY_100.
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
*--------------------------------------------------------
* CHAIN ~ ENDCHAIN.
* 스크린 필드에 값이 입력되면 바로 그 값을 이용해서
* 어떤 작업이 필요하거나 다른 필드에 자동으로 값이 입력되는 경우에 이용.
*--------------------------------------------------------
CHAIN.
* FIELD : <screen field명> MODULE <module명> ON CHAIN-REQUEST.
FIELD : IT_DATA-XDVALUTA MODULE IT_DATA-VALUE_DATE_CHECK ON CHAIN-REQUEST.
ENDCHAIN.
MODULE USER_COMMAND_2000.
*--------------------------------------------------------
* VALUE-REQUEST
* 필드값이 정해지면 값에 따라 다른 필드의 값의 범위가 달라지는 경우
* 정의하기 위한 모듈
*--------------------------------------------------------
PROCESS ON VALUE-REQUEST.
* FIELD : <screen field명> MODULE <module명>
* FIELD : IT_DATA-HBKID MODULE P_ENTRY_BANK.
*--------------------------------------------------------
* MODULE STATUS_200 OUTPUT
* Status(menubar, toolbar, function key) 지정.
*--------------------------------------------------------
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'ZT' EXCLUDING PFS.
* excluding 인터널 테이블에 선언된 GUI-status는 제외되고 화면에 나타난다.
SET TITLEBAR 'ZT'.
ENDMODULE.
*--------------------------------------------------------
* MODULE EXIT INPUT.
* 화면 Exit 처리
*--------------------------------------------------------
MODULE EXIT INPUT.
CASE sy-ucomm.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'CANC'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
CLEAR : sy-ucomm.
ENDMODULE.
*--------------------------------------------------------
* MODULE USER_COMMAND_0200 INPUT
* 사용자 함수 키 처리.
*--------------------------------------------------------
MODULE user_command_0100 INPUT.
cASE sy-ucomm.
WHEN 'CRET'.
* BDC_Run.
* Screen에서 입력받은 데이터를 BDC로 실행하는 PERFORM문 호출.
PERFORM BDC_Run.
ENDCASE.
ENDMODULE.
Menu Bar -> Application Bar -> Function Keys -> Title 설정