业务需求:
在SAP项目中,会经常碰到如下需求:
1:需要开发具有选择屏幕、数据展示界面、功能按钮的功能程序。
2:可以通过画屏幕的方式,但是最简单的方式也就是ALV报表;下面是效果图:
选择屏幕:
显示界面:
功能按钮:
完整示例代码:
一、REPORT 程序框架。
*&---------------------------------------------------------------------*
*& Report ZMIMXSDRP_0022_4
*&
*&---------------------------------------------------------------------*
*& Program Name <程序名称>: 手工发票修复
*& Purpose <程序用途>: Function Desc.
*& Project Name <项目名称>:
*& Created by <创 建 人>: NIUGUANGKAI
*& Created on <创建日期>: 20230605
*& Functional Consultant<功能顾问>: biz consultant
*& Description <功能描述>: 手工发票修复
*&---------------------------------------------------------------------*
* Modification Log<程序修改日志>
*<日期> <开发者> <功能顾问> <修改描述>
* Date Programmer Corr. # 请求号+描述
*&
*&
*&---------------------------------------------------------------------*
REPORT ZMIMXSDRP_0022_4 MESSAGE-ID ZMIMXSDRP_0022_4.
*&-----------------------------------------------------------------*
* DESC: INCLUDES 文件-变量定义
*&-----------------------------------------------------------------*
INCLUDE ZMIMXSDRP_0022_4_TOP.
*&-----------------------------------------------------------------*
* DESC: INCLUDES 文件-选择界面
*&-----------------------------------------------------------------*
INCLUDE ZMIMXSDRP_0022_4_SCREEN.
*&-----------------------------------------------------------------*
* DESC: INCLUDES ALV相关定义
*&-----------------------------------------------------------------*
INCLUDE ZMIMXSDRP_0022_4_ALV.
*&-----------------------------------------------------------------*
* DESC: INCLUDES 文件-子程序
*&-----------------------------------------------------------------*
INCLUDE ZMIMXSDRP_0022_4_FORM.
*&-----------------------------------------------------------------*
* DESC: INCLUDES 文件-主程序
*&-----------------------------------------------------------------*
INCLUDE ZMIMXSDRP_0022_4_MAIN.
二、INCLUDE变量定义。
*&---------------------------------------------------------------------*
*& 包含 ZMIMXSDRP_0022_4_TOP
*&---------------------------------------------------------------------*
*&-----------------------------------------------------------------*
*& 数据声明-开始
*&-----------------------------------------------------------------*
*&-----------------------------------------------------------------*
*& DESC: 结构
*&-----------------------------------------------------------------*
DATA: BEGIN OF GS_ALV,
SEL(1),
VKORG LIKE LIKP-VKORG, "销售组织
ERDAT LIKE ZTMIMXSD_0006-ERDAT, "创建日期(开票通知单)
ZKPTZN LIKE ZTMIMXSD_0007-ZKPTZN, "开票通知单
ZKPPOS LIKE ZTMIMXSD_0007-ZKPPOS, "行项目
VBELN LIKE ZTMIMXSD_0007-VBELN, "交货单
POSNR LIKE ZTMIMXSD_0007-POSNR, "行项目
ZFPNUM LIKE ZTMIMXSD_0007-ZFPNUM, "开票凭证
STATUS(4), "
STATUS_T(20),
VBELN_KP LIKE VBRK-VBELN, "正确开票凭证
POSNR_KP LIKE VBRP-POSNR, "
END OF GS_ALV.
*&-----------------------------------------------------------------*
*& DESC: 内表
*&-----------------------------------------------------------------*
DATA: GT_ALV LIKE TABLE OF GS_ALV.
*&-----------------------------------------------------------------*
*& DESC: 变量
*&-----------------------------------------------------------------*
*&-----------------------------------------------------------------*
*& DESC: 常量
*&-----------------------------------------------------------------*
CONSTANTS: C_NO TYPE CHAR04 VALUE '@0A@', "失败-红色
C_YES TYPE CHAR04 VALUE '@08@', "成功-绿色
C_W TYPE CHAR04 VALUE '@09@', "不允许操作-警告-黄色
C_INIT TYPE CHAR04 VALUE '@EB@'. "初始化-灰色
*&-----------------------------------------------------------------*
*& 数据声明-结束
*&-----------------------------------------------------------------*
三、INCLUDE选择屏幕。
*&---------------------------------------------------------------------*
*& 包含 ZMIMXSDRP_0022_4_SCREEN
*&---------------------------------------------------------------------*
TABLES: ZTMIMXSD_0006,
ZTMIMXSD_0007,
LIKP.
*----------------------------------------------------------------------*
* DESC: 定义选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BK01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VKORG FOR LIKP-VKORG "销售组织
NO-EXTENSION
NO INTERVALS
* OBLIGATORY
,
S_ZKPTZN FOR ZTMIMXSD_0006-ZKPTZN,"开票通知单
S_ERDAT FOR ZTMIMXSD_0006-ERDAT. "开票通知单-创建日期
SELECTION-SCREEN END OF BLOCK BK01.
四、INCLUDE ALV相关定义。
*&---------------------------------------------------------------------*
*& 包含 ZLGFIRP_TMS01_ALV
*&---------------------------------------------------------------------*
TYPE-POOLS: ICON.
*&-----------------------------------------------------------------*
*& 数据声明-ALV相关
*&-----------------------------------------------------------------*
DATA: GS_LAYOUT TYPE LVC_S_LAYO,
GS_FCAT TYPE LVC_S_FCAT,
GT_FCAT LIKE TABLE OF GS_FCAT.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SET_FIELDS
*&---------------------------------------------------------------------*
* ALV_SET_FIELDS
*----------------------------------------------------------------------*
FORM FRM_ALV_SET_FIELDS .
DATA: LV_INDEX LIKE SY-INDEX.
CLEAR: GS_FCAT,
GT_FCAT,
GS_LAYOUT.
GS_LAYOUT-CWIDTH_OPT = 'X'.
* GS_LAYOUT-BOX_FNAME = 'SEL'.
GS_LAYOUT-ZEBRA = 'X'.
* GS_LAYOUT-SEL_MODE = 'A'.
* GS_LAYOUT-COLTAB_FIELDNAME = 'CELL_COLOR'."单元格颜色
GS_LAYOUT-NO_ROWMARK = 'X'.
* GS_LAYOUT-INFO_FNAME = 'H_COLOR'. "行颜色
* GS_LAYOUT-STYLEFNAME = 'CELTAB'. "控制单元格
* GS_LAYOUT-CTAB_FNAME = 'C_COLOR'. "单元格颜色
**ALV字段处理宏
DEFINE CATALOG.
CLEAR GS_FCAT.
LV_INDEX = LV_INDEX + 1.
GS_FCAT-COL_POS = LV_INDEX.
GS_FCAT-FIELDNAME = &1.
GS_FCAT-FIX_COLUMN = &2.
GS_FCAT-REF_TABLE = &3.
GS_FCAT-EDIT = &4.
GS_FCAT-COLDDICTXT = 'L'.
GS_FCAT-SCRTEXT_L = &5.
GS_FCAT-REF_FIELD = &6.
GS_FCAT-EMPHASIZE = &8.
GS_FCAT-HOTSPOT = &9.
* IF &1 = 'ZYFKJE'. "本次付款金额
* GS_FCAT-DATATYPE = 'CURR'.
* GS_FCAT-INTTYPE = 'C'.
* ENDIF.
IF &1 = 'SEL'.
GS_FCAT-CHECKBOX = 'X'.
ENDIF.
IF &1 = 'STATUS'. "更正状态
GS_FCAT-ICON = 'X'.
ENDIF.
****控制:字段显示不显示
IF &7 IS INITIAL.
ENDIF.
APPEND GS_FCAT TO GT_FCAT.
END-OF-DEFINITION.
** &1 &2 &3 &4 &5 &6 &7 &8 &9
CATALOG:
'SEL' 'X' '' 'X' '选中' '' '' '' 'X',
'VKORG' 'X' 'LIKP' '' '销售组织' 'VKORG' '' 'C410' '',
'ERDAT' 'X' 'ZTMIMXSD_0006' '' '创建日期' 'ERDAT' '' 'C410' '',
'ZKPTZN' 'X' 'ZTMIMXSD_0007' '' '开票通知单' 'ZFPNUM' '' 'C410' '',
'ZKPPOS' '' 'ZTMIMXSD_0007' '' '行项目' 'ZKPPOS' '' '' '',
'VBELN' '' 'ZTMIMXSD_0007' '' '交货单' 'VBELN' '' '' 'X',
'POSNR' '' 'ZTMIMXSD_0007' '' '行项目' 'POSNR' '' '' '',
'ZFPNUM' '' 'ZTMIMXSD_0007' '' '007开票凭证' 'ZFPNUM' '' '' 'X',
'STATUS' '' '' '' '更正状态' '' '' '' '',
'STATUS_T' '' '' '' '状态描述' '' '' '' '',
'VBELN_KP' '' 'VBRK' '' '正确开票凭证' 'VBELN' '' '' 'X',
'POSNR_KP' '' 'VBRP' '' '行项目' 'POSNR' '' '' ''.
ENDFORM. " FRM_ALV_SET_FIELDS
*&---------------------------------------------------------------------*
*& Form F_FRM_ALV_SET_STATUS
*&---------------------------------------------------------------------*
* 设置程序的用户状态
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM FRM_ALV_SET_STATUS USING EXTAB TYPE SLIS_T_EXTAB.
DATA: LT_FCODE TYPE TABLE OF SY-UCOMM.
***对账单
* APPEND 'CXFP' TO LT_FCODE.
SET PF-STATUS 'PF_ALV' EXCLUDING LT_FCODE.
ENDFORM. "FRM_FRM_ALV_SET_STATUS
*&---------------------------------------------------------------------*
*& Form f_FRM_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* ALV_USER_COMMAND
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM FRM_ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID,
GL_VALID TYPE C,
LT_FILTERED_ENTRIES TYPE LVC_T_FIDX,
L_TABIX TYPE I,
L_LINE TYPE I.
RS_SELFIELD-REFRESH = 'X'."编辑完成保存后刷新alv页
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = G_GRID.
CASE R_UCOMM.
WHEN '&IC1'.
READ TABLE GT_ALV INTO DATA(LS_ALV) INDEX RS_SELFIELD-TABINDEX.
IF RS_SELFIELD-FIELDNAME = 'SEL'.
LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<FS_ALV>) WHERE ZKPTZN = LS_ALV-ZKPTZN
AND STATUS = C_NO.
IF LS_ALV-SEL = 'X'.
<FS_ALV>-SEL = ''.
ELSE.
<FS_ALV>-SEL = 'X'.
ENDIF.
ENDLOOP.
ENDIF.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'VBELN'. "交货单
IF RS_SELFIELD-VALUE IS NOT INITIAL.
SET PARAMETER ID 'VL' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VL03N' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'ZFPNUM'. "发票
IF RS_SELFIELD-VALUE IS NOT INITIAL.
SET PARAMETER ID 'VF' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VF03' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'VBELN_KP'."发票
IF RS_SELFIELD-VALUE IS NOT INITIAL.
SET PARAMETER ID 'VF' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VF03' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
WHEN 'ALL'."全选
LOOP AT GT_ALV ASSIGNING <FS_ALV> WHERE STATUS = C_NO.
<FS_ALV>-SEL = 'X'.
ENDLOOP.
WHEN 'SAL'."取消全选
LOOP AT GT_ALV ASSIGNING <FS_ALV>.
<FS_ALV>-SEL = ''.
ENDLOOP.
WHEN 'ZGZ'. "更正
PERFORM FRM_UCOM_ZGZ.
ENDCASE.
CALL METHOD G_GRID->CHECK_CHANGED_DATA.
ENDFORM. "f_FRM_ALV_USER_COMMAND
五、INCLUDE子程序。
*&---------------------------------------------------------------------*
*& 包含 ZMIMXSDRP_0022_4_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_NOW_PROGRESS
*&---------------------------------------------------------------------*
* 显示当前进度
*----------------------------------------------------------------------*
FORM FRM_NOW_PROGRESS USING P_NOWL TYPE I "当前处理行
P_SUML TYPE I "总数据行
P_MSG TYPE STRING."处理消息
DATA: L_PRC TYPE I,
L_PRCS TYPE STRING.
**获取完成比率
L_PRC = P_NOWL * 100 / P_SUML.
L_PRCS = L_PRC.
CONCATENATE P_MSG L_PRCS '%'INTO P_MSG.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = L_PRC
TEXT = P_MSG.
ENDFORM. " FRM_NOW_PROGRESS
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* 获取数据
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
PERFORM FRM_NOW_PROGRESS USING 1 1 '正在获取开发通知单信息.....'.
SELECT LIKP~VKORG, "销售组织
Z06~ZKPTZN, "开票通知单
Z07~ZKPPOS, "行项目
Z07~VBELN, "交货单
Z07~POSNR, "行项目
Z07~ZFPNUM, "开票凭证
Z06~ERDAT "创建日期
INTO CORRESPONDING FIELDS OF TABLE @GT_ALV
FROM ZTMIMXSD_0006 AS Z06
INNER JOIN ZTMIMXSD_0007 AS Z07
ON Z07~ZKPTZN = Z06~ZKPTZN
LEFT JOIN LIPS
ON LIPS~VBELN = Z07~VBELN
AND LIPS~POSNR = Z07~POSNR
LEFT JOIN LIKP
ON LIKP~VBELN = Z07~VBELN
WHERE Z06~ERDAT IN @S_ERDAT
AND LIKP~VKORG IN @S_VKORG
AND Z06~ZKPTZN IN @S_ZKPTZN.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_DATA
*&---------------------------------------------------------------------*
* 处理数据
*----------------------------------------------------------------------*
FORM FRM_EDIT_DATA .
PERFORM FRM_NOW_PROGRESS USING 1 1 '正在获取交货单发票信息.....'.
IF GT_ALV[] IS NOT INITIAL.
SELECT VBRP~VGBEL, "交货单
VBRP~VGPOS,
VBRP~VBELN, "发票-被冲销
VBRP~POSNR,
VBRK_CX~VBELN AS VBELN_CX, "发票-冲销
VBRK_CX~FKART AS FKART_CX "开票类型
INTO TABLE @DATA(LT_ZFPCX_S)
FROM VBRP
LEFT JOIN VBRK AS VBRK_CX
ON VBRK_CX~SFAKN = VBRP~VBELN
FOR ALL ENTRIES IN @GT_ALV
WHERE VBRP~VGBEL = @GT_ALV-VBELN
AND VBRP~VGPOS = @GT_ALV-POSNR.
DATA(LT_ZFPCX) = LT_ZFPCX_S[].
SORT LT_ZFPCX BY VGBEL
VGPOS.
****处理:删除冲销与被冲销发票
RANGES: LR_VBELN FOR VBRK-VBELN.
LOOP AT LT_ZFPCX INTO DATA(LS_ZFPCX) WHERE VBELN_CX NE ''.
LR_VBELN = VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = LS_ZFPCX-VBELN ).
APPEND LR_VBELN.
LR_VBELN = VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = LS_ZFPCX-VBELN_CX ).
APPEND LR_VBELN.
ENDLOOP.
IF LR_VBELN[] IS NOT INITIAL.
DELETE LT_ZFPCX WHERE VBELN IN LR_VBELN.
ENDIF.
ENDIF.
PERFORM FRM_NOW_PROGRESS USING 1 1 '正在对照开票信息.....'.
LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<FB_ALV>).
****获取:当前交货单发票
CLEAR LS_ZFPCX.
READ TABLE LT_ZFPCX INTO LS_ZFPCX WITH KEY VGBEL = <FB_ALV>-VBELN
VGPOS = <FB_ALV>-POSNR
BINARY SEARCH.
IF LS_ZFPCX-VBELN = <FB_ALV>-ZFPNUM.
<FB_ALV>-STATUS = C_YES. "绿色
<FB_ALV>-STATUS_T = '发票正确'.
ELSE.
<FB_ALV>-VBELN_KP = LS_ZFPCX-VBELN.
<FB_ALV>-POSNR_KP = LS_ZFPCX-POSNR.
<FB_ALV>-STATUS = C_NO.
<FB_ALV>-STATUS_T = '需要更正'. "红色
ENDIF.
CLEAR LS_ZFPCX.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* 数据显示
*----------------------------------------------------------------------*
FORM FRM_SHOW_DATA .
**ALV输入参数
PERFORM FRM_ALV_SET_FIELDS.
**ALV数据显示
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
* I_DEFAULT = ''
I_CALLBACK_PF_STATUS_SET = 'FRM_ALV_SET_STATUS'
IT_FIELDCAT_LVC = GT_FCAT
IS_LAYOUT_LVC = GS_LAYOUT
I_CALLBACK_USER_COMMAND = 'FRM_ALV_USER_COMMAND'
* I_SAVE = 'A'
TABLES
T_OUTTAB = GT_ALV[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UCOM_ZGZ
*&---------------------------------------------------------------------*
* 更正功能
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UCOM_ZGZ .
DATA: L_SUM TYPE I,
L_NOW TYPE I,
L_ZFPFG TYPE ZTMIMXSD_0007-ZFPFG,
L_MESSAGE TYPE STRING,
LS_ZTMIMXSD_0007LOG TYPE ZTMIMXSD_0007LOG.
LOOP AT GT_ALV INTO DATA(LS_ALV) WHERE SEL = 'X'.
L_SUM = L_SUM + 1.
ENDLOOP.
IF L_SUM = 0.
MESSAGE I002."未选中待更正行项目
ELSE.
LOOP AT GT_ALV ASSIGNING FIELD-SYMBOL(<FS_ALV>) WHERE SEL = 'X'.
L_NOW = L_NOW + 1.
L_MESSAGE = |共{ L_SUM }条行项目,当前处理第{ L_NOW }行.....|.
PERFORM FRM_NOW_PROGRESS USING L_NOW L_SUM L_MESSAGE.
IF <FS_ALV>-VBELN_KP IS INITIAL.
L_ZFPFG = ''.
ELSE.
L_ZFPFG = 'S'.
ENDIF.
******更新ZTMIMXSD_0007表
UPDATE ZTMIMXSD_0007 SET ZFPNUM = <FS_ALV>-VBELN_KP
ZFPPOS = <FS_ALV>-POSNR_KP
ZFPFG = L_ZFPFG
AEDAT = SY-DATUM
AETIM = SY-UZEIT
AENAM = SY-UNAME
WHERE ZKPTZN = <FS_ALV>-ZKPTZN
AND ZKPPOS = <FS_ALV>-ZKPPOS.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
<FS_ALV>-SEL = ''.
<FS_ALV>-STATUS = C_YES.
<FS_ALV>-STATUS_T = '更正成功'.
********更新ZTMIMXSD_0007LOG表-修改记录表
CLEAR LS_ZTMIMXSD_0007LOG.
LS_ZTMIMXSD_0007LOG-ZKPTZN = <FS_ALV>-ZKPTZN.
LS_ZTMIMXSD_0007LOG-ZKPPOS = <FS_ALV>-ZKPPOS.
LS_ZTMIMXSD_0007LOG-FNAME = 'ZFPNUM'.
LS_ZTMIMXSD_0007LOG-VALUE_OLD = <FS_ALV>-ZFPNUM.
LS_ZTMIMXSD_0007LOG-VALUE_NEW = <FS_ALV>-VBELN_KP.
LS_ZTMIMXSD_0007LOG-AEDAT = SY-DATUM.
LS_ZTMIMXSD_0007LOG-AETIM = SY-UZEIT.
LS_ZTMIMXSD_0007LOG-AENAM = SY-UNAME.
MODIFY ZTMIMXSD_0007LOG FROM LS_ZTMIMXSD_0007LOG.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
ENDIF.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
MESSAGE S003."全部开票通知单更正成功
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_AUTHORITY_CHECK
*&---------------------------------------------------------------------*
* 权限检测
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_AUTHORITY_CHECK .
**权限检查-销售组织
SELECT VKORG
INTO TABLE @DATA(LT_TVKO)
FROM TVKO
WHERE VKORG IN @S_VKORG.
LOOP AT LT_TVKO INTO DATA(LS_TVKO).
AUTHORITY-CHECK OBJECT 'V_VBRK_VKO'
ID 'VKORG' FIELD LS_TVKO-VKORG
ID 'ACTVT' DUMMY.
IF SY-SUBRC NE 0.
******没有权限,请检查输入的销售组织!
MESSAGE E004 WITH LS_TVKO-VKORG.
ENDIF.
ENDLOOP.
ENDFORM.
六、INCLUDE主程序。
*&---------------------------------------------------------------------*
*& 包含 ZMIMXSDRP_0022_4_MAIN
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DESC: INITIALIZATION 事件
*----------------------------------------------------------------------*
INITIALIZATION.
**初始化操作
* PERFORM FRM_INIT_SCREEN.
*----------------------------------------------------------------------*
* DESC: AT SELECTION-SCREEN 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
**权限检测
PERFORM FRM_AUTHORITY_CHECK.
*----------------------------------------------------------------------*
* DESC: AT SELECTION-SCREEN OUTPUT 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* PERFORM FRM_MODIFY_SCREEN.
*----------------------------------------------------------------------*
* DESC: START-OF-SELECTION 事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
**获取数据
PERFORM FRM_GET_DATA.
**处理数据
PERFORM FRM_EDIT_DATA.
IF GT_ALV[] IS NOT INITIAL.
****显示数据
PERFORM FRM_SHOW_DATA.
ELSE.
MESSAGE S001 DISPLAY LIKE 'E'. "
ENDIF.