&——————————————————————————————————-
& Report YXMS001
&
&——————————————————————————————————-
&
&
&——————————————————————————————————-
REPORT yxms001 NO STANDARD PAGE HEADING MESSAGE-ID oo.
**
定义和引用基础数据
**
——————————————————————————————————
TABLES 定义引用表
——————————————————————————————————
——————————————————————————————————
TABLES: ekko, ekpo.
TYPE-POOLS 定义系统类
——————————————————————————————————
——————————————————————————————————
TYPE-POOLS sils .
CONSTANTS 定义常量 命名规则为 :COS_开关
——————————————————————————————————
——————————————————————————————————
TYPE 定义数据类型 命名规则为 :TY_开关 结构
——————————————————————————————————*
TYPES :BEGIN OF ty_table, “定义结构ebeln TYPE ekpo-ebeln,ebelp TYPE ekpo-ebelp,matnr TYPE ekpo-matnr,menge TYPE ekpo-menge,maktx TYPE makt-maktx,
END OF ty_table.
——————————————————————————————————
DATA 定义变量、内表、工作区
命名规则为 :
全局变量 : G_
局部变量 : L
*全局内表 : IT 表 类型 表 OF ty表
*本地内表 : LT
全局工作区: WA 表 类型 ty表
本地工作区: LW_
“内表
DATA :it_table TYPE TABLE OF ty_table, “工作区 wa_table TYPE ty_table.
—alv
DATA :it_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat TYPE slis_fieldcat_alv, wa_layout TYPE slis_layout_alv , “ALV 布局 wa_variant TYPE disvariant, “ALV 显示格式 it_sort TYPE slis_t_sortinfo_alv, “ALV 排序内表 it_events TYPE slis_t_event.
———————————————————————————————————
SELECTION-SCREEN DECLARATION: PARAMETERS & SELECT-OPTIONS
自定义选择 屏幕上参数 和选择标准 格式
SELECT-OPTIONS:no-extension\no intervals\obligatory
no-extension: 没有后面选择
no intervals: 没有间隔选择
obligatory : 必输项
命名规则:
PARAMETERS :P_ 字段 type 表-字段
SELECT-OPTIONS :S for
* CHECKBOX :C
“文本字符
SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_bukrs TYPE ekko-bukrs OBLIGATORY.
SELECT-OPTIONS:s_ebeln FOR ekpo-ebeln, s_matnr FOR ekpo-matnr.
SELECTION-SCREEN : END OF BLOCK b1.
———————————————————————————————————
INITIALIZATION 当执行时,程序首先执行的事件。
———————————————————————————————————
INITIALIZATION.
PERFORM frm_initialization.
———————————————————————————————————
at selection-screen output 当执行时,在操作输出前所处理的事件
例如,在这 些事件中, 可以申请对 选择屏幕上 的字段作出 修改
———————————————————————————————————
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_modify_screen.
———————————————————————————————————
at selection-screen 当执行时,事件的检查操作
如对屏幕的字段的检查等。
———————————————————————————————————
AT SELECTION-SCREEN.
PERFORM frm_check_input.
———————————————————————————————————
start-of-selection 当以上的事件处理完没有问题的时候,才执行此事件。
此事件处理的主要是对数据的获取与处理等
———————————————————————————————————
START-OF-SELECTION. PERFORM frm_retrive_data.”获取数据
PERFORM frm_process_data.”处理数据
“循环内表 LOOP AT it_table INTO wa_table. “取物料的描述 SELECT SINGLE maktx
INTO wa_table-maktx
FROM makt
WHERE matnr = wa_table-matnr
AND spras = sy-langu . “取当前的语言码 “条件 “更新内表 MODIFY it_table FROM wa_table.
ENDLOOP.
———————————————————————————————————
end-of-selection 当执行完对数据处理的事件后,将对数据进行输出显示。
———————————————————————————————————
END-OF-SELECTION. PERFORM frm_set_alv_event. PERFORM frm_set_alv_fieldcats. PERFORM frm_set_alv_layout. PERFORM frm_alv_output.
INCLUDE yxms001_alv.
&——————————————————————————————————-
& Form FRM_RETRIVE_DATA
&——————————————————————————————————-
text
———————————————————————————————————
—> p1 text
<— p2 text
———————————————————————————————————
FORM frm_retrive_data . SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_table “把取出来的数放到内表 FROM ekpo
WHERE bukrs = p_bukrs
AND ebeln IN s_ebeln
AND matnr IN s_matnr.
ENDFORM. “ FRM_RETRIVE_DATA
&——————————————————————————————————-
*& 包含 __YXMS001_ALV
&——————————————————————————————————-
*& Form FRM_SET_ALV_EVENT
&——————————————————————————————————-
* text
———————————————————————————————————
* —> p1 text
* <— p2 text
——————————————————————————————————— “标配
FORM FRM_SET_ALV_EVENT .
DATA: lw_events TYPE slis_alv_event.
CALL FUNCTION ‘REUSE_ALV_EVENTS_GET’ EXPORTING i_list_type = 0 IMPORTING et_events = it_events
EXCEPTIONS list_type_wrong = 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. “ FRM_SET_ALV_EVENT
*& Form FRM_SET_ALV_FIELDCATS
&——————————————————————————————————-
* text
———————————————————————————————————
* —> p1 text
* <— p2 text
——————————————————————————————————— “需要修改
FORM FRMSET_ALV_FIELDCATS .
**
此处每个开发人员需要设置自己ALV所要显示的内容
** PERFORM frm_set_fieldcat USING: “(“字段” “表” “文字意思” “数量”) ‘EBELN’ ‘EKKO’ ‘采购订单号’ 10, ‘EBELP’ ‘EKPO’ ‘行项目’ 5, ‘MATNR’ ‘EKPO’ ‘物料号’ 18, ‘MAKTX’ ‘’ ‘物料描述’ 35, ‘MENGE’ ‘EKPO’ ‘采购订单数量’ 13.
ENDFORM. “ FRMSET_ALV_FIELDCATS
FORM frmset_fieldcat USING p_fieldname TYPE slis_fieldname
p_ref_tabname TYPE slis_tabname
p_text TYPE dd03p-scrtext_l
p_outputlen TYPE dd03p-outputlen. CLEAR wa_fieldcat. wa_fieldcat-fieldname = p_fieldname. wa_fieldcat-ref_tabname = p_ref_tabname. wa_fieldcat-seltext_l = p_text. wa_fieldcat-seltext_s = p_text. wa_fieldcat-seltext_m = p_text. wa_fieldcat-outputlen = p_outputlen. wa_fieldcat-no_zero = ‘X’. “pzero.去掉显示的前导零
APPEND wafieldcat TO it_fieldcat.
ENDFORM.
& Form FRMSET_ALV_LAYOUT
_&——————————————————————————————————-
text
———————————————————————————————————
—> p1 text
<— p2 text
——————————————————————————————————— “标配
FORM FRM_SET_ALV_LAYOUT .
wa_layout-colwidth_optimize = ‘X’.“自动优化列宽 wa_layout-zebra = ‘X’. “条纹显示
walayout-box_fieldname = ‘ZSEL’. “行选择标识
ENDFORM.
_& Form FRMALV_OUTPUT
&——————————————————————————————————-
* text
———————————————————————————————————
* —> p1 text
* <— p2 text
———————————————————————————————————
FORM FRMALV_OUTPUT . “需要注意
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’ EXPORTING i_callback_program = sy-repid
is_layout = wa_layout
it_fieldcat = it_fieldcat
i_save = ‘A’
isvariant = wa_variant itevents = it_events
“不需要子程序时要屏蔽
icallback_pf_status_set = ‘FRM_SET_STATUS’
_ icallback_user_command = ‘FRM_USER_COMMAND’
**
ALV输出的内表,开发人员增加自己要输出的内表
** TABLES touttab = it_table
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. “ FRMALV_OUTPUT
*& Form FRM_FREE_OBJECT
&——————————————————————————————————-
* text
———————————————————————————————————
* —> p1 text
* <— p2 text
——————————————————————————————————— “标配
FORM FRM_FREE_OBJECT .
FREE it_table.
ENDFORM.
