本文的内容虽然用来描述SAP中采购相关的内容但是由于业余,所以很业余。
待检,不清楚是不是SAP中的一个专业术语,反正我们公司的工厂的采购入库,会用到这个概念。
你们公司如果拥有一个工厂进行制造,那么很可能会从其他公司采购一些零件,运到你们公司的工厂里进行加工或者组装。
采购人员向供应商下采购订单,供应商派一辆大货车拉着零件来到你们公司。
大货车司机到了公司门口,就给采购人员打电话:“呆B,你买的货到了,过来点点货。”
然后你们公司的采购人员率领库房的检验人员和大货车司机汇合,一看没问题,采购人员就要登陆SAP系统,对这车货物,对照着单子,进行入库。
入库的过程分为有前后顺序的两步:103入库和105入库。
因为库房分两块:待检库 和 存储库
采购人员确认了大货车司机运来的货物以后,进行103入库,也就是把货物从货车上卸货到 待检库中。
然后采购人员,就该干嘛干嘛去了。
检验人员,这时候接手,按照公司的检验规则,对货物进行抽样检验
如果合格,那么检验人员登陆SAP,进行105入库,也就是把货物从待检库,移动到存储库。
存放在存储库的物料,才能够被工厂的流水线使用。
下面说说具体的编码过程
SAP端进行abap编码,创建Function Group和Function Module,上一片文章已经说过了。
具体代码的逻辑是这样的:
输入参数:采购组+供应商编号+日期+工厂
依据EKGRP和LIFNR查询出采购凭证,然后用采购凭证作为输入参数查询采购凭证的历史
也就是说,某一个采购凭证里面对应了很多条记录,比如你购买了20个螺丝,供应商可能分三次给你,分别给你10个,2个,8个。
这样虽然你的采购凭证上只有一条记录,但是你的采购凭证历史对应了至少三条收货记录,而且是至少。如下图就是EKBE也就是sap中存放采购凭证历史记录的表。
这里面记录的历史,很可能很复杂,比如:
除了分三次给你发货之外,
比如第一次送来的10个货一点问题没有,那么检验人员就会进行105入库,把物料从待检库移动到存储库。
很可能第二次送来的2个货是残次品,你们公司的检验人员给检查出来了,要求直接退货。这时候,虽然采购人员已经103入库,但是检验人员会登陆sap进行104退库,也就是把货物从 待检库中移走。
过了两天,可能发现检验标准变了,需要从新检验,那么检验人员还会再次登陆sap进行106退库,也就是把第一次送来的10个货物,从存储库中,退回待检库。
上述婆婆妈妈的叙述说明,EKBE这个表中的数据很复杂,我们要处理。
我们要获取103+106的数据,减去104减去105,这样计算的结果就是待检库中,这个物料,还剩下几个,也就是待检单上要写的数目。
你可能问,我靠,为什么没有一个字段直接记录一下,待检库中有几个物料不就完了?我怎么知道为什么?反正应该没有这样一个字段。
abap代码怎么处理这部分逻辑,详情就不说了,反正最后会将查询的结果,存放在sap自定义的结构中
也就是function Module的返回值中。
写完abap代码,abaper需要使用事务码se10将代码释放。
这里涉及到sap的基础知识:你们公司的sap系统有几个服务器
通常有三个服务器:
DEV 用于开发,也就是abaper们写代码的地方。
PRD 用于正式生产机,也就是最终代码运行的地方。
QAS 用于校验,也就是,普通低端abaper代码写完se10提交以后,你们公司sap的basis会在生产机上使用事务码stms,将你提交的代码,提交给QAS机验证,然后才能发布到PRD机上。
运行stms事务,长这个样子
点击红框中的小汽车按钮,其实它的学名叫做:F5输入概览
就看到了三个服务器
SAP中写好了Function Module以后,其实可以测试一下上节已经写了测试方法。但是我们如何在sap的事务码上,验证一下呢?
我们需要找一个供应商,查到它的采购组,然后查一查今天的待检情况,找到一个物料,使用MM03看看它的采购tab,可以看到采购组的情况:
那么这个物料的供应商是谁呢?使用事务码ME1M,输入物料号查询一下:
采购组这个概念应该是和物料绑定在一起,而不是和供应商绑定的。