*&---------------------------------------------------------------------*
*& 包含 ZTS_XSY_TEST13TOP
*&---------------------------------------------------------------------*
DATA GV_INPUT01 TYPE C LENGTH 10 VALUE '初始值'.
DATA GV_INPUT02 TYPE C LENGTH 10.
DATA GV_INPUT03 TYPE N LENGTH 10 VALUE '196'.
DATA GV_INPUT04 TYPE C LENGTH 10 .
DATA GV_SCHOOL TYPE ZBC_XSY_SCHOOL-ZSCHOOL.
DATA ICON01 TYPE C LENGTH 10 ."VALUE '@01@图标'.
DATA GV_WERKS TYPE MARD-WERKS.
DATA GV_LGORT TYPE MARD-LGORT.
DATA GV_MATNR TYPE MARD-MATNR.
*点选按钮 选择复制为x,不选为空
DATA GV_RB01 TYPE C LENGTH 1.
DATA GV_RB02 TYPE C LENGTH 1.
DATA GV_RB03 TYPE C LENGTH 1.
*复选按钮 选中赋值为x,不选为空
DATA GV_CHECK TYPE C LENGTH 1.
DATA GV_0130 TYPE C LENGTH 10.
*按钮
DATA GT_STATUS TYPE TABLE OF SY-UCOMM WITH HEADER LINE .
DATA GV_TITLE TYPE C LENGTH 4.
* TABLE CTRL 显示用内表
*DATA GT_SCHOOL TYPE TABLE OF ZBC_XSY_SCHOOL.
*DATA GS_SCHOOL TYPE ZBC_XSY_SCHOOL.
TYPES: BEGIN OF GTY_SCHOOL,
SEQ TYPE I.
INCLUDE STRUCTURE ZBC_XSY_SCHOOL.
TYPES: END OF GTY_SCHOOL.
DATA GT_SCHOOL TYPE TABLE OF GTY_SCHOOL.
DATA GS_SCHOOL TYPE GTY_SCHOOL.
*向导自动创建分页签代码 -BEGIN
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_CTRL'
CONSTANTS: BEGIN OF C_TS_CTRL,
TAB1 LIKE SY-UCOMM VALUE 'TS_CTRL_FC1',
TAB2 LIKE SY-UCOMM VALUE 'TS_CTRL_FC2',
TAB3 LIKE SY-UCOMM VALUE 'TS_CTRL_FC3',
TAB4 LIKE SY-UCOMM VALUE 'TS_CTRL_FC4',
END OF C_TS_CTRL.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_CTRL'
CONTROLS: TS_CTRL TYPE TABSTRIP.
DATA: BEGIN OF G_TS_CTRL,
SUBSCREEN LIKE SY-DYNNR, "界面编号
PROG LIKE SY-REPID VALUE 'ZTS_XSY_TEST13',
PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_CTRL-TAB1,
END OF G_TS_CTRL.
DATA: OK_CODE LIKE SY-UCOMM.
*向导自动创建分页签代码 -END
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TS_CTRL_0120'
CONSTANTS: BEGIN OF C_TS_CTRL_0120,
TAB1 LIKE SY-UCOMM VALUE 'TS_CTRL_0120_FC1',
TAB2 LIKE SY-UCOMM VALUE 'TS_CTRL_0120_FC2',
END OF C_TS_CTRL_0120.
*&SPWIZARD: DATA FOR TABSTRIP 'TS_CTRL_0120'
CONTROLS: TS_CTRL_0120 TYPE TABSTRIP.
DATA: BEGIN OF G_TS_CTRL_0120,
SUBSCREEN LIKE SY-DYNNR,
PROG LIKE SY-REPID VALUE 'ZTS_XSY_TEST13',
PRESSED_TAB LIKE SY-UCOMM VALUE C_TS_CTRL_0120-TAB1,
END OF G_TS_CTRL_0120.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL' ITSELF
CONTROLS: TC_CTRL TYPE TABLEVIEW USING SCREEN 0110.
*&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL'
DATA: G_TC_CTRL_LINES LIKE SY-LOOPC.
*&---------------------------------------------------------------------*
*& Module SET_VALUES OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_values OUTPUT.
* GV_INPUT01 = '输入框1高亮'.
GV_INPUT02 = '可修改'.
GV_INPUT03 = '999'.
TYPE-POOLS ICON.
* WRITE ICON_GRAPHICS AS ICON TO ICON01.
*ICON01+0(4) = '显示'.
ICON01 = '@0N@图标显示'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_ELEMENTS OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_elements OUTPUT.
IF GV_CHECK = 'X'. "显示
ELSE. "隐藏
LOOP AT SCREEN.
IF
*使用SCREEN元素分组设置
SCREEN-GROUP3 = 'SEX'.
*使用SCREEN 元素名称判断
* IF SCREEN-NAME = 'GV_RB01' OR
* SCREEN-NAME = 'GV_RB02' OR
* SCREEN-NAME = 'GV_RB03' .
SCREEN-INVISIBLE = '1'. " 0 否定 1 肯定
SCREEN-INPUT = '0'. "设置不可输入
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
CASE G_TS_CTRL-PRESSED_TAB. "点选了那个分页签按钮
WHEN C_TS_CTRL-TAB1. "点了第一个
GV_TITLE = '新建'.
WHEN C_TS_CTRL-TAB2. "点了第二个
GV_TITLE = '修改'.
WHEN C_TS_CTRL-TAB3. "点了第三个
GV_TITLE = '显示'.
WHEN C_TS_CTRL-TAB4. "点了第个
GV_TITLE = '新增加的分页签'.
* GT_STATUS = 'SAVE'.
* APPEND GT_STATUS.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
SET PF-STATUS '0100' EXCLUDING GT_STATUS.
SET TITLEBAR '0100' WITH GV_TITLE.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_SET OUTPUT.
TS_CTRL-ACTIVETAB = G_TS_CTRL-PRESSED_TAB. "已激活的分页签:默认为第一个分页签
CASE G_TS_CTRL-PRESSED_TAB. "点选了那个分页签按钮
WHEN C_TS_CTRL-TAB1. "点了第一个
G_TS_CTRL-SUBSCREEN = '0110'. "屏幕编号0110
WHEN C_TS_CTRL-TAB2. "点了第二个
G_TS_CTRL-SUBSCREEN = '0120'. "屏幕编号0120
WHEN C_TS_CTRL-TAB3. "点了第三个
G_TS_CTRL-SUBSCREEN = '0130'. "屏幕编号0130
WHEN C_TS_CTRL-TAB4. "点了第个
G_TS_CTRL-SUBSCREEN = '0140'. "屏幕编号0140
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_SET OUTPUT.
TS_CTRL_0120-ACTIVETAB = G_TS_CTRL_0120-PRESSED_TAB.
CASE G_TS_CTRL_0120-PRESSED_TAB.
WHEN C_TS_CTRL_0120-TAB1.
G_TS_CTRL_0120-SUBSCREEN = '0121'.
WHEN C_TS_CTRL_0120-TAB2.
G_TS_CTRL_0120-SUBSCREEN = '0122'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_VALUE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_value OUTPUT.
GV_0130 = 'DISPLAY!'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE status_0110 OUTPUT.
* SET PF-STATUS '0110'.
** SET TITLEBAR 'xxx'.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0130 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE status_0130 OUTPUT.
* SET PF-STATUS '0110'.
** SET TITLEBAR 'xxx'.
*ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_CTRL_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_SCHOOL LINES TC_CTRL-lines.
* DESCRIBE TABLE GT_SCHOOL OCCURS GV_LINES.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_CTRL_GET_LINES OUTPUT.
G_TC_CTRL_LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module GET_TABLE_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE get_table_data OUTPUT.
DATA GV_SEQ TYPE I.
SELECT *
FROM ZBC_XSY_SCHOOL
INTO CORRESPONDING FIELDS OF TABLE GT_SCHOOL
UP TO 5 ROWS.
CLEAR GV_SEQ.
LOOP AT GT_SCHOOL INTO GS_SCHOOL.
GV_SEQ = GV_SEQ + 1.
GS_SCHOOL-SEQ = GV_SEQ.
MODIFY GT_SCHOOL FROM GS_SCHOOL.
ENDLOOP.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'SAVE'.
PERFORM SAVE_LIST.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_SCHOOL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE check_school INPUT.
DATA LS_SCHOOL TYPE ZBC_XSY_SCHOOL.
IF GV_SCHOOL IS INITIAL.
MESSAGE E000 WITH '必须输入学校代码'.
ELSE.
SELECT SINGLE *
FROM ZBC_XSY_SCHOOL
INTO CORRESPONDING FIELDS OF LS_SCHOOL
WHERE ZSCHOOL = GV_SCHOOL.
IF SY-SUBRC = 0.
MESSAGE S000 WITH '学校代码存在!'.
ELSE.
MESSAGE E000 WITH '学校代码不存在!'.
ENDIF.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_MARD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE check_mard INPUT.
* DATA LS_MARD TYPE MARD.
*
**补前导零
** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
** EXPORTING
** input = GV_MATNR
** IMPORTING
** OUTPUT = GV_MATNR
* .
**表ZSTUDENT_01
*
* SELECT SINGLE WERKS LGORT MATNR
* FROM MARD
* INTO CORRESPONDING FIELDS OF LS_MARD
* WHERE WERKS = GV_WERKS
* AND LGORT = GV_LGORT
* AND MATNR = GV_MATNR.
* IF SY-SUBRC = 0.
* MESSAGE S000 WITH 'MARD表中存在相同数据!'.
* ELSE.
* SET CURSOR FIELD 'GV_MATNR'.
* MESSAGE E000 WITH 'MARD表中不存在相同数据!'.
* ENDIF.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_SEX_VALUE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_sex_value INPUT.
IF GV_RB01 = 'X'.
GV_INPUT04 = '性别为男'.
ELSEIF GV_RB02 = 'X'.
GV_INPUT04 = '性别为女'.
ELSEIF GV_RB03 = 'X'.
GV_INPUT04 = '性别保密'.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module EXIT_PROGRAM INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_program INPUT.
LEAVE PROGRAM.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_GET INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE."根据点选按钮,给全局参数赋值
WHEN C_TS_CTRL-TAB1.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB1.
CLEAR GT_STATUS[].
* GT_STATUS = 'SAVE'.
* APPEND GT_STATUS.
WHEN C_TS_CTRL-TAB2.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB2.
WHEN C_TS_CTRL-TAB3.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
CLEAR GT_STATUS[].
GT_STATUS = 'SAVE'.
APPEND GT_STATUS.
WHEN C_TS_CTRL-TAB4.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB4.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_GET INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN C_TS_CTRL_0120-TAB1.
G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB1.
WHEN C_TS_CTRL_0120-TAB2.
G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB2.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISPLAY_MESSAGE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE display_message INPUT.
* MESSAGE S000 WITH 'ENTERED'.
*ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_CTRL_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC_CTRL'
'GT_SCHOOL'
' '
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZTS_XSY_TEST13F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SAVE_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_list .
ENDFORM.
*----------------------------------------------------------------------*
* INCLUDE TABLECONTROL_FORMS *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form USER_OK_TC *
*&---------------------------------------------------------------------*
FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME
CHANGING P_OK LIKE SY-UCOMM.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA: L_OK TYPE SY-UCOMM,
L_OFFSET TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
*&SPWIZARD: Table control specific operations *
*&SPWIZARD: evaluate TC name and operations *
SEARCH P_OK FOR P_TC_NAME.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
L_OFFSET = STRLEN( P_TC_NAME ) + 1.
L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations *
CASE L_OK.
WHEN 'INSR'. "insert row
PERFORM FCODE_INSERT_ROW USING P_TC_NAME
P_TABLE_NAME.
CLEAR P_OK.
WHEN 'DELE'. "delete row
PERFORM FCODE_DELETE_ROW USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
CLEAR P_OK.
WHEN 'P--' OR "top of list
'P-' OR "previous page
'P+' OR "next page
'P++'. "bottom of list
PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
L_OK.
CLEAR P_OK.
* WHEN 'L--'. "total left
* PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
* WHEN 'L-'. "column left
* PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
* WHEN 'R+'. "column right
* PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
* WHEN 'R++'. "total right
* PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
WHEN 'MARK'. "mark all filled lines
PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
WHEN 'DMRK'. "demark all filled lines
PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
* WHEN 'SASCEND' OR
* 'SDESCEND'. "sort column
* PERFORM FCODE_SORT_TC USING P_TC_NAME
* l_ok.
ENDCASE.
ENDFORM. " USER_OK_TC
*&---------------------------------------------------------------------*
*& Form FCODE_INSERT_ROW *
*&---------------------------------------------------------------------*
FORM fcode_insert_row
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_LINES_NAME LIKE FELD-NAME.
DATA L_SELLINE LIKE SY-STEPL.
DATA L_LASTLINE TYPE I.
DATA L_LINE TYPE I.
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
ASSIGN (L_LINES_NAME) TO <LINES>.
*&SPWIZARD: get current line *
GET CURSOR LINE L_SELLINE.
IF SY-SUBRC <> 0. " append line to table
L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line *
IF L_SELLINE > <LINES>.
<TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
ELSE.
<TC>-TOP_LINE = 1.
ENDIF.
ELSE. " insert line into table
L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
ENDIF.
*&SPWIZARD: set new cursor line *
L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.
*&SPWIZARD: insert initial line *
INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
<TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor *
SET CURSOR LINE L_LINE.
ENDFORM. " FCODE_INSERT_ROW
*&---------------------------------------------------------------------*
*& Form FCODE_DELETE_ROW *
*&---------------------------------------------------------------------*
FORM fcode_delete_row
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: delete marked lines *
DESCRIBE TABLE <TABLE> LINES <TC>-LINES.
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
IF <MARK_FIELD> = 'X'.
DELETE <TABLE> INDEX SYST-TABIX.
IF SY-SUBRC = 0.
<TC>-LINES = <TC>-LINES - 1.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " FCODE_DELETE_ROW
*&---------------------------------------------------------------------*
*& Form COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
* -->P_OK ok code
*----------------------------------------------------------------------*
FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
P_OK.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TC_NEW_TOP_LINE TYPE I.
DATA L_TC_NAME LIKE FELD-NAME.
DATA L_TC_LINES_NAME LIKE FELD-NAME.
DATA L_TC_FIELD_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
ASSIGN (L_TC_LINES_NAME) TO <LINES>.
*&SPWIZARD: is no line filled? *
IF <TC>-LINES = 0.
*&SPWIZARD: yes, ... *
L_TC_NEW_TOP_LINE = 1.
ELSE.
*&SPWIZARD: no, ... *
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
ENTRY_ACT = <TC>-TOP_LINE
ENTRY_FROM = 1
ENTRY_TO = <TC>-LINES
LAST_PAGE_FULL = 'X'
LOOPS = <LINES>
OK_CODE = P_OK
OVERLAPPING = 'X'
IMPORTING
ENTRY_NEW = L_TC_NEW_TOP_LINE
EXCEPTIONS
* NO_ENTRY_OR_PAGE_ACT = 01
* NO_ENTRY_TO = 02
* NO_OK_CODE_OR_PAGE_GO = 03
OTHERS = 0.
ENDIF.
*&SPWIZARD: get actual tc and column *
GET CURSOR FIELD L_TC_FIELD_NAME
AREA L_TC_NAME.
IF SYST-SUBRC = 0.
IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column *
SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
ENDIF.
ENDIF.
*&SPWIZARD: set the new top line *
<TC>-TOP_LINE = L_TC_NEW_TOP_LINE.
ENDFORM. " COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*& Form FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
* marks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: mark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = 'X'.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Form FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
* demarks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE cxtab_control.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: demark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = SPACE.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
PROCESS BEFORE OUTPUT.
MODULE status_0100. "标题和按钮
MODULE set_elements. "界面元素的显示与隐藏
MODULE set_values. "元素赋初始值
*向导自动创建分页签代码 -BEGIN
*&SPWIZARD: PBO FLOW LOGIC FOR TABSTRIP 'TS_CTRL'
MODULE TS_CTRL_ACTIVE_TAB_SET.
CALL SUBSCREEN TS_CTRL_SCA
INCLUDING G_TS_CTRL-PROG G_TS_CTRL-SUBSCREEN."调用字子界面
*向导自动创建分页签代码 -END
PROCESS AFTER INPUT.
MODULE exit_program AT EXIT-COMMAND. "强制退出 要放在PAI第一个
*向导自动创建分页签代码 -BEGIN
*&SPWIZARD: PAI FLOW LOGIC FOR TABSTRIP 'TS_CTRL'
CALL SUBSCREEN TS_CTRL_SCA.
MODULE TS_CTRL_ACTIVE_TAB_GET.
*向导自动创建分页签代码 -END
"数据检查
MODULE set_sex_value. "设置性别值
*检查字段,当值或属性发生改变时,触发MODULE
*单一字段的 检查
*MODULE CHECK_SCHOOL. "不要单独使用pai module
*多个字段的检查
*MODULE CHECK_MARD.
*用于检查
FIELD gv_school MODULE check_school ON REQUEST. "ON REQUEST:当值发生改变的时候
CHAIN.
FIELD gv_werks.
FIELD gv_lgort.
FIELD gv_matnr.
MODULE check_mard ON CHAIN-REQUEST.
ENDCHAIN.
MODULE user_command_0100."按钮功能
*&---------------------------------------------------------------------*
*& Module SET_VALUES OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_values OUTPUT.
* GV_INPUT01 = '输入框1高亮'.
GV_INPUT02 = '可修改'.
GV_INPUT03 = '999'.
TYPE-POOLS ICON.
* WRITE ICON_GRAPHICS AS ICON TO ICON01.
*ICON01+0(4) = '显示'.
ICON01 = '@0N@图标显示'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_ELEMENTS OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_elements OUTPUT.
IF GV_CHECK = 'X'. "显示
ELSE. "隐藏
LOOP AT SCREEN.
IF
*使用SCREEN元素分组设置
SCREEN-GROUP3 = 'SEX'.
*使用SCREEN 元素名称判断
* IF SCREEN-NAME = 'GV_RB01' OR
* SCREEN-NAME = 'GV_RB02' OR
* SCREEN-NAME = 'GV_RB03' .
SCREEN-INVISIBLE = '1'. " 0 否定 1 肯定
SCREEN-INPUT = '0'. "设置不可输入
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
CASE G_TS_CTRL-PRESSED_TAB. "点选了那个分页签按钮
WHEN C_TS_CTRL-TAB1. "点了第一个
GV_TITLE = '新建'.
WHEN C_TS_CTRL-TAB2. "点了第二个
GV_TITLE = '修改'.
WHEN C_TS_CTRL-TAB3. "点了第三个
GV_TITLE = '显示'.
WHEN C_TS_CTRL-TAB4. "点了第个
GV_TITLE = '新增加的分页签'.
* GT_STATUS = 'SAVE'.
* APPEND GT_STATUS.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
SET PF-STATUS '0100' EXCLUDING GT_STATUS.
SET TITLEBAR '0100' WITH GV_TITLE.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_SET OUTPUT.
TS_CTRL-ACTIVETAB = G_TS_CTRL-PRESSED_TAB. "已激活的分页签:默认为第一个分页签
CASE G_TS_CTRL-PRESSED_TAB. "点选了那个分页签按钮
WHEN C_TS_CTRL-TAB1. "点了第一个
G_TS_CTRL-SUBSCREEN = '0110'. "屏幕编号0110
WHEN C_TS_CTRL-TAB2. "点了第二个
G_TS_CTRL-SUBSCREEN = '0120'. "屏幕编号0120
WHEN C_TS_CTRL-TAB3. "点了第三个
G_TS_CTRL-SUBSCREEN = '0130'. "屏幕编号0130
WHEN C_TS_CTRL-TAB4. "点了第个
G_TS_CTRL-SUBSCREEN = '0140'. "屏幕编号0140
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE
*&SPWIZARD: SETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_SET OUTPUT.
TS_CTRL_0120-ACTIVETAB = G_TS_CTRL_0120-PRESSED_TAB.
CASE G_TS_CTRL_0120-PRESSED_TAB.
WHEN C_TS_CTRL_0120-TAB1.
G_TS_CTRL_0120-SUBSCREEN = '0121'.
WHEN C_TS_CTRL_0120-TAB2.
G_TS_CTRL_0120-SUBSCREEN = '0122'.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_VALUE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_value OUTPUT.
GV_0130 = 'DISPLAY!'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE status_0110 OUTPUT.
* SET PF-STATUS '0110'.
** SET TITLEBAR 'xxx'.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0130 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE status_0130 OUTPUT.
* SET PF-STATUS '0110'.
** SET TITLEBAR 'xxx'.
*ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_CTRL_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_SCHOOL LINES TC_CTRL-lines.
* DESCRIBE TABLE GT_SCHOOL OCCURS GV_LINES.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_CTRL_GET_LINES OUTPUT.
G_TC_CTRL_LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module GET_TABLE_DATA OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE get_table_data OUTPUT.
DATA GV_SEQ TYPE I.
SELECT *
FROM ZBC_XSY_SCHOOL
INTO CORRESPONDING FIELDS OF TABLE GT_SCHOOL
UP TO 5 ROWS.
CLEAR GV_SEQ.
LOOP AT GT_SCHOOL INTO GS_SCHOOL.
GV_SEQ = GV_SEQ + 1.
GS_SCHOOL-SEQ = GV_SEQ.
MODIFY GT_SCHOOL FROM GS_SCHOOL.
ENDLOOP.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'SAVE'.
PERFORM SAVE_LIST.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_SCHOOL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE check_school INPUT.
DATA LS_SCHOOL TYPE ZBC_XSY_SCHOOL.
IF GV_SCHOOL IS INITIAL.
MESSAGE E000 WITH '必须输入学校代码'.
ELSE.
SELECT SINGLE *
FROM ZBC_XSY_SCHOOL
INTO CORRESPONDING FIELDS OF LS_SCHOOL
WHERE ZSCHOOL = GV_SCHOOL.
IF SY-SUBRC = 0.
MESSAGE S000 WITH '学校代码存在!'.
ELSE.
MESSAGE E000 WITH '学校代码不存在!'.
ENDIF.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_MARD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE check_mard INPUT.
* DATA LS_MARD TYPE MARD.
*
**补前导零
** CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
** EXPORTING
** input = GV_MATNR
** IMPORTING
** OUTPUT = GV_MATNR
* .
**表ZSTUDENT_01
*
* SELECT SINGLE WERKS LGORT MATNR
* FROM MARD
* INTO CORRESPONDING FIELDS OF LS_MARD
* WHERE WERKS = GV_WERKS
* AND LGORT = GV_LGORT
* AND MATNR = GV_MATNR.
* IF SY-SUBRC = 0.
* MESSAGE S000 WITH 'MARD表中存在相同数据!'.
* ELSE.
* SET CURSOR FIELD 'GV_MATNR'.
* MESSAGE E000 WITH 'MARD表中不存在相同数据!'.
* ENDIF.
*ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_SEX_VALUE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE set_sex_value INPUT.
IF GV_RB01 = 'X'.
GV_INPUT04 = '性别为男'.
ELSEIF GV_RB02 = 'X'.
GV_INPUT04 = '性别为女'.
ELSEIF GV_RB03 = 'X'.
GV_INPUT04 = '性别保密'.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module EXIT_PROGRAM INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_program INPUT.
LEAVE PROGRAM.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_ACTIVE_TAB_GET INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE."根据点选按钮,给全局参数赋值
WHEN C_TS_CTRL-TAB1.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB1.
CLEAR GT_STATUS[].
* GT_STATUS = 'SAVE'.
* APPEND GT_STATUS.
WHEN C_TS_CTRL-TAB2.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB2.
WHEN C_TS_CTRL-TAB3.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB3.
CLEAR GT_STATUS[].
GT_STATUS = 'SAVE'.
APPEND GT_STATUS.
WHEN C_TS_CTRL-TAB4.
G_TS_CTRL-PRESSED_TAB = C_TS_CTRL-TAB4.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TS 'TS_CTRL_0120'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TS_CTRL_0120_ACTIVE_TAB_GET INPUT.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN C_TS_CTRL_0120-TAB1.
G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB1.
WHEN C_TS_CTRL_0120-TAB2.
G_TS_CTRL_0120-PRESSED_TAB = C_TS_CTRL_0120-TAB2.
WHEN OTHERS.
*&SPWIZARD: DO NOTHING
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISPLAY_MESSAGE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*MODULE display_message INPUT.
* MESSAGE S000 WITH 'ENTERED'.
*ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_CTRL_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC_CTRL'
'GT_SCHOOL'
' '
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE.
PROCESS BEFORE OUTPUT.
MODULE GET_TABLE_DATA.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_CTRL'
MODULE TC_CTRL_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_COL_ATTR.
LOOP AT GT_SCHOOL
INTO GS_SCHOOL
WITH CONTROL TC_CTRL
CURSOR TC_CTRL-CURRENT_LINE.
MODULE TC_CTRL_GET_LINES.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_FIELD_ATTR
ENDLOOP.
MODULE STATUS_0110.
*
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_CTRL'
LOOP AT GT_SCHOOL.
CHAIN.
FIELD GS_SCHOOL-SEQ.
FIELD GS_SCHOOL-ZSCHOOL.
FIELD GS_SCHOOL-ZSNAME.
FIELD GS_SCHOOL-ZADD.
endchain.
ENDLOOP.
MODULE TC_CTRL_USER_COMMAND.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_CTRL_CHANGE_COL_ATTR.
* MODULE USER_COMMAND_0110.