零售进口商品条码是0开头的,国际商品条码/商品通码通过BAPI写入或者MM41\MM42创建时发现,前台输入前导0的条码回车后前面的0会自动被忽略掉,后台表修改也无法写入前导0。
解决办法:
涉及到2张表,MARA和MARM,MARA表是保存基本单位对应的EAN码,MARM表保存了转换单位对应的EAN码,步骤如下:
1.EAN转换例程增强
在这2个转换函数的开头处隐式增强,如果有前导0,则OUTPUT = INPUT
IF input IS NOT INITIAL AND input+0(1) = ‘0’.
output = input.
EXIT.
ENDIF.
IF input IS NOT INITIAL AND input+0(1) = ‘0’.
output = input.
EXIT.
ENDIF.
2.MARA上EAN增强
在函数MARA_EAN11里开头和结尾处隐式增强,将开头处的EAN码赋值给结尾处的EAN码,不执行转换逻辑。
开头处:
if P_EAN11 IS NOT INITIAL AND P_EAN11+0(1) = ‘0’.
DATA(lv_ean11) = P_EAN11.
ENDIF.
结尾处:
if lv_ean11 IS NOT INITIAL.
P_EAN11 = lv_ean11.
endif.
3.MARM上EAN增强
在函数EAN_SYSTEMATIC 开始,结尾处增强添加隐式增强,添加的逻辑目的也是为了避免系统转换条码内容. 开始自定义变量保存传入的条码, 结尾把转换的条码替换成传入的条码。
开头处:
DATA(lv_ean) = EAN_NEU.
结尾处:
if ean_neu <> lv_ean.
delete MARM_ITAB where ean11 = ean_neu.
delete MEAN_TAB where ean11 = ean_neu.
endif.
ean_neu = lv_ean.
ean_alt = lv_ean.
效果展示:
后台表MARA
后台表MARM
注:
另外创建一个自定义表或者标准表增强字段,用来存放有前置0的EAN和没有前置0的EAN的对应关系. 这个方案比较麻烦,因为很多地方都需要去访问这个对应表,转换一下,同时前台还得做屏幕增强,提出这个方案的目的仅仅是为了抛砖引玉,不推荐!