ABAP 报表程序 范例

涉及到的知识点:

cl_gui_alv_grid--ALV控件

cl_gui_custom_container--gui容器

屏幕的创建以及调用

子程序的创建及调用

DYNP_VALUES_READ函数的调用及使用方法(从屏幕获取值)

按钮事件的调用

废话不多说,上代码

*&---------------------------------------------------------------------*
*& Report Z_ALV_TABLE_CONTROL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_alv_table_control.

DATA:gRId               TYPE REF TO cl_gui_alv_gRId,      "调用avl控件
     g_custom_container TYPE REF TO cl_gui_custom_container,
     gt_sflight         TYPE TABLE OF sflight.

DATA:ok_code   TYPE sy-ucomm,
     save_code TYPE sy-ucomm.

DATA:carrid     LIKE sflight-carrid,
     connid     TYPE n LENGTH 4,      "这里尝试使用 connid like sflight-connid.无法查询 具体原因未知
     fldate     LIKE sflight-fldate,
     price      TYPE c LENGTH 10,
     currency   LIKE sflight-currency,
     planetype  LIKE sflight-planetype,
     seatsmax   TYPE c LENGTH 10,
     seatsocc   TYPE c LENGTH 10,
     paymentsum TYPE c LENGTH 10.


DATA:gt_field TYPE TABLE OF dynpread,
     gs_field TYPE dynpread.

DATA:gs_str TYPE c LENGTH 200,
     gt_str LIKE TABLE OF gs_str.


CALL SCREEN 200.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  IF g_custom_container IS INITIAL.
    CREATE OBJECT g_custom_container
      EXPORTING
        container_name = 'CCCONTAINER'. "实例化自定义容器控件
    CREATE OBJECT gRId
      EXPORTING
        i_parent = g_custom_container.    "实例化ALV GRID控件
  ENDIF.

  PERFORM get_input_data USING
        carrid
        connid
        fldate
        price
        currency
        planetype
        seatsmax
        seatsocc
        paymentsum.   "获取用户输入的值

  PERFORM con_str_sql USING
        carrid
        connid
        fldate
         price
        currency
        planetype
        seatsmax
        seatsocc
        paymentsum
        CHANGING  gs_str.  "动态sql语句拼接


  SELECT * FROM sflight INTO TABLE gt_sflight WHERE (gt_str).
  CLEAR gt_str.

  CALL METHOD grid->set_table_for_first_display       "调用方法输出gt_sflight数据
    EXPORTING
      i_structure_name = 'SFLIGHT'
    CHANGING
      it_outtab        = gt_sflight.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.       "屏幕100的按钮事件调用
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'RETRUN'.
      CALL SCREEN 200.    "点击返回调用屏幕200
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0200 OUTPUT.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code. "屏幕200的按钮事件调用
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'QUERY'.
      CALL SCREEN 100.  "点击查询调用屏幕100
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

FORM get_input_data USING carrid connid fldate price currency planetype seatsmax seatsocc paymentsum.
  gs_field-fieldname = 'CARRID'.   "获取屏幕上用户输入的值
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'CONNID'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'FLDATE'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'PRICE'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'CURRENCY'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'PLANETYPE'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'SEATSMAX'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'SEATSOCC'.
  APPEND gs_field TO gt_field.

  gs_field-fieldname = 'PAYMENTSUM'.
  APPEND gs_field TO gt_field.

  CALL FUNCTION 'DYNP_VALUES_READ'     "调用函数dynp_values_read获取屏幕元素值
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
      translate_to_upper   = 'X'
    TABLES
      dynpfields           = gt_field
    EXCEPTIONS                          "异常
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.
  IF sy-subrc = 0.
* Implement suitable error handling here
    LOOP AT gt_field INTO gs_field.
      IF gs_field-fieldname = 'CARRID'.
        carrid = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'CONNID'.   "fieldname和fieldvalue可以理解为键值对
        connid = gs_field-fieldvalue.     "利用name获取value
      ELSEIF gs_field-fieldname = 'FLDATE'.
        fldate = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'PRICE'.
        price = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'CURRENCY'.
        currency = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'PLANETYPE'.
        planetype = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'SEATSMAX'.
        seatsmax = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'SEATSOCC'.
        seatsocc = gs_field-fieldvalue.
      ELSEIF gs_field-fieldname = 'PAYMENTSUM'.
        paymentsum = gs_field-fieldvalue.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.

FORM con_str_sql USING carrid connid fldate price currency planetype seatsmax seatsocc paymentsum CHANGING gs_str.
  CLEAR: gt_str,gs_str.
  gs_str = ' mandt = 100 '.
  APPEND gs_str TO gt_str.

  IF carrid IS NOT INITIAL.
    CONCATENATE ' and carrid = ''' carrid '''' INTO gs_str.
    APPEND gs_str TO gt_str.
  ENDIF.
  IF connid IS NOT INITIAL.
    CONCATENATE ' and connid = ' connid  INTO gs_str SEPARATED BY ' '.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF fldate IS NOT INITIAL.
    CONCATENATE ' and fldate = ''' fldate '''' INTO gs_str.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF price IS NOT INITIAL.
    CONCATENATE ' and price = ''' price '''' INTO gs_str SEPARATED BY ' '.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF currency IS NOT INITIAL.
    CONCATENATE ' and currency = ''' currency '''' INTO gs_str.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF planetype IS NOT INITIAL.
    CONCATENATE ' and planetype = ''' planetype '''' INTO gs_str.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF seatsmax IS NOT INITIAL.
    CONCATENATE ' and seatsmax = ' seatsmax  INTO gs_str SEPARATED BY ' '.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF seatsocc IS NOT INITIAL.
    CONCATENATE ' and seatsocc = ' seatsocc INTO gs_str SEPARATED BY ' '.
    APPEND gs_str TO gt_str.
  ENDIF.

  IF paymentsum IS NOT INITIAL.
    CONCATENATE ' and paymentsum = ''' paymentsum '''' INTO gs_str SEPARATED BY ' '.
    APPEND gs_str TO gt_str.
  ENDIF.
ENDFORM.

对象导航器界面:

 屏幕100的布局:

屏幕200的布局:

 屏幕创建的过程就不画了,有需要评论区留言我再出个图文教程。

以上就是例子,运行效果如下:

结束。。。。。。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值