FORM import .
DATA:ls_alv TYPE T_show,
ls_tab TYPE T_show,
lt_alv TYPE STANDARD TABLE OF T_show WITH HEADER LINE.
DATA:lv_matnr TYPE bapisitemr-material.
DATA: ls_item LIKE bapisitemr,
lt_requirements_schedule_in LIKE TABLE OF bapisshdin,
ls_REQUIREMENTS_SCHEDULE_IN LIKE bapisshdin,
lt_return LIKE TABLE OF bapireturn1,
ls_return LIKE bapireturn1.
DATA: param TYPE cm60r.
DATA:l_msg TYPE string.
DATA:ls_out TYPE bapisitemr.
CLEAR:ls_alv,lt_alv[].
LOOP AT gt_alv INTO gs_alv WHERE box = 'X' AND msg = ''.
MOVE-CORRESPONDING gs_alv TO ls_alv.
APPEND ls_alv TO lt_alv.
CLEAR:ls_alv,gs_alv.
ENDLOOP.
SORT lt_alv BY matnr werks .
DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING matnr werks.
IF lt_alv[] IS NOT INITIAL.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = sy-datum
days = 0
months = 0
signum = '+'
years = 1
IMPORTING
calc_date = gv_endate.
LOOP AT lt_alv INTO ls_alv.
PERFORM del USING ls_alv."先调用MD74将关键日期之前的独立需求删除
CLEAR:ls_item,lt_requirements_schedule_in[],ls_requirements_schedule_in,lt_return[],ls_return.
ls_item-material = ls_alv-matnr."物料编码
ls_item-plant = ls_alv-werks."工厂
* ls_item-mrp_area = ls_alv-mrp."MRP
ls_item-version = '00'."独立需求的版本号
ls_item-vers_activ = 'X'."版本激活标识
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE matnr = ls_alv-matnr AND werks = ls_alv-werks ."AND mrp = ls_alv-mrp.
ls_requirements_schedule_in-date_type = '1'."日期类型
ls_requirements_schedule_in-req_date = <fs_alv>-date."计划行日期
ls_requirements_schedule_in-req_qty = <fs_alv>-jhsl."计划数量
APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.
ENDLOOP.
SELECT SINGLE COUNT(*) INTO @DATA(lv_count) FROM pbim WHERE matnr = @ls_alv-matnr AND werks = @ls_alv-werks AND versb = '00'.
IF lv_count = 0. "新建
CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
EXPORTING
requirements_item = ls_item
TABLES
requirements_schedule_in = lt_requirements_schedule_in
return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
<fs_alv>-msg = <fs_alv>-msg && ls_return-message .
ENDLOOP.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
l_msg = l_msg && '导入完成;' .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
l_msg = l_msg && '导入失败;' .
ENDIF.
ELSE."修改
CLEAR:gv_messg.
PERFORM bdc_md62 TABLES lt_requirements_schedule_in[] USING ls_alv.
IF gv_messg = ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
l_msg = l_msg && '导入完成;' .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
l_msg = l_msg && '导入失败;' .
ENDIF.
ENDIF.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<gs_alv>) WHERE matnr = ls_alv-matnr AND werks = ls_alv-werks ."AND mrp = ls_alv-mrp.
<gs_alv>-msg = l_msg.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form del
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_ALV[]
*&---------------------------------------------------------------------*
FORM del USING lw_alv TYPE t_show.
DATA:lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA lv_mode TYPE c VALUE 'E'.
opt-dismode = 'N'. "不显示调用屏幕N
opt-updmode = 'A'. "异步
opt-racommit = 'X'.
REFRESH: gt_bdc,gt_bdcmsg,lt_return.
PERFORM bdc_dynpro USING 'RM60RR20' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'TESTFLAG'.
PERFORM bdc_field USING 'BDC_OKCODE'
'ONLI'.
PERFORM bdc_field USING 'WERKS-LOW' lw_alv-werks.
PERFORM bdc_field USING 'MATNR-LOW' lw_alv-matnr.
PERFORM bdc_field USING 'DATE1' gv_endate.
PERFORM bdc_field USING 'HISTFLAG' 'X'.
PERFORM bdc_field USING 'INACFLAG' ''.
PERFORM bdc_field USING 'TESTFLAG' ''.
CALL TRANSACTION 'MD74' USING gt_bdc OPTIONS FROM opt MESSAGES INTO gt_bdcmsg.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
imt_bdcmsgcoll = gt_bdcmsg
ext_return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
gv_messg = gv_messg && ls_return-message.
ENDLOOP.
COMMIT WORK .
ENDFORM.
*&------
*---------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR gs_bdc.
gs_bdc-program = program.
gs_bdc-dynpro = dynpro.
gs_bdc-dynbegin = 'X'.
APPEND gs_bdc TO gt_bdc.
ENDFORM.
FORM bdc_field USING fnam fval.
CLEAR gs_bdc.
gs_bdc-fnam = fnam.
gs_bdc-fval = fval.
CONDENSE gs_bdc-fval .
APPEND gs_bdc TO gt_bdc.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_md62
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM bdc_md62 TABLES lt_schedule_in STRUCTURE bapisshdin USING lw_alv TYPE t_show.
DATA:ls_schedule_in LIKE bapisshdin.
DATA:lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA lv_mode TYPE c VALUE 'E'.
DATA: num TYPE i.
DATA: field1 TYPE string.
DATA: field2 TYPE string.
DATA: field3 TYPE string.
CLEAR:ls_schedule_in,num.
opt-dismode = 'N'. "不显示调用屏幕N
opt-updmode = 'A'. "异步
opt-racommit = 'X'.
REFRESH: gt_bdc,gt_bdcmsg,lt_return.
PERFORM bdc_dynpro USING 'SAPMM60X' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR' 'AM60X-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ANF1'.
PERFORM bdc_field USING 'AM60X-MATAW' 'X'.
PERFORM bdc_field USING 'AM60X-MATNR' lw_alv-matnr.
* PERFORM bdc_field USING 'RM60X-BERID' lw_alv-mrp.
PERFORM bdc_field USING 'AM60X-WERKS' lw_alv-werks.
PERFORM bdc_field USING 'AM60X-VERAW' 'X'.
PERFORM bdc_field USING 'RM60X-VERSB' '00'.
PERFORM bdc_field USING 'RM60X-DATVE' sy-datum.
PERFORM bdc_field USING 'RM60X-DATBE' gv_endate.
PERFORM bdc_field USING 'RM60X-ENTLU' 'M'.
PERFORM bdc_dynpro USING 'SAPLM60E' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PEIN'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLM60E 0204KOPF1'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLM60E 0202SUB2'.
PERFORM bdc_field USING 'BDC_CURSOR' 'PBPT-MATNR(01)'.
PERFORM bdc_dynpro USING 'SAPLM60E' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLM60E 0204KOPF1'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLM60E 0102SUB2'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RM60E-PLNMG(01)'.
PERFORM bdc_field USING 'PBPT-VERVS' 'X'.
LOOP AT lt_schedule_in INTO ls_schedule_in.
num = num + 1.
field1 = 'RM60E-ENTLU(' && num && ')'."日期类型
field2 = 'RM60E-EDATU(' && num && ')'."日期
field3 = 'RM60E-PLNMG(' && num && ')'."数量
PERFORM bdc_field USING field1 'D'.
PERFORM bdc_field USING field2 ls_schedule_in-req_date.
PERFORM bdc_field USING field3 ls_schedule_in-req_qty.
ENDLOOP.
CALL TRANSACTION 'MD62' USING gt_bdc OPTIONS FROM opt MESSAGES INTO gt_bdcmsg.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
imt_bdcmsgcoll = gt_bdcmsg
ext_return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
gv_messg = gv_messg && ls_return-message.
ENDLOOP.
COMMIT WORK .
ENDFORM.
PP独立需求批导,md74,md62
该段代码主要涉及SAP系统中物料需求计划的处理。通过循环遍历数据并进行条件筛选,删除指定日期前的独立需求,然后根据物料编码和工厂创建或修改独立需求,并进行事务处理如提交或回滚。同时,利用BDC(批量数据通讯)技术进行屏幕操作。
摘要由CSDN通过智能技术生成