SAP增强实现批次自动编号

更新时间:2024-06-20 08:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

批次编号处理

批次编号范围(将采用批次管理的物料分为两种,1种是自制件(E),1种是采购件(F),对于既有自制、又有采购的,根据实际状况处理) ? ?

对于自制件,批次编号跟生产订单编号一致(使用出口来实现) 对于外购件,批次编号采用6位日期+3位流水码(使用出口来实现)

内部编号范围分配目前逻辑如下,根据物料的生产方式

?

F->外购件-> 批次编号采用6位日期+3位流水号

o 对于1个物料来说,如果批次号码内部给号而不是手工输入,那么流水码从

001直到999,每次货物移动,流水码自动加1

o 对于不同的物料来说,比如之前有个物料使用了流水码180111000如果

MCH1物料+流水码查询不到记录,那么此物料仍然可以使用流水码180111000

? ?

E->外购件-> 批次编号采用生产订单编号 X->判断当前的生产订单编号是否为空

o 生产订单编号为空 -> 6位日期+3位流水号

o 生产订单编号不为空-> 生产订单编号(生产订单编号采用10位,前两位

为工厂代码)

首先对于增强说一下我的理解:

用户出口SAPLV01Z是用户自动分配批次号码(内部给号的),并且只有在配置了

基于移动类型生成新批次,并且设置成B,此出口才会被触发,所有的配置B的移动类型,在用MIGO进行货物移动时,都会触发增强的逻辑,并且增强逻辑只对(没有输入批次号码)这种情况下才生效。

集团配置的自动创建批次移动类型为101、103、501

对于批次,整个集团的规则是,批次号码均是自动生成,只有特殊情况才可以手工输入(561初始化,以及盘盈701、711):

只有收货(101、103、501-仅限采购件),才能自动产生新批次(设置成B-Automatic/Manual

and check in USER EXIT),其他的移动类型都要设成G-no creation

对于消耗的移动类型(201、261、281、601、541、543)批次都是根据批次确定规则(FIFO&剩余货架寿命),自动排出批次(在migo里面也要配置增强,如果输入的批次号不在MCH1或者MCHA中,会报错),且不允许产生新批次->全部设成G-no creation,且需要配置批次确定规则

对于移库类(241/242、301/302、303/304、305/306、309/310、311/312、313/314、315/316、344/343、411/412、413/414、415/416、551/552。。)如果物料有用到批次管理,会检查输入的批次是否存在,如果不存在,会报错,也是在MIGO增强里面做检查,因为移库可能没法使用FIFO规则。且不允许产生新批次->全部设成G-no creation,且不需要配置批次确定规则

对于561,并不设置内部检查规则(即采用默认配置),对于561初始化库存时,批次可以手工输入

对于701(盘盈),理论上,所有的盘盈并不会产生新批次,如果真的产生新批次的物料,批次可以手工输入,即701也采用默认配置

CMOD创建增强项目

注:EXIT_SAPLV01Z_001 & EXIT_SAPLV01Z_002适用于内部给号的情况

对出口EXIT_SAPLV01Z_002加代码

源代码

*&---------------------------------------------------------------------* *& Include ZXVBZU02 *& 内部编号范围分配目前逻辑如下 *& 根据物料的生产方式

*& F->外购件-> 批次编号采用6位日期+3位流水号

*& 流水号含义->对于1个物料来说,如果批次号码内部给号而不是手工输入,那么流水码从001直到999,

*& 每次货物移动,流水码自动加1

*& ->对于不同的物料来说,比如之前有个物料使用了流水码180111001如果MCH1物料+流水码

*& 查询不到记录,那么此物料仍然可以使用流水码180111001 *& E->外购件-> 批次编号采用生产订单编号 *& X->判断当前的生产订单编号是否为空

*& 生产订单编号为空 -> 6位日期+3位流水号 *& 生产订单编号不为空-> 生产订单编号

*&---------------------------------------------------------------------* TABLES:zbatch,mch1,marc.

DATA tab01 LIKE TABLE OF zbatch WITH HEADER LINE. DATA batch_number TYPE mch1-charg.

DATA pre_flow_number(3) TYPE n. \前一个流水号 DATA cur_flow_number(3) TYPE n. \当前流水号 DATA zbeskz TYPE marc-beskz. \采购方式 CLEAR batch_number. \批次号码 CLEAR pre_flow_number. CLEAR cur_flow_number. CLEAR tab01.

\首先获取物料的采购方式

SELECT SINGLE marc~beskz INTO zbeskz FROM marc WHERE marc~werks = x_bncom-werks AND marc~matnr = x_bncom-matnr.

\首先获取当前日期,当前物料下,该物料的最大批次号 CASE zbeskz.

WHEN 'F'. \外购件,使用流水码的批次号

SELECT MAX( charg ) INTO batch_number FROM MCH1 WHERE matnr = x_bncom-matnr AND ERSDA = sy-datum.

IF batch_number IS INITIAL. \如果当天的批次号不存在,那么当前流水号为001

cur_flow_number = '001'. ELSE.

pre_flow_number = batch_number+6(3). \如果当天的批次存在,那么前一个流水号=取到的流水号

cur_flow_number = pre_flow_number + 1. \当前流水号=前一个流水号+1 ENDIF.

\将此次的批次信息插入到表ZBATCH中

CONCATENATE sy-datum+2(6) cur_flow_number INTO batch_number. \当前日期后6位+当前流水号作为当前的批次号码 WHEN 'E'.

IF x_bncom-bwart <> '101' or x_bncom-bwart <> '103'. MESSAGE e001(00) WITH 'Please input batch number!'. ELSE.

batch_number = x_bncom-aufnr. ENDIF. WHEN 'X'.

IF x_bncom-aufnr IS INITIAL.

SELECT MAX( charg ) INTO batch_number FROM zbatch WHERE matnr = x_bncom-matnr AND cdate = sy-datum.

IF batch_number IS INITIAL. \如果当天的批次号不存在,那么当前流水号为001

cur_flow_number = '001'. ELSE.

pre_flow_number = batch_number+6(3). \如果当天的批次存在,那么前一个流水号=取到的流水号

cur_flow_number = pre_flow_number + 1. \当前流水号=前一个流水号+1 ENDIF.

\将此次的批次信息插入到表ZBATCH中

CONCATENATE sy-datum+2(6) cur_flow_number INTO batch_number. \当前日期后6位+当前流水号作为当前的批次号码 ELSE.

IF x_bncom-bwart <> '101' or x_bncom-bwart <> '103'.

MESSAGE e001(00) WITH 'Please input batch number! Finished Goods auto batch numer only allowed for mvt 101'. ELSE.

batch_number = x_bncom-aufnr. ENDIF. ENDIF. ENDCASE.

* tab01-charg = batch_number. * tab01-matnr = x_bncom-matnr. * tab01-cdate = sy-datum. * tab01-werks = x_bncom-werks. * APPEND tab01. *

* IF sy-ucomm = 'OK_POST1'. \只有post才会将数据写入到表ZBATCH中 * INSERT zbatch FROM tab01. * COMMIT WORK. * ENDIF.

new_charg = batch_number.

测试验证: 采购件

根据当前系统日期带出批次编号,测试通过

本文来源:https://www.bwwdw.com/article/mw13.html

Top