功能:批量导入采购订单

 模板下载

 https://files.cnblogs.com/files/twttafku/%E6%89%B9%E9%87%8F%E4%B8%8A%E4%BC%A0%E9%87%87%E8%B4%AD%E8%AE%A2%E5%8D%95..rar

REPORT  zmm079.
*&
*&---------------------------------------------------------------------*
*&
*& 批量导入采购订单
*& 
*&---------------------------------------------------------------------*


DATA: g_datafile   TYPE string,             "Local ASCII Text File
      g_rtncode    TYPE i,
      w_accepted   TYPE i,
      rows         TYPE i,
      g_currentrow TYPE i.

DATA:
  BEGIN OF itab_ok OCCURS 0,
    fid(100),
    ebelp          LIKE ekpo-ebelp,
    bsart          LIKE ekko-bsart,
    superfield(10TYPE c,
    ekorg          LIKE ekko-ekorg,
    ekgrp          LIKE ekko-ekgrp,
    bukrs          LIKE ekko-bukrs,
    ematn          LIKE mepo1211-ematn,
    menge(15)      TYPE c,

    eeind          LIKE mepo1211-eeind,
    name1          LIKE mepo1211-name1,
    charg          LIKE mepo1211-charg,
    lgobe          LIKE mepo1211-lgobe,
    netpr          LIKE  mepo1211-netpr,
    peinh          LIKE mepo1211-peinh,
    vend_mat       TYPE idnlf,
    trackingno     TYPE  bednr,

    afnam          TYPE afnam,
    order_reason   TYPE bsgru,

    sd_doc         TYPE  vbeln" CHAR  10  0 销售和分销凭证号
    itm_number     TYPE  posnr_va"    NUMC  6 0 销售凭证项目
    wbs_element    TYPE  ps_posid"    CHAR  24  0 工作分解结构元素 (WBS 元素)
    preq_no        TYPE  banfn"  CHAR  10  0 采购申请编号
    preq_item      TYPE  bnfpo"  NUMC  5 0 采购申请的项目编号
    suppl_stloc    TYPE  reslo" CHAR  4 0 库存运输订单发货存储地点

    ret_item       TYPE  retpo"退货类型
    pstyp          TYPE  pstyp,
    "ADD BY LH 20190315 SDK2019010300007
    costcenter     TYPE kostl"成本中心
    gl_account     TYPE saknr"总账科目编号
  END OF itab_ok.
DATA:ep_ebeln LIKE ekko-ebeln,
     ep_subrc LIKE sy-subrc,
     ep_frgkx LIKE ekko-frgke.

DATA :   it_poitem           LIKE  bapimepoitem         OCCURS    0   WITH HEADER  LINE,
         it_poitemx          LIKE  bapimepoitemx        OCCURS    0   WITH HEADER  LINE,
         it_poschedule       LIKE  bapimeposchedule     OCCURS    0   WITH HEADER  LINE,
         it_poschedulex      LIKE  bapimeposchedulx     OCCURS    0   WITH HEADER  LINE,
         ip_poheader         LIKE  bapimepoheader,
         it_pocond           LIKE  bapimepocond OCCURS WITH HEADER LINE,
         it_pocondx          LIKE  bapimepocondx OCCURS WITH HEADER LINE,

         ip_poheaderx         LIKE   bapimepoheaderx,
         i_po_changereturn   LIKE  bapiret2         OCCURS WITH HEADER LINE,
         po_poheader         LIKE bapimepoheader,
         po_poheaderx        LIKE bapimepoheaderx,

         i_po_changeitem     LIKE  bapimepoitem     OCCURS WITH HEADER LINE,
         i_po_changeitemx    LIKE  bapimepoitemx    OCCURS WITH HEADER LINE,

         i_po_poschedule     LIKE  bapimeposchedule     OCCURS    0   WITH HEADER  LINE,
         i_po_poschedulex    LIKE  bapimeposchedulx     OCCURS    0   WITH HEADER  LINE,



         it_bapimepoaccount  LIKE bapimepoaccount OCCURS WITH HEADER LINE,
         it_bapimepoaccountx LIKE bapimepoaccountx OCCURS WITH HEADER LINE,

         et_log              LIKE bapiret2   OCCURS WITH HEADER LINE.

CLEAR:it_poitem ,it_poitemx,it_poschedule,ip_poheader,ip_poheaderx,it_poschedulex,it_pocond,it_pocondx.
REFRESH:it_poitem ,it_poitemx,it_poschedule,it_poschedulex.



DATA :
  BEGIN OF ith OCCURS 0,
    fid(200),
**********  header         公司代码
    comp_code LIKE  itab_ok-bukrs,
**********  采购凭证类型
    doc_type  LIKE  itab_ok-bsart,
**********  供应商帐户号
    vendor    LIKE  itab_ok-superfield,
********** 采购组织
    purch_org LIKE  itab_ok-ekorg,
********** 采购组
    pur_group LIKE  itab_ok-ekgrp,
  END OF ith.



PARAMETERS:
  p1 RADIOBUTTON  GROUP p_pr  DEFAULT 'X',
  p2 RADIOBUTTON  GROUP p_pr.


IF p2 'X'.
  PERFORM get_doc_down.
  RETURN.
ENDIF.





INCLUDE zfile_xls.


PARAMETERS: p_atochk AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_atomrp AS CHECKBOX DEFAULT 'X'.




PARAMETERS: p_chkprq AS CHECKBOX .





*SORT ITXLS.
LOOP AT itxls.
  MOVE itxls-col1 TO itab_ok-bsart"订单类型
  MOVE itxls-col2 TO itab_ok-bukrs."公司
  MOVE itxls-col3 TO itab_ok-charg."批次
  MOVE itxls-col4 TO itab_ok-ebelp."订单行项目
  MOVE itxls-col5 TO itab_ok-eeind"交货日期
  MOVE itxls-col6 TO itab_ok-ekgrp."采购组
  MOVE itxls-col7 TO itab_ok-ekorg"采购组织
  MOVE itxls-col8 TO itab_ok-ematn."物料
  MOVE itxls-col9 TO itab_ok-lgobe ."库存地点
  MOVE itxls-col10 TO itab_ok-menge."订单数量
  MOVE itxls-col11 TO itab_ok-name1."工厂
  MOVE itxls-col12 TO itab_ok-netpr ."净价
  MOVE itxls-col13 TO itab_ok-peinh"采购组织
  MOVE itxls-col14 TO itab_ok-superfield."供应商
  MOVE itxls-col15 TO itab_ok-trackingno."跟踪号
  MOVE itxls-col16 TO itab_ok-vend_mat."供应商物料
  MOVE itxls-col17 TO itab_ok-fid."导入标识
  MOVE itxls-col18 TO itab_ok-afnam."申请者
  MOVE itxls-col19 TO itab_ok-order_reason."装运条件(订单原因)

  MOVE itxls-col20 TO itab_ok-sd_doc."销售和分销凭证号
  MOVE itxls-col21 TO itab_ok-itm_number."销售凭证项目

  MOVE itxls-col22 TO itab_ok-wbs_element."工作分解结构元素 (WBS 元素)

  MOVE itxls-col23 TO itab_ok-preq_no."采购申请编号
  MOVE itxls-col24 TO itab_ok-preq_item."采购申请编号行号
  MOVE itxls-col25 TO itab_ok-suppl_stloc."发货库位
  MOVE itxls-col26 TO itab_ok-ret_item."退货类型
  MOVE itxls-col27 TO itab_ok-pstyp."项目类型
  "ADD BY LH 20190315 SDK2019010300007
  MOVE itxls-col28 TO itab_ok-costcenter."成本中心
  MOVE itxls-col29 TO itab_ok-gl_account."总账科目编号



*    SD_DOC         TYPE  VBELN, " CHAR  10  0 销售和分销凭证号
*    ITM_NUMBER     TYPE  POSNR_VA, "    NUMC  6 0 销售凭证项目
*    WBS_ELEMENT    TYPE  PS_POSID, "    CHAR  24  0 工作分解结构元素 (WBS 元素)
*    PREQ_NO        TYPE  BANFN, "  CHAR  10  0 采购申请编号
*    PREQ_ITEM      TYPE  BNFPO, "  NUMC  5 0 采购申请的项目编号   

PERFORM f_add_zero USING itab_ok-costcenter.   
PERFORM f_add_zero USING itab_ok-gl_account.   
PERFORM f_add_zero USING itab_ok-sd_doc.   
PERFORM f_add_zero USING itab_ok-itm_number.   
PERFORM f_add_zero USING itab_ok-preq_no.   
PERFORM f_add_zero USING itab_ok-preq_item.   


CONCATENATE itab_ok-bsart                           itab_ok
-bukrs                           itab_ok
-ekorg                           itab_ok
-superfield                           itab_ok
-fid                           itab_ok
-wbs_element                           
INTO itab_ok-fid.   


IF itab_ok-eeind IS NOT INITIAL.     

DATA: sy1 LIKE sy-datum.     
CLEAR sy1.     
MOVE itab_ok-eeind TO sy1.     

CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'       
EXPORTING         
date                      = sy1       
EXCEPTIONS         plausibility_check_failed 
1         
OTHERS                    2.     

IF sy-subrc NE 0"如果返回非0,则日期不合法       
DATA bst(100).       
CLEAR bst.       
CONCATENATE '日期检查错误' itab_ok-eeind '-' itab_ok-ematn   INTO bst.       
WRITE / bst.       

MOVE sy-datum TO itab_ok-eeind.     
ENDIF.   

ENDIF.   

APPEND itab_ok.   
MOVE-CORRESPONDING  itab_ok TO ith.   
COLLECT ith.



ENDLOOP.




IF p_chkprq 'X'"重复采购申请检查   


DATA: itq LIKE itab_ok OCCURS WITH HEADER LINE.   
DATA: itdel LIKE itab_ok OCCURS WITH HEADER LINE.   

MOVE itab_ok[] TO itq[].   
DELETE itq  WHERE preq_no IS  INITIAL.   




SELECT     banfn 
AS preq_no     bnfpo 
AS  preq_item   
INTO CORRESPONDING FIELDS OF TABLE itdel   
FROM m_mekke   
FOR ALL ENTRIES IN itq   
WHERE banfn = itq-preq_no     
AND bnfpo = itq-preq_item     
.   




DATA: minfo(200).   


LOOP AT itdel.     
DELETE itab_ok WHERE preq_no = itdel-preq_no AND preq_item = itdel-preq_item.     


PERFORM f_cut_zero USING itdel-preq_no.     
PERFORM f_cut_zero USING itdel-preq_item.     


CONCATENATE  '采购申请: ' itdel-preq_no '~' itdel-preq_item '已被参考过,本次忽略.' INTO minfo.     


WRITE /: minfo COLOR 4.   


ENDLOOP.   







CLEAR itq[].   
CLEAR itdel[].





*  PERFORM F_ADD_ZERO USING ITAB_OK-PREQ_NO.
*  PERFORM F_ADD_ZERO USING ITAB_OK-PREQ_ITEM.

ENDIF.


*DATA:TMP_BSART LIKE MEPO_TOPLINE-BSART,
*TMP_SUPERFIELD LIKE MEPO_TOPLINE-SUPERFIELD,
*TMP_EKORG  LIKE MEPO1222-EKORG,
*TMP_EKGRP LIKE MEPO1222-EKGRP,
*TMP_BUKRS LIKE  MEPO1222-BUKRS,
*TMP_LGOBE LIKE MEPO1211-LGOBE.
*CLEAR :TMP_BSART,TMP_SUPERFIELD,TMP_EKORG,TMP_EKGRP,TMP_BUKRS,TMP_LGOBE.
*DELETE ITAB_OK WHERE BSART  IS INITIAL.


LOOP AT ith.   


CLEAR:  it_poitem[],it_poitem.   
CLEAR:  it_poitemx[],it_poitemx.   

CLEAR:  it_poschedule[],it_poschedule.   
CLEAR:  it_poschedulex[],it_poschedulex.   

CLEAR:    it_pocond,it_pocond[].   
CLEAR: it_pocondx,it_pocondx[].   
CLEAR:  it_poitem[],it_poitem.   




LOOP AT itab_ok WHERE fid = ith-fid.

**********  header         公司代码     ip_poheader
-comp_code   =  itab_ok-bukrs.     ip_poheaderx
-comp_code  =  'X'.
**********  采购凭证类型     ip_poheader
-doc_type    =  itab_ok-bsart.     ip_poheaderx
-doc_type   =  'X'.

***    *****供货工厂     
IF  strlen( itab_ok-superfield 4.       ip_poheader
-suppl_plnt      =  itab_ok-superfield.       ip_poheaderx
-suppl_plnt     =  'X'.     
ENDIF.
**********  供应商帐户号     
PERFORM f_add_zero USING   itab_ok-superfield .     ip_poheader
-vendor      =  itab_ok-superfield.     ip_poheaderx
-vendor     =  'X'.

********** 采购组织     ip_poheader
-purch_org   =  itab_ok-ekorg.     ip_poheaderx
-purch_org  =  'X'.
********** 采购组     ip_poheader
-pur_group   =  itab_ok-ekgrp.     ip_poheaderx
-pur_group  =  'X'.     



IF itab_ok-suppl_stloc IS NOT INITIAL.       it_poitemx
-suppl_stloc 'X'.       it_poitem
-suppl_stloc =  itab_ok-suppl_stloc.     
ENDIF.     



MOVE  itab_ok-order_reason TO   it_poitem-order_reason.     

IF it_poitem-order_reason IS NOT INITIAL.       it_poitemx
-order_reason 'X'.     
ENDIF.     it_poitem


-preq_name         =  itab_ok-afnam.     
IF it_poitem-preq_name IS NOT INITIAL.       it_poitemx
-preq_name        =  'X'.     
ENDIF.     

MOVE sy-tabix TO itab_ok-ebelp.
******* ITEM  DATA   采购凭证的项目编号     
PERFORM f_add_zero USING  itab_ok-ebelp.     it_poitem
-po_item   =     itab_ok-ebelp.     it_poitemx
-po_item  =     itab_ok-ebelp.     it_poitemx
-po_itemx =     'X'.
*******    物料号     
IF  NOT   itab_ok-ematn  IS INITIAL.       
PERFORM f_add_zero USING  itab_ok-ematn.       it_poitem
-material   =    itab_ok-ematn.       it_poitemx
-material  =    'X'.     
ENDIF.

*******工厂     it_poitem
-plant         =  itab_ok-name1.     it_poitemx
-plant        =  'X'.
*******库存地点     
IF  NOT   itab_ok-lgobe  IS INITIAL.       it_poitem
-stge_loc     =    itab_ok-lgobe.       it_poitemx
-stge_loc    =    'X'.     
ENDIF.
*******批次     

IF  NOT   itab_ok-charg  IS INITIAL.       it_poitem
-batch     =    itab_ok-charg.       it_poitemx
-batch    =    'X'.     
ENDIF.     

IF  it_poitem-vend_mat IS INITIAL.       it_poitem
-vend_mat = itab_ok-vend_mat.       it_poitemx
-vend_mat 'X'.     
ENDIF.     

IF  it_poitem-trackingno IS INITIAL.       it_poitem
-trackingno = itab_ok-trackingno.       it_poitemx
-trackingno 'X'.     
ENDIF.

*******采购订单数量     it_poitem
-quantity      =    itab_ok-menge.     it_poitemx
-quantity     =    'X'.
*******
*******单价     
IF itab_ok-netpr IS NOT INITIAL.       it_poitem
-net_price     =    itab_ok-netpr.       it_poitemx
-net_price     =    'X'.
*******单价单位       it_poitem
-price_unit     =    itab_ok-peinh.       it_poitemx
-price_unit     =    'X'.       it_poitem

-calctype ' ' .       it_poitemx
-calctype 'X'.     
ENDIF.


*PREQ_NO  1 类型  BANFN CHAR  10  0 采购申请编号
*PREQ_ITEM  1 类型  BNFPO NUMC  5 0 采购申请的项目编号     
IF itab_ok-preq_no IS NOT INITIAL.       it_poitem

-preq_no = itab_ok-preq_no .       it_poitem
-preq_item = itab_ok-preq_item .       it_poitemx
-preq_no 'X' .       it_poitemx
-preq_item 'X'.     


ENDIF.     



IF itab_ok-pstyp IS NOT INITIAL.       it_poitem
-item_cat = itab_ok-pstyp.       it_poitemx
-item_cat 'X'.     
ENDIF.     


IF itab_ok-wbs_element IS NOT INITIAL.       it_poitem
-acctasscat 'Q'.       it_poitemx
-acctasscat 'X'.     
ENDIF.     

IF itab_ok-sd_doc IS NOT INITIAL.       it_poitem
-acctasscat 'E'.       it_poitemx
-acctasscat 'X'.     
ENDIF.     
"ADD BY LH 20190315 SDK2019010300007     
IF itab_ok-costcenter IS NOT INITIAL.       it_poitem
-acctasscat 'K'.  "科目分配类型为K,代表成本中心       it_poitem
-free_item  'X'.  "免费项目       it_poitemx
-acctasscat 'X'.       it_poitemx
-free_item  'X'.     
ENDIF.     

IF itab_ok-ret_item IS NOT INITIAL.       it_poitem
-ret_item 'X'.       it_poitemx
-ret_item 'X'.     
ENDIF.     



APPEND   it_poitem.     
APPEND   it_poitemx.     


CLEAR: it_poitem,it_poitemx.     

IF itab_ok-netpr IS NOT INITIAL.       it_pocond
-itm_number = itab_ok-ebelp.       it_pocond
-cond_type 'PB00'.    " Give the pricing condition type that derives netprice       it_pocond
-cond_value =  itab_ok-netpr.       it_pocond
-cond_p_unt = itab_ok-peinh.       it_pocond
-currency 'CNY'.       it_pocond
-change_id 'U'.       
APPEND it_pocond.       it_pocondx

-itm_number = itab_ok-ebelp.       it_pocondx
-itm_numberx 'X'.       it_pocondx
-cond_p_unt 'X'.       it_pocondx
-cond_type 'X'.       it_pocondx
-cond_value 'X'.       it_pocondx
-currency 'X'.       it_pocondx
-change_id 'X'.       
APPEND it_pocondx.     

ENDIF.



******"采购凭证的项目编号
*    PERFORM F_ADD_ZERO USING  ITAB_OK-EBELP.
*    IT_POSCHEDULE-SCHED_LINE        =  ITAB_OK-EBELP.
*    IT_POSCHEDULEX-SCHED_LINE        =  'X'.     it_poschedule
-po_item       =  itab_ok-ebelp.     it_poschedulex
-po_item       =  itab_ok-ebelp.     it_poschedulex
-po_itemx      =  'X'.

********计划行     it_poschedule
-sched_line     '0001'.     it_poschedulex
-sched_line    '0001'.     it_poschedulex
-sched_linex   'X'.
********计划数量
*    it_poschedule-quantity     = it_zmm0004-quantity.
*    it_poschedulex-quantity    = 'X'.
*    APPEND   it_poschedule.
*    APPEND   it_poschedulex.

*******        交货日期     
IF  NOT   itab_ok-eeind  IS INITIAL.       it_poschedule
-delivery_date  =  itab_ok-eeind.       it_poschedulex
-delivery_date =  'X'.     
ELSE.       it_poschedule
-delivery_date  =  sy-datum.       it_poschedulex
-delivery_date =  'X'.     
ENDIF.     

APPEND   it_poschedule.     
APPEND   it_poschedulex.     

CLEAR: it_poschedule,it_poschedulex.     










IF itab_ok-sd_doc IS NOT INITIAL.       it_bapimepoaccount
-sd_doc = itab_ok-sd_doc.       it_bapimepoaccount
-itm_number = itab_ok-itm_number.       it_bapimepoaccountx
-sd_doc 'X'.       it_bapimepoaccountx
-itm_number 'X'.     

ENDIF.     
"ADD BY LH 20190315 SDK2019010300007     
IF itab_ok-costcenter IS NOT INITIAL.       it_bapimepoaccount
-costcenter = itab_ok-costcenter.       it_bapimepoaccount
-gl_account = itab_ok-gl_account.       it_bapimepoaccountx
-costcenter 'X'.       it_bapimepoaccountx
-gl_account 'X'.     
ENDIF.     
IF itab_ok-wbs_element IS NOT INITIAL.       it_bapimepoaccount
-wbs_element = itab_ok-wbs_element.       it_bapimepoaccountx
-wbs_element 'X'.     
ENDIF.


********采购订单数量
*    IT_POITEM-QUANTITY      =    ITAB_OK-MENGE.
*    IT_POITEMX-QUANTITY     =    'X'.     



IF it_bapimepoaccount IS NOT INITIAL.       it_bapimepoaccount

-po_item = itab_ok-ebelp.       it_bapimepoaccount
-serial_no '01'.       it_bapimepoaccountx

-po_item = itab_ok-ebelp.       it_bapimepoaccountx
-serial_no '01'.       it_bapimepoaccountx
-serial_nox 'X'.       it_bapimepoaccountx
-po_itemx 'X'.       it_bapimepoaccountx
-serial_nox 'X'.       


APPEND it_bapimepoaccount.       
APPEND it_bapimepoaccountx.     

ENDIF.     
CLEAR: it_bapimepoaccount, it_bapimepoaccountx.   

ENDLOOP.   



CLEAR et_log[].   

CALL FUNCTION 'BAPI_PO_CREATE1'     
EXPORTING       poheader         
= ip_poheader       poheaderx        
= ip_poheaderx       no_price_from_po 
'X'     
IMPORTING       exppurchaseorder 
= ep_ebeln     
TABLES       
return           = et_log       poschedule       
= it_poschedule       poschedulex      
= it_poschedulex       poitem           
= it_poitem       poitemx          
= it_poitemx       pocond           
= it_pocond       pocondx          
= it_pocondx       poaccount        
= it_bapimepoaccount       poaccountx       
= it_bapimepoaccountx.   

"changed by kasen 因为内部ET_LOG中包含了一个error 超过了信贷额度但是   
"但是采购订单依旧创建成功了故要程序停止报错 BEGIN 20190627   
DATA lv_cst(200)."ADD BY KASEN   
CLEAR:lv_cst.   
LOOP AT et_log WHERE type 'E' AND MESSAGE  CS 'Credit limit exceeding ' OR MESSAGE  CS 'blocked due to overdue '.     
CONCATENATE ith-fid '  ERROR:  ' et_log-message  lv_cst  INTO lv_cst.     
WRITE /: lv_cst COLOR 6.     
RETURN.   
ENDLOOP.   
"END BY KASEN 20190627   

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'     
EXPORTING       
wait 'X'.   


CLEAR: it_bapimepoaccount[] , it_bapimepoaccountx[].   


DATA cst(200).   
CLEAR cst.   
DATA: it_detail LIKE it_poitem.   

IF  ep_ebeln  IS  INITIAL.

*    LOOP AT ET_LOG WHERE TYPE = 'E'.
*      WRITE /:ET_LOG-MESSAGE.
*    ENDLOOP.     



LOOP  AT et_log.       
CLEAR it_detail.       
IF et_log-row IS NOT INITIAL.         
READ TABLE it_poitem INTO it_detail INDEX et_log-row.         
PERFORM f_cut_zero USING it_detail-material.         
PERFORM f_cut_zero USING ith-fid.         
MOVE et_log-row TO cst.         
SHIFT cst LEFT DELETING LEADING space.         
CONCATENATE '行' cst INTO cst.       
ELSE.         
CLEAR cst.       
ENDIF.       
CONCATENATE ith-fid et_log-message it_detail-material  cst  INTO cst.       


IF et_log-type 'E'.         
WRITE /: cst COLOR 6.       
ELSEIF et_log-type 'W'.         
WRITE /: cst COLOR 3.       
ELSE.         
WRITE:  cst  .       
ENDIF.     


ENDLOOP.   



ELSE.     
CONCATENATE ep_ebeln '~' ith-fid INTO ith-fid .     

WRITE / ith-fid.   

ENDIF.   



DATA:     i_log      
LIKE  bapireturn1          OCCURS WITH HEADER LINE,     it_input   
LIKE  zporelease           OCCURS WITH HEADER LINE,     ip_history 
LIKE  zrfc_history.   


CLEAR   :   i_log,i_log[].   
CLEAR it_input[].   it_input
-ebeln   =  ep_ebeln.   
APPEND  it_input.   ip_history
-oano '1'.   ip_history
-oaname '1'.   ip_history
-oamodule '1'.   

IF p_atochk 'X'.     
CHECK ep_ebeln  IS  NOT INITIAL.     
CALL FUNCTION 'ZRFC_WMS_PO_RELEASE'       
EXPORTING         ip_history 
= ip_history       
TABLES         it_input   
= it_input         et_log     
= i_log.     

LOOP AT i_log"WHERE TYPE = 'E'.       
WRITE: i_log-message.     
ENDLOOP.   

ENDIF.

ENDLOOP.



IF p_atomrp 'X'.   


PERFORM run_mrp.

ENDIF.









INCLUDE zrpt_fun.


*INCLUDE ZFILE_DOWN.
*&---------------------------------------------------------------------*
*&      Form  RUN_MRP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM run_mrp .   

DATA:     material       
TYPE  bapi_mrp_mat_param-material,     plant          
TYPE  bapi_mrp_mat_param-plant,     mrp_area       
TYPE  bapi_mrp_mat_param-mrp_area,     plan_scenario  
TYPE  bapi_mrp_mat_param-plan_scenario,     mrp_plan_param 
TYPE  bapi_mrp_plan_param,     material_evg   
TYPE  bapimgvmatnr,     

return         TYPE  bapiret2,     mrp_lists      

LIKE  bapi_mrp_list OCCURS WITH HEADER LINE.   







DATABEGIN OF itmrp OCCURS 0,           matnr 
TYPE matnr,           werks 
TYPE werks_d,         
END OF itmrp.   



WRITE sy-datum.   
WRITE sy-uzeit.   



LOOP AT itab_ok.     

MOVE itab_ok-ematn TO itmrp-matnr.     


PERFORM f_add_zero USING itmrp-matnr.     

MOVE itab_ok-name1 TO itmrp-werks.     

COLLECT itmrp.     
PERFORM f_cut_zero USING itab_ok-superfield.     
MOVE itab_ok-superfield TO itmrp-werks.     
COLLECT itmrp.   
ENDLOOP.   mrp_plan_param


-proc_type           'N'.   mrp_plan_param
-create_purreq       '1'.   mrp_plan_param
-create_sched_lines  '3'.   mrp_plan_param
-create_mrp_list     '1'.   mrp_plan_param
-planning_mode       '1'.   mrp_plan_param
-scheduling_pldords  '1'.   



LOOP AT itmrp.     

CALL FUNCTION 'BAPI_MATERIAL_PLANNING'       
EXPORTING         material       
= itmrp-matnr         plant          
= itmrp-werks         mrp_plan_param 
= mrp_plan_param       
IMPORTING         
return         return       
TABLES         mrp_lists      
= mrp_lists.     


WRITE / return-message.     


PERFORM showpb USING return-message.   

ENDLOOP.




ENDFORM.

原文地址:https://www.cnblogs.com/twttafku/p/14253219.html