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