SAP收发存报表程序

来源:互联网 发布:网络大学招生 编辑:程序博客网 时间:2024/05/02 01:39

1.1                                                                 表结构关系

相关数据表

表描述

字段名称

字段描述

EBAN

采购申请抬头表

 

 

EBKN

采购申请项目明细表

 

 

EKKO

采购订单抬头表

 

 

EKPO

采购订单项目明细表

KNTTP

科目设置类型

 

 

 

 

 

 

 

 

 

 

 

 

EKKN

采购订单科目分配数据

EBELN

 

 

 

EBELP

 

 

 

ZEKKN

帐户分配的序列号

 

 

PS_PSP_PNR

工作分解结构元素 (WBS 元素)

 

 

NPLNR

科目分配的网络号

AFKO

生产抬头文件

AUFNR

生产订单号

 

 

PRONR

WBS元素指针

AUFK

生产订单长文本

 

 

 

 

 

 

MSPRH

项目库存:历史(无价值字段)

SOBKZ

特殊库存标识

 

 

PSPNR

工作分解结构元素 (WBS 元素)

 

 

LFGJA

当前期间的会计年度

 

 

LFMON

当前期间 (记帐期间)

 

 

PRLAB

非限制使用的估价的库存

 

 

PRINS

质量在检的库存

 

 

PRSPE

冻结库存

 

 

PREIN

所有限制批次的总计库存

MSPR

项目库存(无价值字段)

 

(当前期存储位置层次项目库存)

 

 

 

 

 

 

 

 

MSSQ

项目库存(无价值字段)

 

(当前期工厂层次项目库存)

 

 

 

 

 

 

 

 

MSSQH

 

 

 

 

 

 

 

QBEW

项目库存的分开评估(仅包含项目库存及估价数据)

 

 

QBEWH

项目库存的分开评估(历史记录)

 

 

EBEW

销售订单库存的分开评估

 

 

EBEWH

销售订单库存的分开评估(历史记录)

 

 

MBEW

常规库存的评估(仅包含常规库存价值数据,不包含项目库存的相关数据)

 

 

MBEWH

常规库存的评估(历史记录)

 

 

 

 

 

 

PRPS

WBS结构数据

POSID

WBS元素

 

 

 

MSEG-PSPNR 搜索此表可得到WBS号码;

PROJ

项目定义结构表

 

 

 

 

 

MSEG-PSPNR,搜索此表可得到项目定义;

WBS元素(24码)找其项目定义,也必须透过指针来寻找项目定义;

 

 

 

 

MKPF

物料凭证抬头数据

 

 

MSEG

物料凭证行项目数据

 

 

 

EKET

采购订单收货

 

 

QINF

物料和供应商的 QM 信息记录

MATNR

物料号

 

 

LIEFERANT

供应商帐户号

 

 

WERK

工厂

 

 

FREI_DAT

下达的有效到期日

 

 

NOINSP

QM 信息记录中的检验控制

MARC

物料工厂数据

QMATV

物料工厂的质检设置是否存在

 

 

 

 

QMAT

检验类型 - 物料参数

MATNR

物料号

 

 

WERKS

工厂

 

 

ART

检验类型

 

 

APA

首选的检验类型

 

 

AFR

处理单位的检验

 

 

AKTIV

检验类型 - 物料合并已激活

 

 

 

 

RBKP

发票抬头数据

 

 

 

 

 

 

RSEG

发票行项目

 

 

 

 

 

 

 

相关的事务代码:

MB52 – 库存综览显示

MB51 – 物料凭证清单

 

 

1.2                                                                 自定义表清单及结构定义

程序处理逻辑內表一:

字段名称

字段描述

 

 

 

 

 

 

 

程序处理逻辑內表二和內表三:

字段名称

字段描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3                                                                 输入/输出数据格式定义

 

源 数 据

SAP系 统

序号

域名

类型

(长度)

描述

字段名

类型

(长度)

描述

转换关系

1)          

 

 

 

 

 

 

 

2)          

 

 

 

 

 

 

 

3)          

 

 

 

 

 

 

 

4)          

 

 

 

 

 

 

 

5)          

 

 

 

 

 

 

 

6)          

 

 

 

 

 

 

 

7)          

 

 

 

 

 

 

 

8)          

 

 

 

 

 

 

 

9)          

 

 

 

 

 

 

 

 


2         输入/输出画面格式设计要求

 

2.1                                                                 报表选择屏幕

以下是本程序的第一个画面:初始化画面

 

名    称

属 性

必输项

(是/否)

默认值

其他特殊要求

参考表字段

 

工厂

(多值)

 

 

权限检查

MSEG-WERKS

存储位置

(多值)

 

 

 

 

WBS元素

(多值)

 

 

 

MSEG- PS_PSP_PNR

物料类型

(多值)

 

 

 

 

物料组

(多值)

 

 

 

 

评估类

(多值)

 

 

 

 

期间(YYYYMM)

(单值)

 

 

 

MKPF- BUDAT之年月

输出明细资料

(单值)

 

N

 

(核选框)

注:

“属性”字段注明: 多选, 单选, 单选钮/, 选框或其他等;

 

 

2.2                                                                 客户化增强功能画面设计

 

 

(以下是格式化画面设计要求)

 

 


 

3         程序处理逻辑说明

 

1.      生成选择输入画面,用户输入参数;检查权限;

 

2.      按用户选择画面参数,选择指定范围的数据,结合如下取数规则,生成报表:

 

3.      取数规则:

 

安装项目定义掩码:X-XX NN NN

制作项目定义掩码:X-X-XX NN NN

序号

字段

取数规则

备注

1)         

物料编号

 

 

2)         

物料描述

MAKT-

 

3)         

单位

MARA-MEINS;

 

4)         

物料类型

MARA-MTART;

 

5)         

单重

如果物料类型为ZFS1或ZFS2,则:

其期初库存及相关交易一定是项目库存相关:如果WBS元素的第四位为 “-”,则取WBS元素第5位~第10位;否则取WBS元素的第3位~第8位 作为 WBS 元素“基本编码”;

 

由 生产订单抬头表中找产品物料编码、WBS元素第5位~第10位 与上述 WBS 元素“基本编码”一致的订单,取其生产订单抬头文本的第四行,如果为零,再找下一个生产订单直到取值非零为止;

如果最终由生产订单中不能取值,则取 采购订单行项目:

由EKKN/EKKO表中找:物料编码、WBS元素第5位~第10位 与上述 WBS 元素“基本编码”一致的采购订单,取其采购该项目文本的第四行(第一页标签),如果为零,再找下一个采购订单直到取值非零为止;

最终找不到,则置零;

如果是其他物料类型,则取物料主数据中基本数据视图之毛重;

 

6)         

物料组

MARA-MATKL;

 

7)         

商务分类

如果物料类型为ZFS1或ZFS2,则由物料号码+WBS元素找任一生产订单文本的第六行,压缩空格后取前15位;

可在取单重时同时取商务分类:生产订单文本的第六行或采购订单相应文本标签下的第六行;

如果物料类型为其他,则置空;

 

8)         

评估类

由MBEWH/QBEWH中取(分别对于常规库存和项目库存);

 

9)         

工厂

 

 

10)      

WBS元素

 

 

11)      

项目定义

 

 

12)      

项目描述

 

 

13)      

期初数量

 

期初金额

对于常规库存,按用户选取的物料/工厂/存储位置/评估类型范围,按如下规则取期初库存数据:

1) 截取报表期间的的年份、月份,按“物料”+“工厂“+ “仓库”+“年份”+“月份-1” 读取MARDH 表的数据. 

    注:“月份-1”是指报表期间的前一个月

1.1)如果读取成功,保存至“上月期末库存临时字段”,

1.2)如果读取不成功,再从MARDH找“=月份”或“>月份且最接近的纪录”,

1.2.1)如果找到了,就保存至“上月期末库存临时字段”

1.2.2)如果找不到,则取MARD的当前库存保存至”上月期末库存临时字段”(非限制库存/质检库存);

参照上述规则,按物料/工厂/期间年份/期间月份,由表MBEWH/MBEW中取期初单价数据;

 

对于项目库存,按用户选取的物料/工厂/存储位置/WBS元素范围,由表MSPR/MSPRH中期初数量数据,由QBEW/QBEWH中取单价数据(VERPR-移动平均价);

 

按前一字段取值规则得到的数量*单价即为期初金额;

 

14)      

收入数量

收入金额

以下取第一部分:由表MSEG中按移动类型取物料编号不为空的记录:

收入数量&收入金额: 由表MKPF/MSEG中按选择的数据范围,取以下移动类型记录其对应字段 MSEG-MENGE/DMBTR的值,如果MSEG- SHKZG 为 “S”,则记为本字段的正项,如果为 “H”,则为本字段的负项: 移动类型范围为 100 ~ 199 , 561/562, 501/502, 921/922, 301~499,541~544 ;

 

对于发票确认对收入金额的影响部分取值规则,请参照 “发出数量”字段的取值说明。

 

15)      

发出数量

发出金额

由MSEG中取物料编号非空的记录:

收入数量&收入金额: 由表MKPF/MSEG中按选择的数据范围,取以下移动类型记录其对应字段 MSEG-MENGE/DMBTR的值,如果MSEG- SHKZG 为 “S”,则记为本字段的负项,如果为 “H”,则为本字段的正项: 移动类型范围为 201 ~ 299 , 551/552, 645/646, 901~914 ,  923/924 , 301~499, 541~544 ;

 

第二部分

还要取移动类型为101/102/122/161/162, 物料号非空,但MSEG- KZVBR字段为 “V”的记录(对应的MSEG-KNTTP= “K/P/S/R”之一) :其数量和价值分别累加到相应的 “物料/工厂(可能还有WBS元素)” 记录的 “发出数量/发出金额”中, 如果MSEG- SHKZG 为 “S”,则记为本字段的正项,如果为 “H”,则为本字段的负项;

 

以下取第三部分(由发票校验的差异调整部分,RSEG- KNTTP =K/P/R/S 的记录):

由RBKP取当期的所有发票凭证号码。由RBKP-BELNR找表RSEG:如果RSEG-KNTTP 为 “K/P/R/S”之一,且RSEG-MATNR 非空且RSEG-EFKOR 非空,则说明发票确认有对直接采购消耗的存货物资的金额调整记账,但此部分的调整记账,是同时反映在收入金额和(消耗)发出金额上,没有经过库存帐。所以以下继续处理取得的值必须要同时累加到 “收入金额”和 “发出金额”上,但收入数量和发出数量不变更(发票交易不会带来数量变化):

由 RSEG- BELNR + RSEG- GJAHR 搜索 BKPF-BWKEY, 取BKPF- BELNR(会计凭证号码);由 BKPF-BELNR 取表BSEG 中 BSEG-MATR = RSEG-MANR .AND. BSEG- EBELN = RSEG-EBELN .AND. BSEG-EBELP=RSEG-EBELP 的记录,如果BSEG- SHKZG = “S”则取 BSEG- DMBTR 的值为调整金额暂存值;如果BSEG- SHKZG = “H”: BSEG- DMBTR 的负值为调整金额暂存值;

 

如果RSEG-KNTTP = “Q” ,或为空,则舍弃此 “调整金额暂存值”;否则,分别将此金额累加到 “收入金额”和“发出金额”中(对应关键字段:物料+工厂(或者加WBS元素));

 

 

16)      

盘点数量

按指定期间和数据范围,由MKPF/MSEG中取移动类型为 “701/702/711/712” 的交易记录字段MSEG-MENGE/ DMBTR(基本单位数量/本位币金额);

如果MSEG- SHKZG 为 “S”,则记为本字段的正项,如果为 “H”,则为本字段的负项;

 

17)      

盘点金额

参照前一字段的说明;

 

18)      

调整金额

库存价值调整:

不对应库存交易,对应发票确认时因采购订单价格与发票价格差异导致的对库存金额的调整(此时库存数量不变), 或者调整库存物料的单价时也导致库存金额变化;

库存价值调整金额,仅当按公司出具报表时,该字段值才有效。因为系统没有记录各存储位置的价格更改和价值更新(价值更改是在评估范围层次或WBS元素层次有效);

以下是第一部分:

单价修改的凭证上 "价值修改"可能对应: 存货价值的改变及差异的改变: 无论是按S或V计价, 只要是价格改变, 存货价值一定是变化的.

取MLCR-BDATJ/POPER为报告期间的所有记录,得到凭证号+会计年度+项目号(MLCR-BELNR/KJAHR/POSNR)+存货价值修改(MLCR-SALK3);

再按上述 三个字段(MLCR-BELNR/KJAHR/POSNR) 取 表 MLIT-MATNR/BWKEY(评估范围)/WBS号;

如果上述过程由MLCR中取得的金额为零(SALK3),则以相同的(MLCR-BELNR /KJAHR /POSNR) 及前一期间再取MLCR-SALK3, 以该值置换符号(乘以 -1),则得到报告期间的库存调整金额;

单价调整:可能针对常规库存或项目库存。取值时要将物料号码及WBS元素和工厂代码一同取值;

         以下是第二部分:

由表RSEG/RBKP中取价值修改记录。

由表RBKP中取当前报表期间的发票凭证抬头数据记录,由此表的凭证号找表RSEG-STOCK POSTING 非零的记录,得到 RSEG-WERKS/RSEG-MATNR 的库存价值变更。如果RSEG-KNTTP为空,则累加到此报表的工厂+物料的 “调整金额”中(该字段的值有正项,也可能有负项,直接累加到“调整金额”中);如果RSEG-KNTTP= “Q”,则该调整金额属于项目库存金额的调整,必须由RSEG-EBELN 和 RSEG-EBELP(采购订单号码及行项目号码)找PO的行项目的WBS元素号码,而将该 RSEG-STOCK POSTING 的金额写入 “工厂+物料+WBS元素” 的值中;

 

 

19)      

期末数量

=期初数量+收入数量-发出数量

 

20)      

期末金额

=期初金额+收入金额-发出金额+调整金额;

 

21)      

差异数量

=期末数量-(画面输入期间的下一期间)期初数量(按期初数量取数规则得到)

 

22)      

差异金额

=期末金额-(画面输入期间的下一期间)期初金额(按期初金额取值规则得到)

 

23)     

构件吨位

单重*期末数量 / 1000

 

 

 

4. 如果用户未输入存储位置,则表示是在工厂层次出具报表,取报表记录关键字为: 工厂代码/物料编码/WBS元素/商务分类(物料组、物料类型依附于该三个键值),所有数量和金额按此键值汇总; 同时对于 “收入数量”“收入金额”“发出数量”“发出金额”字段,不统计移动类型 311~316;

5. 如果用户输入了存储位置,则取值表字段 “工厂代码/存储位置/物料编码/WBS元素/商务分类”,相应的取数结果均按物料+工厂+存储位置+WBS元素+商务分类层次累计;对于 “收入数量”“收入金额”“发出数量”“发出金额”字段,所统计的移动类型无限制;

6. 最终输出方式:

如果用户在画面上选择了 “输出明细资料”(Y”,则首先按取数规则表的字段格式输出清单;

否则不执行明细清单资料的输出;

接下来,在同一清单上,再附加如下分类统计表:

除了列出上表格式的按料号的明细外,还需要列出如下分类小计报表:

附加清单一:按WBS元素分类汇总的收发存明细表(仅对WBS元素非空的记录进行小计并分类汇总输出);

附加清单二:按商务分类汇总的收发存明细表(仅列出物料类型为 “ZFS1/ZF2”的每一商务分类的小计);

附加清单三:按商务分类+项目定义分类汇总的收发存明细表;

附加清单四:按评估类分类汇总的收发存明细资料;

 

请依次输出。相应清单字段如下:

 

 

 

附加清单一

附加清单二

附加清单三

附加清单四

1)         

物料编号

 

 

 

 

2)         

物料描述

 

 

 

 

3)         

单位

 

 

 

 

4)         

物料类型

 

 

 

 

5)         

单重

 

 

 

 

6)         

物料组

 

 

 

 

7)         

商务分类

 

X

X

 

8)         

评估类

 

 

 

X

9)         

工厂

 

 

 

 

10)      

WBS元素

X

 

 

 

11)      

项目定义

 

 

X

 

12)      

项目描述

 

 

O

 

取数规则表中的其余字段,均要输出;