1 Overall
In the blog I will demostrote that how to create production order by BAPI.
2 Code
DATA LS_ORDERDATA TYPE BAPI_PP_ORDER_CREATE.
DATA LV_ORDER_NUMBER TYPE BAPI_ORDER_KEY-ORDER_NUMBER.
DATA LV_ORDER_TYPE TYPE BAPI_ORDER_COPY-ORDER_TYPE.
DATA LS_RETURN TYPE BAPIRET2.
DATA: LT_ORDERS TYPE TABLE OF BAPI_ORDER_KEY,
LW_ORDERS TYPE BAPI_ORDER_KEY,
LT_RETURN TYPE TABLE OF BAPI_ORDER_RETURN,
LW_RETURN TYPE BAPI_ORDER_RETURN.
DATA: LT_MESSTAB TYPE STANDARD TABLE OF BDCMSGCOLL,
LW_MESSTAB LIKE LINE OF LT_MESSTAB,
L_MENGE TYPE CHAR10,
L_MEINS TYPE MEINS,
L_AUFNR TYPE AUFNR.
DATA: GW_TLINE LIKE TLINE.
DATA: GT_TLINE LIKE TABLE OF GW_TLINE.
DATA L_AUFNR1 LIKE THEAD-TDNAME .
" 创建生产订单
LOOP AT ITAB ASSIGNING <FS_ITAB> WHERE SEL = 'X' .
CHECK <FS_ITAB>-AUFNR IS INITIAL.
CLEAR:LS_ORDERDATA,LS_RETURN,LV_ORDER_NUMBER,LV_ORDER_TYPE.
LS_ORDERDATA-MATERIAL = <FS_ITAB>-MATNR .
LS_ORDERDATA-PLANT = <FS_ITAB>-WERKS.
LS_ORDERDATA-ORDER_TYPE = <FS_ITAB>-AUART.
LS_ORDERDATA-BASIC_START_DATE = <FS_ITAB>-SERDAT. "开始日期
LS_ORDERDATA-BASIC_END_DATE = <FS_ITAB>-EERDAT . "完成日期
LS_ORDERDATA-QUANTITY = <FS_ITAB>-MENGE.
LS_ORDERDATA-STORAGE_LOCATION = <FS_ITAB>-LGORT.
CLEAR LS_RETURN.
CALL FUNCTION 'BAPI_PRODORD_CREATE'
EXPORTING
ORDERDATA = LS_ORDERDATA
IMPORTING
RETURN = LS_RETURN
ORDER_NUMBER = LV_ORDER_NUMBER
ORDER_TYPE = LV_ORDER_TYPE.
IF LS_RETURN-TYPE = 'E' OR LS_RETURN-TYPE = 'A'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB>-MSG = LS_RETURN-MESSAGE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
<FS_ITAB>-MSG = LS_RETURN-MESSAGE.
<FS_ITAB>-AUFNR = LV_ORDER_NUMBER.
ENDIF.
CHECK <FS_ITAB>-LCHAR IS NOT INITIAL.
GW_TLINE-TDFORMAT = 1.
GW_TLINE-TDLINE = <FS_ITAB>-LCHAR .
APPEND GW_TLINE TO GT_TLINE.
CONCATENATE SY-MANDT <FS_ITAB>-AUFNR INTO L_AUFNR.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
FID = 'KOPF'
FLANGUAGE = SY-LANGU
FNAME = L_AUFNR1
FOBJECT = 'AUFK'
TABLES
FLINES = GT_TLINE.
COMMIT WORK.
IF SY-SUBRC = 0.
UPDATE AUFK SET LTEXT = '1' WHERE AUFNR = <FS_ITAB>-AUFNR .
ELSE.
<FS_ITAB>-MSG = '长文本更新失败' .
ENDIF.
CLEAR:GW_TLINE, GT_TLINE .
ENDLOOP.
" 下达生产订单
* DATA: LT_ORDERS TYPE TABLE OF BAPI_ORDER_KEY,
* LW_ORDERS TYPE BAPI_ORDER_KEY,
* LT_RETURN TYPE TABLE OF BAPI_ORDER_RETURN,
* LW_RETURN TYPE BAPI_ORDER_RETURN.
LOOP AT ITAB ASSIGNING <FS_ITAB> WHERE SEL = 'X'.
LW_ORDERS-ORDER_NUMBER = <FS_ITAB>-AUFNR.
APPEND LW_ORDERS TO LT_ORDERS.
CLEAR:LW_ORDERS .
ENDLOOP.
CALL FUNCTION 'BAPI_PRODORD_RELEASE'
EXPORTING
RELEASE_CONTROL = '1'
WORK_PROCESS_GROUP = 'COWORK_BAPI'
WORK_PROCESS_MAX = 99
TABLES
ORDERS = LT_ORDERS
DETAIL_RETURN = LT_RETURN.
READ TABLE LT_RETURN INTO LW_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
CONCATENATE '订单' <FS_ITAB>-AUFNR '下达失败:' LW_RETURN-MESSAGE '' INTO <FS_ITAB>-MSG.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.