背景:SAP中的物料号码需要18位,如果前面部分不够,要用0来补充.
前导0的位置一定要注意,不一定加在前面就可以,有时候需要写在 上一个循环中,前导0一般使用CONVERSION_EXIT_ALPHA_INPUT这个函数,删除前导0则使用shift.
一:代码截图
二:有前导0代码部分
LOOP AT lt_dz WHERE rsnum = ''.
SELECT SINGLE pstat INTO l_pstat FROM mara WHERE matnr = lt_dz-matnr.
SEARCH l_pstat FOR 'B'.
IF sy-subrc <> 0.
lt_dz-zsp = 'X'.
ELSE.
lt_dz-zsp = ''.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lt_dz-KOSTL
IMPORTING
output = lt_dz-KOSTL.
MODIFY lt_dz.
l_zt-kostl = lt_dz-kostl.
COLLECT l_zt.
CLEAR:l_zt.
ENDLOOP.
LOOP AT l_zt.
CLEAR: gm_header102,gm_item102,gm_item102[],reserv_no.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = l_zt-kostl
IMPORTING
output = l_zt-kostl.
gm_header102-res_date = sy-datum. "基准日期
"gm_header102-plant = wa_i-werks. "工厂
"gm_header-move_plant = wa_h-werks. "接收地点
"gm_header-move_stloc = '4002'. "接收库存地.
IF l_zt-kostl BETWEEN '0022000101' AND '0022000104'.
gm_header102-move_type = 'Z37'.
ELSE.
gm_header102-move_type = '201'.
ENDIF.
gm_header102-costcenter = l_zt-kostl.
gm_header102-created_by = sy-uname.
"APPEND gm_header102.
"TRANSLATE gm_header102 TO UPPER CASE.
LOOP AT lt_dz WHERE kostl = l_zt-kostl AND zsp <> 'X' AND ( rsnum = '' OR rsnum = '0000000000').
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lt_dz-matnr
IMPORTING
output = lt_dz-matnr .
gm_item102-req_date = sy-datum. "需求日期.
gm_item102-movement = 'X'. "许可的移动
gm_item102-plant = wa_h-werks.
"取外部采购仓储地点
*{ modify by dufen 从zjcd表中获取发出库存地
"SELECT SINGLE lgfsb INTO l_lgfsb FROM marc WHERE werks = wa_h-werks AND matnr = lt_dz-matnr.
"gm_item102-stge_loc = l_lgfsb.
*}
gm_item102-stge_loc = lt_dz-lgfsb."发出库存地
gm_item102-material = lt_dz-matnr. "物料编码
gm_item102-entry_qnt = lt_dz-bdmng. " 需求数量
APPEND gm_item102.
REFRESH zreturn1.
ENDLOOP.
IF gm_item102[] IS INITIAL.
l_msg = '没有可以生成预留的项目!'.
CONTINUE.
ENDIF.
三:删除前导0代码
SHIFT wa_dz-matnr LEFT DELETING LEADING '0'
4 Summary
In the sap, We often add before importing zero in the sap data table. If we transfer it to external system. Please delete 0.