销售预测转独立需求 调用BAPI_REQUIREMENTS_CREATE生成MD61
- 代码示例
- 前台界面
代码示例
FUNCTION zsdfm003f001.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" PT_DLXQ TYPE ZTYDS_DLXQ_IN
*" PT_RETURN TYPE ZTYDS_DLXQ_OUT OPTIONAL
*"----------------------------------------------------------------------
* bapi data
DATA: matemp LIKE bapisitemr-material.
DATA: req_item LIKE bapisitemr.
DATA: req_data LIKE bapisshdin OCCURS 0 WITH HEADER LINE.
DATA: return LIKE bapireturn1 OCCURS 0 WITH HEADER LINE.
DATA: matertemp LIKE bapisitemr-material.
DATA:re_item LIKE bapisitemr,
re_schedule_in LIKE TABLE OF bapisshdin WITH HEADER LINE,
re_change LIKE bapisitemr.
DATA: gt_dlxq TYPE TABLE OF zsds_dlxq_in WITH HEADER LINE,
piv_mode TYPE mode VALUE 'C'.
TYPES: BEGIN OF typ_cha,
material TYPE matnr18,
plant TYPE werks_d,
version TYPE versb,
pbdnr TYPE pbdnr,
END OF typ_cha.
DATA: gs_cha TYPE typ_cha.
gt_dlxq[] = pt_dlxq[].
"物料编码
READ TABLE gt_dlxq INDEX 1.
IF sy-subrc = 0.
CLEAR:matertemp.
CALL FUNCTION 'CONVERSION_EXIT_MATN5_INPUT'
EXPORTING
input = gt_dlxq-material
IMPORTING
output = matertemp
EXCEPTIONS
length_error = 1
OTHERS = 2.
SELECt SINGLE *
INTO @DATA(lw_pbim)
FROM pbim
WHERe matnr = @matertemp
AND werks = @gt_dlxq-plant
AND versb = @gt_dlxq-version
AND vervs = 'X'.
IF sy-subrc = 0."若预测已存在,先删除再创建
CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = matertemp
plant = lw_pbim-werks
requirementstype = lw_pbim-bedae
version = lw_pbim-versb
reqmtsplannumber = lw_pbim-pbdnr
vers_activ = ''
TABLES
return = return.
READ TABLE return INTO DATA(w_return) WITH KEY type = 'E'.
IF sy-subrc = 0."E类型错误
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR pt_return.
pt_return-material = matertemp.
pt_return-plant = lw_pbim-werks.
* pt_return-version = lw_pbim-versb.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = w_return-id
msgnr = w_return-number
msgv1 = w_return-message_v1
msgv2 = w_return-message_v2
msgv3 = w_return-message_v3
msgv4 = w_return-message_v4
IMPORTING
message_text_output = pt_return-message.
pt_return-message = w_return-type.
APPEND pt_return .
RETURN.
ELSE.
READ TABLE return INTO w_return WITH KEY type = 'A'.
IF sy-subrc = 0."A类型错误
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
pt_return-material = matertemp.
pt_return-plant = lw_pbim-werks.
* pt_return-version = lw_pbim-versb.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = w_return-id
msgnr = w_return-number
msgv1 = w_return-message_v1
msgv2 = w_return-message_v2
msgv3 = w_return-message_v3
msgv4 = w_return-message_v4
IMPORTING
message_text_output = pt_return-message.
pt_return-message = w_return-type.
APPEND pt_return .
RETURN.
ELSE.
WAIT UP TO 1 SECONDS.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDIF.
piv_mode = 'U'.
ELSE.
piv_mode = 'C'.
ENDIF.
ENDIF.
*---bapi调用前内表赋值
LOOP AT gt_dlxq.
IF piv_mode = 'C'.
req_item-material = matertemp.
req_item-plant = gt_dlxq-plant.
req_item-requ_type = ''."gt_dlxq-requ_type.
req_item-version = gt_dlxq-version.
req_item-vers_activ = gt_dlxq-vers_activ.
req_item-req_number = gt_dlxq-pbdnr.
"期间标识
IF gt_dlxq-date_type = 'D' OR gt_dlxq-date_type = '1'.
req_data-date_type = '1'.
ENDIF.
req_data-req_date = gt_dlxq-req_date."需求日期
req_data-req_qty = gt_dlxq-req_qty."计划数量
APPEND req_data.
ELSEIF piv_mode = 'U'.
gs_cha-material = gt_dlxq-material.
gs_cha-plant = gt_dlxq-plant.
gs_cha-version = gt_dlxq-version.
gs_cha-pbdnr = gt_dlxq-pbdnr.
"期间标识
IF gt_dlxq-date_type = 'D' OR gt_dlxq-date_type = '1'.
re_schedule_in-date_type = '1'.
ENDIF.
re_schedule_in-req_date = gt_dlxq-req_date.
re_schedule_in-req_qty = gt_dlxq-req_qty.
* re_schedule_in-prod_ves = gt_dlxq-version.
APPEND re_schedule_in.
CLEAR re_schedule_in.
ENDIF.
ENDLOOP.
*---调用bapi
IF piv_mode = 'C'.
* 创建独立需求
CLEAR:matemp.
CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
EXPORTING
requirements_item = req_item
* REQUIREMENT_PARAM =
IMPORTING
material = matemp
* PLANT =
* REQUIREMENTSTYPE =
* VERSION =
* REQMTSPLANNUMBER =
TABLES
requirements_schedule_in = req_data
* REQUIREMENTS_CHAR_IN =
return = return.
IF NOT matemp IS INITIAL.
pt_return-pbdnr = matemp.
pt_return-type = 'S'.
pt_return-message = '计划独立需求创建成功.'.
APPEND pt_return.
COMMIT WORK.
ELSE.
pt_return-index = gt_dlxq-index.
pt_return-type = 'E'.
pt_return-message = return-message.
APPEND pt_return.
ROLLBACK WORK.
ENDIF.
CLEAR matemp.
REFRESH req_data.
CLEAR matertemp.
CLEAR req_item.
ELSEIF piv_mode = 'U'.
* 更改独立需求
CLEAR re_change.
CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = gs_cha-material
plant = gs_cha-plant
requirementstype = lw_pbim-bedae
version = gs_cha-version
reqmtsplannumber = gs_cha-pbdnr
vers_activ = 'X'
* REQUIREMENT_PARAM =
* MRP_AREA =
* DO_COMMIT = 'X'
* UPDATE_MODE = 'X'
delete_old = ''
* NO_WITHDR = ' '
* MATERIAL_EVG =
IMPORTING
requirement_item_out = re_change
TABLES
requirements_schedule_in = re_schedule_in
* REQUIREMENTS_CHAR_IN =
return = return.
IF re_change IS NOT INITIAL.
pt_return-material = gs_cha-material.
pt_return-plant = gs_cha-plant.
pt_return-pbdnr = gs_cha-pbdnr.
pt_return-type = 'S'.
pt_return-message = '计划独立需求修改成功.'.
APPEND pt_return .
CLEAR pt_return.
COMMIT WORK.
ELSE.
READ TABLE return WITH KEY type = 'E'.
pt_return-material = gs_cha-material.
pt_return-plant = gs_cha-plant.
pt_return-type = 'E'.
pt_return-message = return-message.
APPEND pt_return .
CLEAR pt_return.
ROLLBACK WORK.
ENDIF.
CLEAR:return,return[],"lv_pbdnr,
re_item,re_schedule_in[].
ENDIF.
ENDFUNCTION.
前台界面
TCODE:MD61