一切开发都来自于需求,需求并不决定开发。当接到需求的时候,一定要进行可行性分析,是否可以进行开发,否则将会严重影响工作效率
1.SAP报表
- List:原始技术,直接输出数据
- ALV:简单到复杂,也可以面向对象
- MS Office Excel:调用excel输出数据
SAP提供多种方式开发报表,这里只介绍常用的ALV报表,其他的大家有兴趣也可以去网上找资料研究一下
2.需求
1)假设有一个客户提出需求开发一个销售订单报表,报表应该包含的字段有:销售订单(so)、行项目、工厂、物料号、库存地点、需求数量、订单数量、创建日期、交货日期等等
2)接到需求进行可行性分析,如果SAP存在可满足需求的报表则不用进行开发或则进行修改;如果不存在则考虑报表开发是否可行,如果能做就准备开发,否则再和客户进行讨论。
3)假设可行性分析OK!
3、如何下手开发
1)从需求入手,分析需求
该报表主要是关于SO,这就是我们需要重点关注的地方
2)熟悉表
报表中的数据是怎么来的?当然并不是凭空产生的,需求中的销售订单、物料号等数据都将取自于数据库。所以得分析需要哪些表。当然你有可能不熟悉SAP中的表,你可以向有经验的同事请教。通过积累,让这些也成为你的东西
T-CODE:se16n可以查询透明表
以下是需要用到的一些表和一些重点关注字段,当然在实际中可能会涉及到更多的表和字段
1.【VBAK:销售凭证】
字段:vbeln(销售凭证)、erdat(创建日期)、ername(创建者)、auart(销售类型)、bstnk(采购订单)、bsark(采购订单类型)、bstdk(采购日期)
2.【VBAP:销售凭证行项目】
字段:vbeln(销售凭证)、posnr(项目)、matnr(物料)、werks(工厂)、lgort(库存地点)、erdat(销售订单创建日期)、PRCTR(利润中心)、aufnr(订单)
3.【VBPA:销售凭证合作伙伴】
字段: vbeln(销售凭证)、posnr(项目)、kunnr(客户)、lifnr(供应商)
3.【MAKT:物料描述】
字段:matnr(物料号)、spras(语言)、maktx(描述)
4.【LIPS:SD凭证交货项目数据】
字段:vbeln(交货)、posnr(项目)、werks(工厂)、lgort(地点)、lfimg(交货数量)
5.【VBKD:销售凭证业务数据】
字段: vbeln(销售凭证)、posnr(项目)、bstkd(PO)、inco1(国际贸易条件)、
6.【VBEP:销售凭证计划行数据】
字段: vbeln(销售凭证)、posnr(项目)、ETENR(计划行)、edatu(交货日期)、ezit(到达时间)、wmeng(订单数量)、lmeng(需求数量)、bmeng(确认的数量)
4、报表开发
1)se38创建程序,创建完会有一行代码
2)自定义输出表结构
REPORT zbsdr_025.
TABLES:vbak,mara,t001w,vbap,vbep.
*--------------类型池定义
TYPE-POOLS: slis.
DATA:t_fieldcat TYPE slis_t_fieldcat_alv,
w_fieldcat TYPE LINE OF slis_t_fieldcat_alv,
t_layout TYPE slis_layout_alv.
*------------------定义输出表结构
TYPES:BEGIN OF ty_result,
vbeln TYPE vbak-vbeln, "so
auart TYPE vbak-auart, "销售类 型
posnr TYPE vbap-posnr, "项目
bstkd TYPE vbkd-bstkd, "po
aufnr TYPE vbap-aufnr,
werks TYPE vbap-werks, "工厂
lgort TYPE vbap-lgort, "库存地点
matnr TYPE vbap-matnr, "物料
maktx TYPE makt-maktx,
kunnr TYPE vbpa-kunnr, "客户
lifnr TYPE vbpa-lifnr, "供应商
* lfimg TYPE lips-lfimg, "交货数量
edatu TYPE vbep-edatu, "计划交货日期
erdat TYPE vbap-erdat, "创建日期
lmeng TYPE vbep-lmeng, "需求数量
wmeng TYPE vbep-wmeng, "订单数量
END OF ty_result.
*-----------------------------定义输出表和工作区域
DATA:t_result TYPE TABLE OF ty_result.
DATA:w_result TYPE ty_result.
(1)类型池:slis 。类型池顾名思义就是个池子,池子里面有很多的类型。开发ALV报表得用到slis里面的类型,所以要引用slis这个类型池
(2)DATA:主要用于声明变量,【TYPE】表示改变量参考的类型。在报表里一般都定义两个东西:内表和工作区。
(3)内表和工作区。内表可以理解为临时表,对内表操作不影响数据库中的表。如果频繁地从数据库中取数会导致效率降低,所以可以用内表临时存放数据;工作区只能存放一条数据,对数据进行处理,一般用于循环中。
DATA:t_fieldcat TYPE slis_t_fieldcat_alv,
w_fieldcat TYPE LINE OF slis_t_fieldcat_alv,
t_layout TYPE slis_layout_alv.
(4) se11查看类型池,如果不知道变量参考的类型可以在这里查找,比如ALV报表字段(我们取名t_fieldcat)
(5)TYPES自定义结构,可以的字段可以来自于不同的表,一般先定义输出表结构(把报表需要展示的字段都放在一个结构里),当然为了后面的操作也要定义内表和工作区,参考的类型就是该结构
DATA:t_result TYPE TABLE OF ty_result.
DATA:w_result TYPE ty_result.