创建预留mb21添加附加字段的增强(在屏幕没有需要的字段但是表RKPF和RSEB有):
我们的需求是在表RESB里面有个特殊库存字段SOBKZ,可是在MB11前台操作里面却没有,所以希望通过增强和BAPI来实现这个字段的赋值
1.首先创建一个附加的结构ZSRESB_APPEND,里面有字段RSPOS,SOBKZ
2.BADI:MB_RES_BAPI_CREATE1对他进行实现,里面代码如下:
DATA: LS_EXTENSION LIKE LINE OF IT_EXTENSION_IN.
DATA: LS_RESB LIKE LINE OF RESB.
DATA: LS_ZRESB TYPE ZSRESB_APPEND.
DATA: L_INDEX TYPE SY-TABIX.
BREAK ZZWANGLP.
LOOP AT IT_EXTENSION_IN INTO LS_EXTENSION.
IF LS_EXTENSION-STRUCTURE = ‘ZSRESB_APPEND’.
MOVE LS_EXTENSION-VALUEPART1 TO LS_ZRESB-RSPOS.
MOVE LS_EXTENSION-VALUEPART2 TO LS_ZRESB-SOBKZ.
READ TABLE RESB INTO LS_RESB INDEX LS_ZRESB-RSPOS.
IF SY-SUBRC IS INITIAL.
LS_RESB-SOBKZ = LS_ZRESB-SOBKZ.
MODIFY RESB FROM LS_RESB INDEX LS_ZRESB-RSPOS TRANSPORTING SOBKZ.
ENDIF.
ENDIF.
ENDLOOP.
3.在调用BAPI的时候对相应的附加结构赋值:
*&———————————————————————*
*& Report ZWLP_RES
*&
*&———————————————————————*
*&
*&
*&———————————————————————*
REPORT ZWLP_RES.
PERFORM FRM_CREATE_RESER.
*———————————————————————-*
***INCLUDE LZMM_EAMF01 .
*———————————————————————-*
*&———————————————————————*
*& Form FRM_CREATE_RESER
*&———————————————————————*
* 创建预留
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM FRM_CREATE_RESER .
DATA: BEGIN OF LS_HEADER.
INCLUDE STRUCTURE BAPI2093_RES_HEAD.
DATA: END OF LS_HEADER.
DATA: BEGIN OF LT_ITEM OCCURS 0.
INCLUDE STRUCTURE BAPI2093_RES_ITEM.
DATA: END OF LT_ITEM.
DATA: BEGIN OF LT_RETURN OCCURS 0.
INCLUDE STRUCTURE BAPIRET2.
DATA: END OF LT_RETURN.
DATA: BEGIN OF LT_EXT OCCURS 0.
INCLUDE STRUCTURE BAPIPAREX.
DATA: END OF LT_EXT.
DATA: BEGIN OF LT_PRO OCCURS 0.
INCLUDE STRUCTURE BAPI_PROFITABILITY_SEGMENT.
DATA: END OF LT_PRO.
DATA: L_MSG TYPE STRING.
DATA: L_ZGD LIKE ZTMM_GDXX-ZGD.
DATA: L_INDEX TYPE I.
DATA: L_RSNUM TYPE RSNUM.
CLEAR: LT_ITEM,LT_ITEM[],LS_HEADER.
LS_HEADER-RES_DATE = SY-DATUM. “基准日期
LS_HEADER-MOVE_PLANT = ‘SD00′. “工厂
LS_HEADER-COSTCENTER = ‘C311600001′. “成本中心
LS_HEADER-MOVE_TYPE = ‘201′. “移动类型
IF LS_HEADER-MOVE_TYPE = ‘251′.
LS_HEADER-WBS_ELEM = ”. “WBS元素
ENDIF.
LS_HEADER-CREATED_BY = SY-UNAME.
LT_ITEM-MATERIAL = ‘10000004′. “物料编码
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = LT_ITEM-MATERIAL
IMPORTING
OUTPUT = LT_ITEM-MATERIAL.
LT_ITEM-ENTRY_QNT = 1. ” 需求数量
LT_ITEM-STGE_LOC = ”. “库存地点
LT_ITEM-PLANT = ‘SD00′. “库存地点
LT_ITEM-MOVEMENT = ‘X’. “允许预留的货物移动
* GS_ZTMM_GDXX-SOBKZ = ‘K’.
APPEND LT_ITEM.
CLEAR: LT_ITEM.
CLEAR: SY-MSGID,SY-MSGTY,SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.
LT_EXT-STRUCTURE = ‘ZSRESB_APPEND’.
LT_EXT-VALUEPART1 = ‘1′.
LT_EXT-VALUEPART2 = ‘K’.
APPEND LT_EXT.
LT_ITEM-MATERIAL = ‘10000014′. “物料编码
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
INPUT = LT_ITEM-MATERIAL
IMPORTING
OUTPUT = LT_ITEM-MATERIAL.
LT_ITEM-ENTRY_QNT = 1. ” 需求数量
LT_ITEM-STGE_LOC = ”. “库存地点
LT_ITEM-PLANT = ‘SD00′. “库存地点
LT_ITEM-MOVEMENT = ‘X’. “允许预留的货物移动
* GS_ZTMM_GDXX-SOBKZ = ‘K’.
APPEND LT_ITEM.
CLEAR: LT_ITEM.
CLEAR: SY-MSGID,SY-MSGTY,SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.
LT_EXT-STRUCTURE = ‘ZSRESB_APPEND’.
LT_EXT-VALUEPART1 = ‘2′.
LT_EXT-VALUEPART2 = ‘Q’.
APPEND LT_EXT.
CLEAR: LT_ITEM,LT_EXT.
CALL FUNCTION ‘BAPI_RESERVATION_CREATE1′
EXPORTING
RESERVATIONHEADER = LS_HEADER
IMPORTING
RESERVATION = L_RSNUM
TABLES
RESERVATIONITEMS = LT_ITEM
RETURN = LT_RETURN
EXTENSIONIN = LT_EXT
PROFITABILITYSEGMENT = LT_PRO.
BREAK-POINT.
IF L_RSNUM IS NOT INITIAL.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
.
WRITE: L_RSNUM.
ELSE.
ENDIF.
ENDFORM. ” FRM_CREATE_RESER