前言
相信公司都会有盘点的需求,或者类似锁定库存地点,控制物料不能进出的的需求,本人进行过很多尝试,例如:WM的盘点凭证锁定库存地点,通过OKP1锁定过账等等,这些方式都能实现,但很明显有很多缺陷,WM盘点凭证操作复杂,很多公司也并没有使用WM模块;OKP1是锁定全局,一般是月结时才会使用,不够灵活。本文介绍一种简单方式来实现锁定库存地点,限制此库存地点的物料进出/变动。
提示:以下是本篇文章正文内容,下面案例可供参考
一、物料进出的本质是什么?
在SAP中,物料的消耗,转储,调拨,报废,进货等的本质其实是通过物料凭证来实现的,那我们就可以从物料凭证方面去考虑限制它的产生来达到锁定库存地点的目的。
二、实现步骤
1.物料凭证增强
这里要使用到一个比较简单的增强:CMOD:MBCF0002的组件EXIT_SAPMM07M_001
这个增强点,在MIGO中进行检查和过账时都会进入。
代码如下(示例):
*数据定义
DATA: lv_msgv1 TYPE sy-msgv1,
lv_msgv2 TYPE sy-msgv2.
*根据过账的收发货库存地点判断自建表中的库存地点是否已锁定
SELECT SINGLE zflag INTO @DATA(gs_flagf) FROM ztlocklocation WHERE lgort = @i_mseg-lgort."发货库存地
SELECT SINGLE zflag INTO @DATA(gs_flags) FROM ztlocklocation WHERE lgort = @i_mseg-umlgo."收货库存地
IF gs_flagf EQ 'X' OR gs_flags EQ 'X'."有锁定标识,则提示不能产生物料凭证
IF gs_flagf EQ 'X'.
lv_msgv1 = '发货库存地点:' && i_mseg-lgort.
ELSE.
lv_msgv1 = '收货库存地点:' && i_mseg-umlgo.
ENDIF.
lv_msgv2 = lv_msgv1 && ' 已被锁定,不能生成物料凭证!'.
MESSAGE e346(wz) WITH lv_msgv2.
ENDIF.
2.自建表结构
建自建表时,维护表生成器创建SM30的表维护,便于将维护视图分配事务代码进行权限管理。
3.分配事务代码
TCode:SE93,选择参数事务
跳过初始屏幕。
添加属性字段VIEWNAME,值为SM30中的视图名称
UPDATE为X表示默认是修改界面,SHOW为X是默认显示界面
维护新条目,打勾表示锁定该库存地点
功能测试
MIGO,进行物料移动,收货库存地是1421
点击检查或过账,收到错误提示:收货库存地点1421已锁定.
以上
不妥之处欢迎留言指正。手动笑脸
欢迎关注公众号,每日更新: