SAP报表简明教程

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

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

点击创建按钮,如下图:

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

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

点击保存按钮,

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

进入页面,如图:

开始写代码:

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

TYPES:BEGINOFty_MARA,
MATNRTYPEMARA-MATNR,
MTARTTYPEMARA-MTART,

MAKTXTYPEMAKT-MAKTX,
ENDOFty_MARA.

DATAlt_maraTYPETABLEOFty_MARA.

代码解释:

TYPES:BEGINOFty_MARA,定义结构体的名称

MATNRTYPEMARA-MATNR,
MATNR是结构体字段,可以自定义,
ENDOFty_MARA.这是结尾。

DATAlt_maraTYPETABLEOFty_MARA.这句是定义一个 类型是结构体ty_MARA的内表lt_mara。

接着写:

DATAls_layoutTYPEslis_layout_alv.定义报表的显示风格
DATAlt_fieldcatTYPEslis_t_fieldcat_alv.存放输出栏位名称的列表
DATAls_fieldcatTYPEslis_fieldcat_alv.负责整个ALV的全局属性

DEFINEfill.
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.
APPENDls_fieldcatTOlt_fieldcat.
END-OF-DEFINITION.

SELECT-OPTIONSI6FORMARA-MATNR.这就是页面显示需要输入的物料

SELECT-OPTIONSI7FORMARA-MTART.这就是页面显示需要输入物料类型

*ANDERDATINI6

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

ATSELECTION-SCREENOUTPUT.用于屏幕输出时的各屏幕元素值的管控
ATSELECTION-SCREEN.

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

END-OF-SELECTION.

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

*&———————————————————————*
*&FormGET_DATA
*&———————————————————————*
*&text
*&———————————————————————*
*&–>p1text
*&<–p2text
*&———————————————————————*
FORMget_data.
SELECT*
INTOCORRESPONDINGFIELDSOFTABLE@lt_mara
FROMMARAASa
LEFTJOINMAKTasbONa~MATNR=b~MATNR
*LEFTJOINMARDascona~MATNR=c~MATNR已经注释了
*LEFTJOINeineasdonc~INFNR=d~INFNR已经注释了

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

ENDFORM.
*&———————————————————————*
*&Formfrm_display_alv
*&———————————————————————*
*&text
*&———————————————————————*
*&–>p1text
*&<–p2text
*&———————————————————————*
FORMfrm_display_alv.
PERFORMfrm_set_fieldcat.
PERFORMfrm_set_layout.
PERFORMfrm_set_alv.
ENDFORM.
*&———————————————————————*
*&Formfrm_set_fieldcat
*&———————————————————————*
*&text
*&———————————————————————*
*&–>p1text
*&<–p2text
*&———————————————————————*
FORMfrm_set_fieldcat.作用是 把表头 字段 的英文改成中文
“fieldnameseltextoutputlenno_zero
fill:’MATNR”物料”””’.
fill:’MTART”物料类型”””’.
fill:’MAKTX”描述”””’.
ENDFORM.
*&———————————————————————*
*&Formfrm_set_layout
*&———————————————————————*
*&text
*&———————————————————————*
*&–>p1text
*&<–p2text
*&———————————————————————*
FORMfrm_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.
*&———————————————————————*
*&Formfrm_set_alv
*&———————————————————————*
*&text
*&———————————————————————*
*&–>p1text
*&<–p2text
*&———————————————————————*
FORMfrm_set_alv.
CALLFUNCTION’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.
IFsy-subrc0.
*Implementsuitableerrorhandlinghere
ENDIF.
ENDFORM.

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

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

ABAP编辑器中:

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

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

显示这样就正常了。

查询结果: