SAP ABAP编程日记二报表的开发

简介:本人是一个刚入行的学生,暂时担任ABAP开发工作。因为我之前没有接触过ABAP编程,对此比较陌生,所以此博客用于自己的学习记录,也希望给观看此博客的人提供一些帮助。

上次我们创建了ABAP第一个程序,这次我们有针对性对于报表的开发进行学习

一、编写之间的准备

在编写程序的时候,为了让我们的程序有更好的可读性,我一般会将程序分为几个include程序,然后将代码模板存下

点击下面这个黄色书页,出现以下界面

这里面有一些设置,读者可以自己尝试设置,这里不过多赘述,这里就简单介绍代码模板的设置,下面介绍一些我自己使用的代码模板。

zin
*&------------------------------------------------------------------------------*
*&  INCLUDE           %Document%_TOP
*&------------------------------------------------------------------------------*
INCLUDE %Document%_TOP.

*&------------------------------------------------------------------------------*
*&  INCLUDE            %Document%_SCREEN
*&------------------------------------------------------------------------------*
INCLUDE %Document%_SCR.

*&------------------------------------------------------------------------------*
*&  INCLUDE       %Document%_MAIN
*&------------------------------------------------------------------------------*
INCLUDE %Document%_MAIN.

*&------------------------------------------------------------------------------*
*&  INCLUDE            %Document%_F01
*&------------------------------------------------------------------------------*
INCLUDE %Document%_F01.

其中%Document%代表的就是你自己程序的名称,这个代号在你输入的时候就会自动变成你的程序名称。

下面是一些我使用的代码模板

zalv
*&---------------------------------------------------------------------*
*&  ALV
*&---------------------------------------------------------------------*
DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat,
      gs_layout   TYPE lvc_s_layo,
      gt_event    TYPE slis_t_event,
      gs_event    LIKE LINE OF gt_event,
      gs_grid_set TYPE lvc_s_glay,
      gv_repid    TYPE sy-repid.


zdisplay
CLEAR: gt_fieldcat[].
  PERFORM frm_create_fieldcat.
  gv_repid = sy-repid.
  gs_layout-cwidth_opt = 'X' .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = gv_repid
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat[]
      it_events                = gt_event[]
      i_grid_settings          = gs_grid_set
      i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_data
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.


zfield
DATA:lv_pos  TYPE i.

  DEFINE mrc01.
    CLEAR gs_fieldcat .
    lv_pos = lv_pos + 1.
    gs_fieldcat-col_pos   = lv_pos.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-scrtext_l = &2.
    gs_fieldcat-outputlen = &3.
    IF &1 = 'BOX'.
      gs_fieldcat-checkbox = 'X'.
      gs_fieldcat-edit = 'X'.
    ENDIF.
    APPEND gs_fieldcat TO gt_fieldcat .
  END-OF-DEFINITION.

  CLEAR:gt_fieldcat[].

  mrc01 'BOX'               '选择'                   ' '.


zmain
INITIALIZATION.

*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .

*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_data_get .
*&---------------------------------------------------------------------*
*& END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM frm_data_display .


zuc
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_set_status USING extab TYPE slis_t_extab.

  SET PF-STATUS 'S001' EXCLUDING extab.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm     LIKE sy-ucomm
                            rs_selfield TYPE slis_selfield.

  DATA:lo_grid  TYPE REF TO cl_gui_alv_grid,
       lv_error TYPE c.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  CALL METHOD lo_grid->check_changed_data.

  CASE r_ucomm.
    WHEN: 'BACK' OR 'CANC' OR 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN: 'ZPOST'.
*      PERFORM frm_data_post .
* *     PERFORM frm_data_get .
*    WHEN: 'SALL'.
*      PERFORM frm_data_select USING 'X' .
*    WHEN: 'DALL'.
*      PERFORM frm_data_select USING '' .
    WHEN OTHERS .
  ENDCASE.
  rs_selfield-refresh = 'X'.
ENDFORM.


zxzpm
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.

SELECTION-SCREEN END OF BLOCK bk1.

这几个代码的功能我们先按下不表,等以后写到这自然就浮现出来了。

二、报表程序的开发

在处理完代码模板后,输入ZIN,系统就会跳出输入提示,然后我们按下Tab键,代码就会全部出现,如下。

 然后我们需要添加每个包含文件,双击每个INCLUDE文件,创建INCLUDE文件,系统会提示是否创建文件,然后他会跳转去INCLUDE文件,,就会出现是否保存原来的文件,最后会让你给这个INCLUDE文件选择一个包,选择与上篇一样的即可。

然后退出

点击绿色按钮就是回退到上次操作的地方,黄色按钮是回退到程序开始的地方,红色是注销按钮,注销此次登录。

依次将每个INCLUDE文件建好,接下来介绍各个INCLUDE文件的作用。

top:就是将定义的TYPE和DATA放在这里,还有一些需要用到的表也放在这里。例如

关于TYPE和DATA一些相关知识,可以去下面这个链接去继续学习ABAP关键字TYPES和DATA总结 - xlmig - 博客园 (cnblogs.com)

scr:屏幕选择,用户可以通过屏幕选择输入筛选条件

关于选择屏幕的知识,大家可以参考ABAP选择屏幕_abap 各种屏幕-CSDN博客

main:这里是函数主要功能的实现,对于简单的报表程序来说,我们主要在这里查找数据并把它输出到屏幕上

进入INCLUDE文件,输入ZMAIN

再双击data_get创建一个PERFORM文件,放在F01下面

在这个里面写select语句

关于display的部分我会再写一个博客进行详细的说明,还有关于语法方面,我会使用一个实际的报表程序进行讲解,可能会不准确,希望和大家一起讨论学习!

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值