SAP报表简明教程
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编辑器中:
转到→文本元素→选择文本 进行维护
勾选数据字典参考,然后保存,再激活,文本元素要单独激活。
显示这样就正常了。
查询结果: