REPORT ZYC_DEMO04.
TYPE-POOLS: slis.
DATA: wa_fieldcat TYPE slis_fieldcat_alv,
i_fieldcat TYPE slis_t_fieldcat_alv, " 存放列名的内表
i_layout TYPE slis_layout_alv. " 负责整个ALV的全局属性
DATA: smartform(30) TYPE c,
fm_name TYPE rs38l_fnam.
TABLES:faglflext,skat.
DATA: BEGIN OF ty_data ,
NUM TYPE C LENGTH 30,
NAME TYPE C LENGTH 30,
END OF ty_data.
DATA :gt_data LIKE TABLE OF ty_data WITH HEADER LINE,
gs_data LIKE ty_data.
DATA search TYPE C LENGTH 20.
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE t0.
PARAMETERS ls_matnr RADIOBUTTON GROUP int DEFAULT 'X'.
PARAMETERS ls_lifnr RADIOBUTTON GROUP int.
PARAMETERS ls_kunnr RADIOBUTTON GROUP int.
PARAMETERS s_name TYPE MAKT-maktx.
SELECTION-SCREEN END OF BLOCK blk.
START-OF-SELECTION.
PERFORM getdata.
PERFORM catalog.
PERFORM alvshow.
FORM getdata.
IF ls_matnr IS NOT INITIAL.
CONCATENATE '%'s_name'%' INTO search.
SELECT
makt~MATNR AS NUM,
makt~MAKTX AS NAME
INTO CORRESPONDING FIELDS OF TABLE @gt_data
FROM MAKT
WHERE makt~maktx LIKE @search.
ENDIF.
IF ls_lifnr IS NOT INITIAL.
CONCATENATE '%'s_name'%' INTO search.
SELECT
lfa1~LIFNR AS NUM,
lfa1~name1 AS NAME
INTO CORRESPONDING FIELDS OF TABLE @gt_data
FROM LFA1
WHERE lfa1~name1 LIKE @search.
ENDIF.
IF ls_kunnr IS NOT INITIAL.
CONCATENATE '%'s_name'%' INTO search.
SELECT
KNA1~KUNNR AS NUM,
KNA1~NAME1 AS NAME
INTO CORRESPONDING FIELDS OF TABLE @gt_data
FROM KNA1
WHERE KNA1~NAME1 LIKE @search.
ENDIF.
ENDFORM.
FORM catalog.
DEFINE fieldcatset.
CLEAR:wa_fieldcat.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_l = &2.
wa_fieldcat-col_pos = &3.
APPEND wa_fieldcat TO i_fieldcat.
END-OF-DEFINITION.
IF ls_matnr IS NOT INITIAL.
fieldcatset 'NUM' '物料号' sy-tabix.
fieldcatset 'NAME' '物料描述' sy-tabix.
ENDIF.
IF ls_lifnr IS NOT INITIAL.
fieldcatset 'NUM' '供应商编号' sy-tabix.
fieldcatset 'NAME' '供应商名称' sy-tabix.
ENDIF.
IF ls_kunnr IS NOT INITIAL.
fieldcatset 'NUM' '客户编号' sy-tabix.
fieldcatset 'NAME' '客户名称' sy-tabix.
ENDIF.
ENDFORM.
FORM alvshow.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
TABLES
t_outtab = gt_data
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.
REPORT ZYC_ZSDRP099_TEST.
TYPE-POOLS: slis.
DATA:
i_fieldcat TYPE slis_t_fieldcat_alv, " 存放列名的内表
i_layout TYPE slis_layout_alv. " 负责整个ALV的全局属性
DATA: BEGIN OF ty_data ,
NUM TYPE C LENGTH 30,
NAME TYPE C LENGTH 30,
END OF ty_data.
DATA gt_data LIKE TABLE OF ty_data.
DATA search TYPE C LENGTH 20.
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE t0.
PARAMETERS lv_matnr RADIOBUTTON GROUP int DEFAULT 'X'.
PARAMETERS lv_lifnr RADIOBUTTON GROUP int.
PARAMETERS lv_kunnr RADIOBUTTON GROUP int.
PARAMETERS s_name TYPE MAKT-maktx.
SELECTION-SCREEN END OF BLOCK blk.
*声明model
CLASS lcl_model DEFINITION.
PUBLIC SECTION.
METHODS:
read_db ,
catalog ,
*获取输出结果
get_output EXPORTING et_output LIKE gt_data.
PRIVATE SECTION.
DATA:
mt_output LIKE TABLE OF ty_data,
wa_fieldcat TYPE slis_fieldcat_alv.
ENDCLASS.
*实现model
CLASS lcl_model IMPLEMENTATION.
*读取数据
METHOD read_db.
IF lv_matnr IS NOT INITIAL.
CONCATENATE '%' s_name '%' INTO search.
SELECT
makt~MATNR AS NUM,
makt~MAKTX AS NAME
INTO CORRESPONDING FIELDS OF TABLE @mt_output
FROM MAKT
WHERE makt~maktx LIKE @search.
ENDIF.
IF lv_lifnr IS NOT INITIAL.
CONCATENATE '%' s_name '%' INTO search.
SELECT
lfa1~LIFNR AS NUM,
lfa1~name1 AS NAME
INTO CORRESPONDING FIELDS OF TABLE @mt_output
FROM LFA1
WHERE lfa1~name1 LIKE @search.
ENDIF.
IF lv_kunnr IS NOT INITIAL.
CONCATENATE '%' s_name '%' INTO search.
SELECT
KNA1~KUNNR AS NUM,
KNA1~NAME1 AS NAME
INTO CORRESPONDING FIELDS OF TABLE @mt_output
FROM KNA1
WHERE KNA1~NAME1 LIKE @search.
ENDIF.
ENDMETHOD.
METHOD catalog.
DEFINE fieldcatset.
CLEAR:wa_fieldcat.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_l = &2.
wa_fieldcat-col_pos = &3.
APPEND wa_fieldcat TO i_fieldcat.
END-OF-DEFINITION.
IF lv_matnr IS NOT INITIAL.
fieldcatset 'NUM' '物料号' sy-tabix.
fieldcatset 'NAME' '物料描述' sy-tabix.
ENDIF.
IF lv_lifnr IS NOT INITIAL.
fieldcatset 'NUM' '供应商编号' sy-tabix.
fieldcatset 'NAME' '供应商名称' sy-tabix.
ENDIF.
IF lv_kunnr IS NOT INITIAL.
fieldcatset 'NUM' '客户编号' sy-tabix.
fieldcatset 'NAME' '客户名称' sy-tabix.
ENDIF.
ENDMETHOD.
*获取输出结果
METHOD get_output.
et_output = mt_output.
ENDMETHOD.
ENDCLASS.
*声明controller
CLASS lcl_controller DEFINITION.
PUBLIC SECTION.
METHODS:
*实例化实体对象
constructor,
*执行ALV
run.
PRIVATE SECTION.
DATA:
mo_model TYPE REF TO lcl_model.
ENDCLASS.
*实现controller
CLASS lcl_controller IMPLEMENTATION.
*实例化实体对象
METHOD constructor.
CREATE OBJECT mo_model.
ENDMETHOD.
*执行ALV
METHOD run.
DATA:lt_output LIKE gt_data.
mo_model->read_db( ).
mo_model->catalog( ).
mo_model->get_output( IMPORTING et_output = lt_output ).
*调用ALV函数
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
TABLES
t_outtab = lt_output[]
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
*执行
NEW lcl_controller( )->run( ).