SAP ABAP学习--增加自定义按钮

    今天在金工的帮助之下完成了欠料分析报表的开发。现在记录一下怎样在ABAP的报表中加入自定义按钮。以加入刷新按钮为例:
1.WRITE报表:
这个比较简单:
(1)先要加入一句set pf-status 'TOOLBAR'.(这句加在哪里好像问题不大,我就加在了end-of-selection.之后了)
(2)双击TLLOBAR进入,定义标题栏。这里我将刷新按钮 返回值定义为;REFR; 这里其实和直接进入SE41的效果是一样的。
(3)然后还要加一个user-command语句。标明这个按钮的作用
   at user-command.
   case sy-ucomm.
      when 'REFR'.
      CLEAR hd_itab.
      CLEAR hd_itab[].
      perform getdata.
      PERFORM DATA_OUTPUT.
    ENDCASE.
 
2.ALV格式的
要有三个地方改动,这里将金工的小报表(试验程序贴上来了,我编的那个欠料情况表太长了,又慢,就算了吧
*&---------------------------------------------------------------------*
*& Report  Z_TEST_CLASS
*& 描  述: 自定义按钮
*&---------------------------------------------------------------------*
*& 日  期:
*& 作  者:
*&---------------------------------------------------------------------*
REPORT  Z_TEST_CLASS1.
tables: makt.
selection-screen begin of block b1.
  select-options:
    se_matnr for makt-matnr.
selection-screen end of block b1.
type-pools:
  slis.
data:
  i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息)
  i_layout type slis_layout_alv,           "alv格式
  i_fieldcat type slis_fieldcat_alv,       "
  i_events type slis_t_event,              "alv事件
  w_events like line of i_events,
  i_list_comments type slis_t_listheader,  "alv表单标题区域设置
  w_list_comments like line of i_list_comments,
  w_repid like sy-repid.                   "当前程序
data:
  begin of itab occurs 0,
    matnr like rseg-matnr,
    maktx like makt-maktx,
  end of itab.
start-of-selection.
  select matnr maktx from makt into table itab.
end-of-selection.
    perform display_data.
*&---------------------------------------------------------------------*
*&      Form  fields_build 设置报表显示列属性信息
*&---------------------------------------------------------------------*
form fields_build .
  refresh i_fieldcat_alv.
  clear i_fieldcat.
  data colnum type i.
  colnum = colnum + 1.
  i_fieldcat-col_pos = colnum.
  i_fieldcat-fieldname = 'MATNR'.
  i_fieldcat-seltext_s = '物料编号'.
  i_fieldcat-seltext_m = '物料编号'.
  i_fieldcat-seltext_l = '物料编号'.
  i_fieldcat-outputlen = 10.
  i_fieldcat-key = 'X'.
  append i_fieldcat to i_fieldcat_alv.
  clear i_fieldcat.
  colnum = colnum + 1.
  i_fieldcat-col_pos = colnum.
  i_fieldcat-fieldname = 'MAKTX'.
  i_fieldcat-seltext_s = '物料描述'.
  i_fieldcat-seltext_m = '物料描述'.
  i_fieldcat-seltext_l = '物料描述'.
  i_fieldcat-outputlen = 20.
  append i_fieldcat to i_fieldcat_alv.
  clear i_fieldcat.
endform.
*&---------------------------------------------------------------------*
*&      Form  events_build
*&---------------------------------------------------------------------*
form events_build .
  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE           = 0
    IMPORTING
      ET_EVENTS             = i_events .
*  read table i_events with key name = 'TOP_OF_PAGE'
*                      into w_events.
*  if sy-subrc = 0.
*    move 'ALV_TOP_OF_PAGE' to w_events-form.
*    modify i_events from w_events index sy-tabix.
*  endif.
  READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.
  IF SY-SUBRC EQ 0.
    w_events-name = 'USER_COMMAND'.
    MODIFY i_events FROM w_events index sy-tabix.
  ENDIF.
endform.                    " events_build
*&---------------------------------------------------------------------*
*&      Form  display_data 显示报表内容
*&---------------------------------------------------------------------*
form display_data .
  perform layout_build .
  perform events_build .
  perform fields_build .
  call function 'REUSE_ALV_GRID_DISPLAY'
   exporting
      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'                               “这两个地方是一定要加上的
     i_callback_pf_status_set          = 'PF_STATUS_SET'                                            调用用户事件和按钮事件
     i_callback_program                = w_repid
     is_layout                         = i_layout
     it_fieldcat                       = i_fieldcat_alv[]
     it_events                         = i_events[]
     " i_grid_title                      = ''
     I_SAVE                            = 'A'
    tables
      t_outtab                          = itab.
  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.                    " display_data
*&---------------------------------------------------------------------*
*&      Form  layout_build 设置alv显示格式和属性
*&---------------------------------------------------------------------*
form layout_build .
  i_layout-zebra = 'X'.
*  i_layout-detail_popup = 'X'.
  i_layout-no_vline = ' '.
  i_layout-colwidth_optimize = 'X'.
*  i_layout-detail_initial_lines = 'X'.
*  i_layout-detail_titlebar = '详细内容'.
*  i_layout-f2code = '&ETA'.
  i_layout-no_colhead = ' '.
  w_repid = sy-repid.
endform. "layout_build
*---------------------------------
FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab.                                ”调用的FORM
  set pf-status 'TEST1'.
endform.
*&--------------------------------------------------------------------*
*&      Form user_command
*&--------------------------------------------------------------------*
form user_command using i_ucomm like sy-ucomm                    “这段程序表明了自定义按钮是做什么用的。可以在SE41
                        is_selfield type slis_selfield.                                         中自定义返回值
  case i_ucomm.
    when '&IC1'.
      message i888(sabapdocu) with '双击事件'.
    when '&REFRE'.
      message i888(sabapdocu) with '刷新事件'.
      is_selfield-refresh = 'X'.
      clear itab[].
  endcase.
endform. "user_command

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP ABAP ALV 报表是一种基于 ABAP 编程语言的高级列表工具,用于生成和显示数据报表。如果你想要为 ALV 报表添加自定义校验逻辑,可以按照以下步骤进行修改: 1. 首先,创建一个包含自定义校验逻辑的 ABAP 函数模块。该函数模块可用于对 ALV 报表的数据进行验证。在函数模块中,你可以定义各种校验规则和逻辑,例如检查数据的完整性、一致性或合法性。 2. 在 ABAP 程序中,使用 ALV 报表时,可以在数据填充之前或之后调用自定义函数模块。例如,你可以使用 FUNCTION MODULE_BEFORE_OUTPUT 或 FUNCTION MODULE_AFTER_OUTPUT 事件处理程序,在 ALV 表的输出之前或之后执行自定义校验逻辑。 3. 在这些事件处理程序中,可以调用定义的自定义函数模块来执行数据校验。通过将 ALV 表的数据传递给这些函数模块,你可以对数据进行校验,并根据校验结果决定是否允许数据的修改。如果校验失败,可以通过向用户显示错误消息、高亮显示错误行或阻止修改操作来提醒用户。 4. 在 ALV 报表的输出或修改事件中,你还可以根据需要调整和修改 ALV 表的格式和显示。例如,你可以通过修改字段属性、调整列宽或添加新的 ALV 功能按钮来满足特定的需求。 通过以上步骤,你可以在 SAP ABAP ALV 报表中成功添加自定义校验逻辑。这将提高报表数据的质量和准确性,并为用户提供更好的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值