ALV后加DIALOG练习详解编程语言

操作的是请求号的表,E070,E07T,E070A

添加带表控件的Table  Control 在自定义按钮,删除原来的按钮

ALV后加DIALOG练习详解编程语言

ALV后加DIALOG练习详解编程语言

ALV后加DIALOG练习详解编程语言

ALV后加DIALOG练习详解编程语言

 待补充

*屏幕调用第一次 PBO 
*屏幕操作 PAI->PBO 
*下拉列表 VRM_SET_VALUES 
*下拉列表onchange  给下拉列表添加功能码 
*PBO对屏幕参数的改变不能影响屏幕操作对屏幕参数的改变,POB中屏幕参数操作要判断或改到PAI中(依据OK_CODE判断) 
*焦点设一个全局变量  PAI赋值,PBO设置,清空值 
*SET CURSOR FIELD '控件名' LINE 行数 OFFSET 列数.   不是table的LINE后不写 
*OK_CODE在PAI后要清空,用OK_SAVE备份,防止滚轮双击等操作再次调用之前的UCOMM 
*同步数据使用全删除后在全导入
*
CXTAB_COLUMN----Table Control的列控制信息结构
*CXTAB_COLUMN-SCREEN-NAME、INPUT、

REPORT ZTEST034. INCLUDE ZTEST034_TOP. INCLUDE ZTEST034_100_PBO. INCLUDE ZTEST034_100_PAI. INCLUDE ZTEST034_FORM. INITIALIZATION. S_TRKORR-SIGN = 'I'. S_TRKORR-OPTION = 'CP'. S_TRKORR-LOW = 'DEV*'. APPEND S_TRKORR. S_AS4USE-SIGN = 'I'. S_AS4USE-OPTION = 'EQ'. S_AS4USE-LOW = SY-UNAME. APPEND S_AS4USE. AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN. START-OF-SELECTION. PERFORM GET_DATA. END-OF-SELECTION. PERFORM ALV_DISPLAY. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_DATA . "E070表中请求号包括上下两层请求号,STRKORR为上层请求号 "要查出所有符合条件请求号 SELECT * FROM E070 INTO CORRESPONDING FIELDS OF TABLE gt_trans WHERE ( TRKORR IN S_TRKORR OR STRKORR IN S_TRKORR ) AND TRSTATUS IN S_TRSTAT AND AS4USER IN S_AS4USE. IF gt_trans IS NOT INITIAL. SELECT TRKORR AS4TEXT FROM E07T INTO CORRESPONDING FIELDS OF TABLE GT_E07T FOR ALL ENTRIES IN gt_trans WHERE TRKORR = gt_trans-TRKORR AND LANGU = '1'. SELECT * FROM E070A INTO CORRESPONDING FIELDS OF TABLE GT_E070A1 FOR ALL ENTRIES IN gt_trans WHERE TRKORR = gt_trans-TRKORR. ENDIF. GT_E070A2[] = GT_E070A[]. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form ALV_DISPLAY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ALV_DISPLAY . PERFORM BUILD_FIELDCAT. PERFORM DEAL_DATA. PERFORM ALV_GRID. ENDFORM. " ALV_DISPLAY *&---------------------------------------------------------------------* *& Form DEAL_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM DEAL_DATA . LOOP AT GT_TRANS INTO GW_TRANS. IF GW_TRANS-TRSTATUS = 'D'. GW_TRANS-TRSTATUS_TX = '可修改的'. ELSEIF GW_TRANS-TRSTATUS = 'L'. GW_TRANS-TRSTATUS_TX = '可修改,受保护'. ELSEIF GW_TRANS-TRSTATUS = 'O'. GW_TRANS-TRSTATUS_TX = '已开始释放'. ELSEIF GW_TRANS-TRSTATUS = 'R'. GW_TRANS-TRSTATUS_TX = '已释放'. ELSEIF GW_TRANS-TRSTATUS = 'N'. GW_TRANS-TRSTATUS_TX = '已释放(含对已修复对象的导入保护)'. ENDIF. READ TABLE GT_E07T WITH KEY TRKORR = gw_trans-TRKORR. IF SY-SUBRC = 0. GW_TRANS-AS4TEXT = GT_E07T-AS4TEXT. ENDIF. MODIFY GT_TRANS FROM GW_TRANS. CLEAR: GW_TRANS,GT_E07T. ENDLOOP. ENDFORM. " DEAL_DATA *&---------------------------------------------------------------------* *& Form BUILD_FIELDCAT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM BUILD_FIELDCAT . DEFINE %%FIELD. CLEAR:GW_FIELDCAT. GW_FIELDCAT-FIELDNAME = &1. GW_FIELDCAT-COLTEXT = &2. APPEND GW_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. %%FIELD 'TRKORR' '请求' . %%FIELD 'TRFUNCTION' '请求类型' . %%FIELD 'TRSTATUS_TX' '状态' . %%FIELD 'TARSYSTEM' '目标系统' . %%FIELD 'KORRDEV' '类别' . %%FIELD 'AS4USER' '所有者' . %%FIELD 'AS4DATE' '上次更改日期' . %%FIELD 'AS4TIME' '上次更改时间' . %%FIELD 'STRKORR' '高级别请求' . %%FIELD 'AS4TEXT' '请求描述' . %%FIELD 'RESULT' '结果' . ENDFORM. " BUILD_FIELDCAT *&---------------------------------------------------------------------* *& Form ALV_GRID *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ALV_GRID . GW_LAYOUT-ZEBRA = 'X'. GW_LAYOUT-CWIDTH_OPT = 'X'. GW_LAYOUT-SEL_MODE = 'D'. GW_LAYOUT-BOX_FNAME = 'MARK'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = 'GC_PF_STATUS' I_CALLBACK_USER_COMMAND = 'USER_COMMAND' IS_LAYOUT_LVC = GW_LAYOUT IT_FIELDCAT_LVC = GT_FIELDCAT * I_DEFAULT = 'X' I_SAVE = 'A' TABLES T_OUTTAB = GT_TRANS[] * EXCEPTIONS * PROGRAM_ERROR = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " ALV_GRID *&---------------------------------------------------------------------* *& Form GC_PF_STATUS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GC_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. * 设置标题栏 SET TITLEBAR 'TITAL001'. SET PF-STATUS 'STATUS001' EXCLUDING RT_EXTAB. ENDFORM. "GC_PF_STATUS *&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM P_SELFIELD TYPE SLIS_SELFIELD. P_SELFIELD-REFRESH = 'X'."自动刷新 CASE P_UCOMM. * WHEN '&F03'. * LEAVE TO SCREEN 0. * WHEN '&F15' OR '&F12'. * LEAVE PROGRAM. WHEN 'UPDATE'."R->D LOOP AT GT_TRANS INTO GW_TRANS WHERE MARK = 'X' AND TRSTATUS = 'R'. UPDATE E070 SET TRSTATUS = 'D' WHERE TRKORR = GW_TRANS-TRKORR. IF SY-SUBRC = 0. COMMIT WORK . GW_TRANS-TRSTATUS = 'D'. GW_TRANS-TRSTATUS_TX = '可修改'. GW_TRANS-RESULT = '修改成功'. ENDIF. MODIFY GT_TRANS FROM GW_TRANS. CLEAR: GW_TRANS. ENDLOOP. WHEN 'UPDATE2'."D->R LOOP AT GT_TRANS INTO GW_TRANS WHERE MARK = 'X' AND TRSTATUS = 'D' AND TRFUNCTION = 'K'. READ TABLE GT_E070A1 INTO GW_E070A WITH KEY TRKORR = gw_trans-TRKORR ATTRIBUTE = 'EXPTIMESTAMP'. "E070A属性只对类型为K的请求号存在,所以根据上层判断 IF SY-SUBRC = 0. UPDATE E070 SET TRSTATUS = 'R' WHERE ( TRKORR = GW_TRANS-TRKORR OR STRKORR = GW_TRANS-TRKORR )."修改库表 IF SY-SUBRC = 0. COMMIT WORK . GW_TRANS-TRSTATUS = 'R'. GW_TRANS-TRSTATUS_TX = '已释放'. GW_TRANS-RESULT = '修改成功'. ENDIF. MODIFY GT_TRANS FROM GW_TRANS. "修改ALV内表中的下层请求号,方便展示 MODIFY GT_TRANS FROM GW_TRANS TRANSPORTING TRSTATUS TRSTATUS_TX RESULT WHERE STRKORR = GW_TRANS-TRKORR. ELSE. GW_TRANS-RESULT = '属性EXPTIMESTAMP不存在,请手动释放'. ENDIF. CLEAR: GW_TRANS. ENDLOOP. WHEN 'ATTRI'."显示修改请求号的属性,DIALOG练习 LOOP AT GT_TRANS INTO GW_TRANS WHERE MARK = 'X' AND TRSTATUS = 'D' AND TRFUNCTION = 'K'. LOOP AT GT_E070A1 INTO GW_E070A WHERE TRKORR = gw_trans-TRKORR. APPEND GW_E070A TO GT_E070A. CLEAR:GW_E070A. ENDLOOP. CLEAR:GW_TRANS. ENDLOOP. GT_E070A2[] = GT_E070A[]. READ TABLE GT_TRANS INTO GW_TRANS WITH KEY MARK = 'X' TRSTATUS = 'D' TRFUNCTION = 'K'. IF SY-SUBRC = 0. CALL SCREEN 0100. ELSE. MESSAGE '请选择一行类型为K、状态可修改的数据!!!' TYPE 'I'. ENDIF. ENDCASE. ENDFORM. "USER_COMMAND *&---------------------------------------------------------------------* *& Form TABLE_E070A_MODIFY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM TABLE_E070A_MODIFY . DATA: lcx_error TYPE REF TO cx_root, "cx_sy_sql_error . "cx_sy_open_sql_db."异常 lcx_error2 TYPE REF TO cx_root," err_text TYPE c LENGTH 1000. DATA: L_ANSWER, L_NUM TYPE I. DATA: LT_E070A LIKE E070A OCCURS 0, LW_E070A LIKE LINE OF LT_E070A. * TRY."想利用哈希表关键字段不能重复来判断内表有重复数据,哈希表数据重复异常直接爆红,catch不到 * GT_E070A_HASH[] = GT_E070A[]. * CATCH cx_root INTO lcx_error2. * err_text = lcx_error->IF_MESSAGE~GET_TEXT( ). * MESSAGE err_text TYPE 'E'. * ENDTRY. "保存前弹出提示消息 CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING TEXTLINE1 = TEXT-T01 TITEL = TEXT-T02 IMPORTING ANSWER = L_ANSWER. CHECK L_ANSWER = 'J'. LOOP AT GT_E070A INTO GW_E070A."GT_E070A多了一个line字段 LW_E070A-TRKORR = GW_E070A-TRKORR. LW_E070A-POS = GW_E070A-POS. LW_E070A-ATTRIBUTE = GW_E070A-ATTRIBUTE. LW_E070A-REFERENCE = GW_E070A-REFERENCE. APPEND LW_E070A TO LT_E070A. CLEAR:LW_E070A,GW_E070A. ENDLOOP. "检查主键重复 SORT GT_E070A BY TRKORR POS. LOOP AT LT_E070A INTO LW_E070A. AT NEW POS. L_NUM = 0. ENDAT. L_NUM = L_NUM + 1. IF L_NUM >= 2. MESSAGE '存在主键重复内容!!!' TYPE 'E'. ENDIF. ENDLOOP. TRY. DELETE FROM E070A WHERE TRKORR = E070-TRKORR. MODIFY E070A FROM TABLE LT_E070A. CATCH cx_sy_open_sql_db INTO lcx_error. err_text = lcx_error->IF_MESSAGE~GET_TEXT( ). SY-SUBRC = 4. ENDTRY. IF SY-SUBRC <> 0. ROLLBACK WORK. MESSAGE err_text TYPE 'E'. ELSE. COMMIT WORK. MESSAGE '同步成功!!!' TYPE 'S'. ENDIF. ENDFORM. " TABLE_E070A_MODIFY *&---------------------------------------------------------------------* *& Form LIST_TABLE_MODIFY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM LIST_TABLE_MODIFY . CLEAR: GT_E070A[]."清空GT_E070A[],利用GT_E070A2[]只把下拉框中请求号的属性传入GT_E070A[] READ TABLE GT_TRANS INTO GW_TRANS WITH KEY TRKORR = E070-TRKORR. E070-TRKORR = GW_TRANS-TRKORR. E070-TRSTATUS = GW_TRANS-TRSTATUS. MAKT-MAKTX = GW_TRANS-TRSTATUS_TX. E070-AS4USER = GW_TRANS-AS4USER. E07T-AS4TEXT = GW_TRANS-AS4TEXT. LOOP AT GT_E070A2 INTO GW_E070A WHERE TRKORR = E070-TRKORR. APPEND GW_E070A TO GT_E070A. CLEAR:GW_E070A. ENDLOOP. CLEAR GW_TRANS. ENDFORM. " LIST_TABLE_MODIFY

include 

*&---------------------------------------------------------------------* 
*&  包括                ZTEST034_TOP 
*&---------------------------------------------------------------------* 
TYPE-POOLS:SLIS,vrm. 
TABLES:E070,E070A,E07T,MAKT. 
DATA: GW_LAYOUT TYPE LVC_S_LAYO, 
GW_FIELDCAT TYPE LVC_S_FCAT, 
GT_FIELDCAT TYPE LVC_T_FCAT. 
TYPES:BEGIN OF gy_trans, 
MARK(1), 
TRKORR      TYPE TRKORR,     "请求/任务 
TRFUNCTION  TYPE TRFUNCTION, "请求/任务的类型 
TRSTATUS    TYPE TRSTATUS,   "请求/任务状态 
TRSTATUS_tx(20), 
TARSYSTEM   TYPE TR_TARGET,  "请求的传输目标 
KORRDEV     TYPE TRCATEG,    "请求或任务类型 
AS4USER     TYPE TR_AS4USER, "请求或任务的所有者 
AS4DATE     TYPE AS4DATE,    "最后更改的日期 
AS4TIME     TYPE AS4TIME,    "上次更改时间 
STRKORR     TYPE STRKORR,    "高级别请求 
AS4TEXT        TYPE AS4TEXT,    "资源库对象的简短描述 
RESULT(100), 
END OF gy_trans. 
TYPES:BEGIN OF GY_E070A , 
LINE      TYPE CHAR1, 
TRKORR    TYPE TRKORR, 
POS       TYPE DDPOSITION, 
ATTRIBUTE TYPE TRATTR, 
REFERENCE TYPE TRVALUE, 
END OF GY_E070A. 
DATA: gw_trans TYPE gy_trans, 
gt_trans TYPE gy_trans OCCURS 0. 
DATA: GT_E070A TYPE GY_E070A OCCURS 0 , 
GT_E070A1 TYPE GY_E070A OCCURS 0 , 
GT_E070A2 TYPE GY_E070A OCCURS 0 , 
GT_E070A_HASH TYPE HASHED TABLE OF GY_E070A WITH UNIQUE KEY TRKORR POS, 
GW_E070A TYPE GY_E070A. 
DATA: BEGIN OF GT_E07T OCCURS 0, 
TRKORR  TYPE TRKORR, 
AS4TEXT TYPE AS4TEXT, 
END OF GT_E07T. 
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 
SELECT-OPTIONS: S_TRKORR   FOR E070-TRKORR, 
S_TRSTAT   FOR E070-TRSTATUS, 
S_AS4USE  FOR E070-AS4USER. 
SELECTION-SCREEN END OF BLOCK b1. 
*&SPWIZARD: DECLARATION OF TABLECONTROL 'Z34_E070A' ITSELF 
CONTROLS: Z34_E070A TYPE TABLEVIEW USING SCREEN 0100. 
DATA:     GS_COLS TYPE CXTAB_COLUMN."Table Control的列控制信息结构 
*&SPWIZARD: LINES OF TABLECONTROL 'Z34_E070A' 
DATA:     G_Z34_E070A_LINES  LIKE SY-LOOPC. 
DATA:     OK_CODE LIKE SY-UCOMM,"屏幕功能码 
OK_SAVE LIKE SY-UCOMM."屏幕功能码备份 
DATA:     G_LINE TYPE I,"全局焦点,PAI赋值,PBO使用设定焦点,PBO最后清空 
G_GUISTATUE(50)."显示修改按钮
*&---------------------------------------------------------------------* 
*&  包括                ZTEST034_PBO 
*&---------------------------------------------------------------------* 
*&---------------------------------------------------------------------* 
*&      Module  STATUS_0100  OUTPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE STATUS_0100 OUTPUT. 
"修改gui按钮是否显示 
DATA: FCODE LIKE SY-UCOMM OCCURS 0 WITH HEADER LINE. 
IF G_GUISTATUE = 'DISPLAY' OR G_GUISTATUE IS INITIAL. 
APPEND 'INSR' TO FCODE. 
APPEND 'DELE' TO FCODE. 
SET PF-STATUS 'STATUS002' EXCLUDING FCODE. 
ELSEIF G_GUISTATUE = 'EDIT'. 
SET PF-STATUS 'STATUS002'. 
ENDIF. 
SET TITLEBAR 'TITAL002'. 
ENDMODULE.                 " STATUS_0100  OUTPUT 
*&---------------------------------------------------------------------* 
*&      Module  SET_DIS_EDIT  OUTPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE SET_DIS_EDIT OUTPUT. 
"TC字段输入输出切换 
"隐藏某列用字段长度 vislength = 0 设置, 
IF G_GUISTATUE = 'DISPLAY'. 
LOOP AT Z34_E070A-COLS INTO GS_COLS. 
IF GS_COLS-SCREEN-NAME = 'GW_E070A-TRKORR' OR GS_COLS-SCREEN-NAME = 'GW_E070A-POS' OR 
GS_COLS-SCREEN-NAME = 'GW_E070A-ATTRIBUTE' OR GS_COLS-SCREEN-NAME = 'GW_E070A-REFERENCE'. 
GS_COLS-SCREEN-INPUT = '0'. 
ENDIF. 
MODIFY  Z34_E070A-COLS FROM GS_COLS. 
ENDLOOP. 
ELSEIF G_GUISTATUE = 'EDIT'. 
LOOP AT Z34_E070A-COLS INTO GS_COLS. 
IF GS_COLS-SCREEN-NAME = 'GW_E070A-TRKORR' OR GS_COLS-SCREEN-NAME = 'GW_E070A-POS' OR 
GS_COLS-SCREEN-NAME = 'GW_E070A-ATTRIBUTE' OR GS_COLS-SCREEN-NAME = 'GW_E070A-REFERENCE'. 
GS_COLS-SCREEN-INPUT = '1'."可输入 
IF GS_COLS-SCREEN-NAME = 'GW_E070A-TRKORR' OR GS_COLS-SCREEN-NAME = 'GW_E070A-POS'. 
GS_COLS-SCREEN-REQUIRED = '1'."必输 
ENDIF. 
ENDIF. 
MODIFY  Z34_E070A-COLS FROM GS_COLS. 
ENDLOOP. 
ENDIF. 
ENDMODULE.                 " SET_DIS_EDIT  OUTPUT 
*&---------------------------------------------------------------------* 
*&      Module  SET_HEADER  OUTPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE SET_HEADER OUTPUT. 
DATA: L_FIELD TYPE VRM_ID, 
LT_VALUES TYPE VRM_VALUES, 
LW_VALUE LIKE LINE OF LT_VALUES. 
DATA: LINE TYPE I. 
IF LT_VALUES IS INITIAL. 
CLEAR: GT_E070A[]."清空GT_E070A[],利用GT_E070A2[]只把下拉框中请求号的属性传入GT_E070A[] 
LINE = 1. 
LOOP AT GT_TRANS INTO GW_TRANS WHERE MARK = 'X' AND TRSTATUS = 'D' AND TRFUNCTION = 'K'. 
IF LINE = 1."初始值 
E070-TRKORR = GW_TRANS-TRKORR. 
E070-TRSTATUS = GW_TRANS-TRSTATUS. 
MAKT-MAKTX = GW_TRANS-TRSTATUS_tx."描述字段,名字随便起的 
E070-AS4USER = GW_TRANS-AS4USER. 
E07T-AS4TEXT = GW_TRANS-AS4TEXT. 
LOOP AT GT_E070A2 INTO GW_E070A WHERE TRKORR = E070-TRKORR. 
APPEND GW_E070A TO GT_E070A. 
CLEAR:GW_E070A. 
ENDLOOP. 
ENDIF. 
LW_VALUE-KEY = GW_TRANS-TRKORR. 
LW_VALUE-TEXT = GW_TRANS-TRKORR. 
APPEND LW_VALUE TO LT_VALUES. 
CLEAR:GW_TRANS,LW_VALUE. 
LINE = LINE + 1. 
ENDLOOP. 
CALL FUNCTION 'VRM_SET_VALUES' 
EXPORTING 
ID     = 'E070-TRKORR' 
VALUES = LT_VALUES. 
ENDIF. 
ENDMODULE.                 " SET_HEADER  OUTPUT 
*&SPWIZARD: OUTPUT MODULE FOR TC 'Z34_E070A'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR 
MODULE Z34_E070A_CHANGE_TC_ATTR OUTPUT. 
DESCRIBE TABLE GT_E070A LINES Z34_E070A-lines. 
ENDMODULE.                    "Z34_E070A_CHANGE_TC_ATTR OUTPUT 
*&SPWIZARD: OUTPUT MODULE FOR TC 'Z34_E070A'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: GET LINES OF TABLECONTROL 
MODULE Z34_E070A_GET_LINES OUTPUT. 
G_Z34_E070A_LINES = SY-LOOPC. 
ENDMODULE.                    "Z34_E070A_GET_LINES OUTPUT 
*&---------------------------------------------------------------------* 
*&      Module  SET_CURSOR  OUTPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE SET_CURSOR OUTPUT. 
"设置焦点 
SET CURSOR FIELD 'GW_E070A-TRKORR' LINE G_LINE. 
CLEAR:G_LINE. 
ENDMODULE.                 " SET_CURSOR  OUTPUT
*&---------------------------------------------------------------------* 
*&  包括                ZTEST034_PAI 
*&---------------------------------------------------------------------* 
*&SPWIZARD: INPUT MODULE FOR TC 'Z34_E070A'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: MODIFY TABLE 
MODULE Z34_E070A_MODIFY INPUT. 
IF GW_E070A-ATTRIBUTE = 'EXPTIMESTAMP' . 
MESSAGE '未释放请求号添加EXPTIMESTAMP属性后将无法释放' TYPE 'W'. 
ENDIF. 
MODIFY GT_E070A 
FROM GW_E070A 
INDEX Z34_E070A-CURRENT_LINE. 
"添加到属性的总表里,保持数据一致 
APPEND GW_E070A TO GT_E070A2. 
ENDMODULE. 
*&SPWIZARD: INPUT MODUL FOR TC 'Z34_E070A'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: MARK TABLE 
MODULE Z34_E070A_MARK INPUT. 
DATA: g_Z34_E070A_wa2 like line of GT_E070A. 
if Z34_E070A-line_sel_mode = 1 
and GW_E070A-LINE = 'X'. 
loop at GT_E070A into g_Z34_E070A_wa2 
where LINE = 'X'. 
g_Z34_E070A_wa2-LINE = ''. 
modify GT_E070A 
from g_Z34_E070A_wa2 
transporting LINE. 
endloop. 
endif. 
MODIFY GT_E070A 
FROM GW_E070A 
INDEX Z34_E070A-CURRENT_LINE 
TRANSPORTING LINE. 
ENDMODULE. 
*&SPWIZARD: INPUT MODULE FOR TC 'Z34_E070A'. DO NOT CHANGE THIS LINE! 
*&SPWIZARD: PROCESS USER COMMAND 
MODULE Z34_E070A_USER_COMMAND INPUT. 
*  OK_CODE = SY-UCOMM. 
OK_SAVE = OK_CODE. 
PERFORM USER_OK_TC USING    'Z34_E070A' 
'GT_E070A' 
'LINE' 
CHANGING OK_CODE. 
*  SY-UCOMM = OK_CODE. 
CLEAR:OK_CODE. 
ENDMODULE.
*&---------------------------------------------------------------------* 
*&  包括                ZTEST034_FORM 
*&---------------------------------------------------------------------* 
*----------------------------------------------------------------------* 
*   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 P_OK. 
WHEN 'BACK'. 
LEAVE TO SCREEN 0. 
WHEN 'CANCLE' OR 'EXIT'. 
LEAVE PROGRAM. 
WHEN 'ANZG'. 
PERFORM DIS_EDIT. 
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 . 
WHEN 'SAVE'. 
PERFORM TABLE_E070A_MODIFY. 
WHEN 'ZLIST001'. 
PERFORM LIST_TABLE_MODIFY. 
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. 
"赋值全局焦点 
G_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>,<FIELD1>,<FIELD2>,<FIELD3>,<FIELD4>. 
*&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'. 
"删除到属性的总表里,保持数据一致,再单个请求号属性表的操作之前 
ASSIGN COMPONENT 'TRKORR' OF STRUCTURE <WA> TO <FIELD1>. 
ASSIGN COMPONENT 'POS' OF STRUCTURE <WA> TO <FIELD2>. 
ASSIGN COMPONENT 'ATTRIBUTE' OF STRUCTURE <WA> TO <FIELD3>. 
ASSIGN COMPONENT 'REFERENCE' OF STRUCTURE <WA> TO <FIELD4>. 
DELETE GT_E070A2 WHERE TRKORR = <FIELD1> AND POS = <FIELD2> 
AND  ATTRIBUTE = <FIELD3> 
AND REFERENCE = <FIELD4>. 
"单个请求号属性表的操作 
DELETE <TABLE> INDEX SYST-TABIX. 
IF SY-SUBRC = 0. 
<TC>-LINES = <TC>-LINES - 1. 
ENDIF. 
ENDIF. 
ENDLOOP. 
"删除完成后,从第一行继续 
G_LINE = 1. 
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 
*&---------------------------------------------------------------------* 
*&      Form  DIS_EDIT 
*&---------------------------------------------------------------------* 
*       text 编辑与显示的切换 
*----------------------------------------------------------------------* 
*  -->  p1        text 
*  <--  p2        text 
*----------------------------------------------------------------------* 
FORM DIS_EDIT . 
IF G_GUISTATUE IS INITIAL OR G_GUISTATUE = 'DISPLAY'. 
G_GUISTATUE = 'EDIT'. 
ELSEIF G_GUISTATUE = 'EDIT'. 
G_GUISTATUE = 'DISPLAY'. 
ENDIF. 
ENDFORM.                    " DIS_EDIT

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18273.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论