abap 单选查询报表两种方式

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( ).
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值