SAP报表简明教程

发布时间 2023-12-15 10:20:08作者: 博客园非著名喷子

SAP报表简明教程

 

一、报表需求,根据物料编码和物料类型 查询报表。用户输入界面要求如下: 

 

二、开始写代码。先进入 TCODE:SE38 ,新建一个程序。 

  

点击创建按钮,如下图: 

 

 

输入标题,写明 此程序的功能 作者,创建时间,点保存,

 

 

输入自己事先建的 开发包, 

 

点击保存按钮, 

 输入传输请求号,如果没有就新建一个。点击 绿色的 按钮。 

进入页面,如图: 

  

开始写代码:

 

定义一个结构体,这个结构体 字段会展示到报表上,字段来源可以多个表。

TYPES:BEGIN OF ty_MARA,  
  MATNR TYPE MARA-MATNR,   
  MTART TYPE MARA-MTART,

  MAKTX TYPE MAKT-MAKTX,
END OF ty_MARA.

DATA lt_mara TYPE TABLE OF ty_MARA.

 

代码解释:

 

 

TYPES:BEGIN OF ty_MARA,   定义结构体的名称

MATNR TYPE MARA-MATNR,    
MATNR 是结构体字段,可以自定义,
END OF ty_MARA.  这是结尾。

DATA lt_mara TYPE TABLE OF ty_MARA.  这句是定义一个 类型是结构体ty_MARA 的内表lt_mara。 

接着写:

 

DATA ls_layout TYPE slis_layout_alv. 定义报表的显示风格
DATA lt_fieldcat TYPE slis_t_fieldcat_alv.存放输出栏位名称的列表
DATA ls_fieldcat TYPE slis_fieldcat_alv.负责整个ALV的全局属性

DEFINE fill.
  CLEAR:ls_fieldcat.
*字段名
  ls_fieldcat-fieldname = &1.
*别名
  ls_fieldcat-seltext_l = &2.
  ls_fieldcat-seltext_m = &2.
  ls_fieldcat-seltext_s = &2.
  ls_fieldcat-outputlen = &3.
  ls_fieldcat-no_zero = &4.
  ls_fieldcat-qfieldname = &5.
  APPEND ls_fieldcat TO lt_fieldcat.
END-OF-DEFINITION.

 SELECT-OPTIONS I6 FOR MARA-MATNR.  "这就是页面显示需要输入的物料

 SELECT-OPTIONS I7 FOR MARA-MTART.  "这就是页面显示需要输入物料类型

*  AND   ERDAT IN I6


INITIALIZATION.  "该事件在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值。


AT SELECTION-SCREEN OUTPUT.  用于屏幕输出时的各屏幕元素值的管控
AT SELECTION-SCREEN.

START-OF-SELECTION. 该事件在单击按钮后触发
  PERFORM GET_DATA.   获取屏幕输入值 的子例程

END-OF-SELECTION.

 

 

 PERFORM frm_display_alv.  定义了一些表格风格样式的子例程


*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_data .
SELECT *
   INTO CORRESPONDING FIELDS OF TABLE @lt_mara
   FROM MARA AS a
   LEFT JOIN  MAKT as b ON  a~MATNR = b~MATNR
*  LEFT JOIN MARD as c on a~MATNR = c~MATNR   已经注释了
*  LEFT JOIN eine as d on c~INFNR = d~INFNR   已经注释了

  where a~MATNR in @I6.
这是sql语句,两个表联合查询 ,物料基本资料表MARA 和物料描述遍,这两个表的 主键都是MATNR,他们用MATNR 关联起来


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  PERFORM frm_set_fieldcat.
  PERFORM frm_set_layout.
  PERFORM frm_set_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat . 作用是 把表头 字段 的英文改成中文
  "fieldname  seltext  outputlen  no_zero
  fill: 'MATNR' '物料' '' '' ''.
  fill: 'MTART' '物料类型' '' '' ''.
  fill: 'MAKTX' '描述' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_layout . 
  CLEAR:ls_layout.
  ls_layout-colwidth_optimize = 'X'.
  ls_layout-window_titlebar = ''.
  ls_layout-zebra = 'X'.
  ls_layout-box_fieldname = 'MATNR'.
  ls_fieldcat-tabname = '采购信息修改记录查询'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-cprog
      i_callback_pf_status_set = ' '
      i_callback_user_command  = ' '
      is_layout                = ls_layout  上面已经定义好了
      it_fieldcat              = lt_fieldcat 上面已经定义好了

    TABLES
      t_outtab                 = lt_mara   这个是已经根据查询条件 查询出的内表
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

  

以上就是代码,激活运行之后显示: 

 

我们发现这里不是中文提示,需要设置文本元素:

ABAP编辑器中:

转到文本元素选择文本    进行维护

 

 

 

 

勾选数据字典参考,然后保存,再激活,文本元素要单独激活。

显示这样就正常了。

 

 

查询结果: