&——————————————————————————————————-
    & 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.