首页 > 代码库 > 懒得写了,直接复制代码了。。。跨公司发料到订单和退料

懒得写了,直接复制代码了。。。跨公司发料到订单和退料

FORM frm_execute .
   CLEAR:gw_return, gt_return,gw_gb008,gw_gb008_i,gt_gb008,gt_gb008_i.
   PERFORM frm_check_input.
   PERFORM frm_get_basic_data.
   " LOOP AT gt_output INTO gw_output.
   CLEAR g_err_flag.
   IF p_fl EQ X.
     PERFORM frm_create_sto_po.  "创建STO采购订单
     IF g_err_flag NE X.
       PERFORM frm_create_delivery. "创建交货单
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_vl02n_post.       "交货单发货过账
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_goodsmvt_create.        "MIGO采购入库
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_prodorder_ltl .     "生产订单领料
     ENDIF.
   ELSEIF p_tl EQ X.
     PERFORM frm_prodorder_ltl .      "生产订单退料
     IF g_err_flag NE X.
       PERFORM frm_create_sto_po.  "创建STO采购订单
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_create_delivery. "创建交货单
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_vl02n_post.       "交货单发货过账
     ENDIF.
     IF g_err_flag NE X.
       PERFORM frm_goodsmvt_create.        "MIGO采购入库
     ENDIF.
   ENDIF.
   "解锁
   PERFORM frm_unlock.
   PERFORM frm_save_jg.
 ENDFORM.                    " FRM_EXECUTE
FORM frm_create_sto_po .
   DATA:lt_return LIKE TABLE OF bapiret2,
        lw_return TYPE          bapiret2.
   DATA:l_ebelp TYPE ekpo-ebelp.
   CLEAR:g_msg,g_ebeln,g_vbeln,g_mblnr1,g_mblnr2 .

   REFRESH:gt_poitem,gt_poitemx,gt_poschedule,gt_poschedulex,
           gt_poaccount,gt_poaccountx,gt_potextitem ,
           gt_poheader,gt_poheaderx.
   CLEAR:gw_poitem,gw_poitemx,gw_poschedule,gw_poschedulex,
         gw_poaccount,gw_poaccountx,gw_potextitem ,
         gw_poheader,gw_poheaderx.
   "po header
   gw_poheader-doc_type    = DL05.
   gw_poheader-vendor      = 0020200200.
   gw_poheader-purch_org   = DL01.
   gw_poheader-pur_group   = A04."‘A04‘.
   gw_poheader-comp_code   = 2001.
   gw_poheader-doc_date    = sy-datum.
   gw_poheader-langu       =  sy-langu.
   gw_poheader-currency    = CNY."货币


   gw_poheaderx-doc_type   = X.
   gw_poheaderx-vendor     = X.
   gw_poheaderx-purch_org  = X.
   gw_poheaderx-pur_group  = X.
   gw_poheaderx-comp_code  = X.
   gw_poheaderx-doc_date   = X.
   gw_poheaderx-langu      = X.
   gw_poheaderx-currency   = X."货币

   l_ebelp = 10.
   LOOP AT gt_output INTO gw_output WHERE matnr IS NOT INITIAL.
     CLEAR gw_mara.
     READ TABLE gt_mara INTO gw_mara WITH KEY matnr = gw_output-matnr BINARY SEARCH.
     CLEAR:gw_a017,gw_konp.
     READ TABLE gt_a017 INTO gw_a017 WITH KEY matnr = gw_output-matnr BINARY SEARCH.
     IF sy-subrc = 0.
       READ TABLE gt_konp INTO gw_konp WITH KEY knumh = gw_a017-knumh BINARY SEARCH.
     ENDIF.

     "po ITEM
     gw_poitem-po_item =  l_ebelp. "采购凭证的项目编号
     gw_poitem-material = gw_output-matnr.
     gw_poitem-quantity = gw_output-psmng."采购订单数量
     gw_poitem-po_unit = gw_output-meins ."采购订单的计量单位
     gw_poitem-net_price = gw_konp-kbetr."净价
     gw_poitem-price_unit = 1. "gw_konp-KPEIN.
     gw_poitem-tax_code = J2.
     gw_poitem-matl_group = gw_mara-matkl."物料组
     gw_poitem-plant = 2001. "工厂
     gw_poitem-stge_loc = gw_output-lgort. "库存地点
     " gw_poitem-info_rec = ‘5300000076‘.
     IF p_tl EQ X.
       gw_poitem-ret_item = X."退货项目
     ENDIF.
     APPEND gw_poitem TO gt_poitem.
     CLEAR gw_poitem.

     gw_poitemx-po_item =  l_ebelp. "采购凭证的项目编号
     gw_poitemx-material = X.
     gw_poitemx-quantity = X."采购订单数量
     gw_poitemx-po_unit = X ."采购订单的计量单位
     gw_poitemx-net_price = X."净价
     gw_poitemx-price_unit = X.
     gw_poitemx-tax_code = X.
     gw_poitemx-matl_group = X."物料组
     gw_poitemx-plant = X."工厂
     gw_poitemx-stge_loc = X.
     gw_poitemx-info_rec = X.
     IF p_tl EQ X.
       gw_poitemx-ret_item = X."退货项目
     ENDIF.
     APPEND gw_poitemx TO gt_poitemx.
     CLEAR gw_poitemx.

     "交货数据
     gw_poschedule-po_item =   l_ebelp. "采购凭证的项目编号
     gw_poschedule-sched_line =  1. "采购凭证的项目编号
     gw_poschedule-del_datcat_ext = D."交货日期的类别
     gw_poschedule-delivery_date = sy-datum."交货日期
     gw_poschedule-quantity  = gw_output-psmng."采购订单数量
     APPEND gw_poschedule TO gt_poschedule.
     CLEAR gw_poschedule.

     gw_poschedulex-po_item =  l_ebelp. "采购凭证的项目编号
     gw_poschedulex-sched_line =  1. "采购凭证的项目编号
     gw_poschedulex-del_datcat_ext = X."交货日期的类别
     gw_poschedulex-delivery_date = X."交货日期
     gw_poschedulex-quantity  = X."采购订单数量
     APPEND gw_poschedulex TO gt_poschedulex.
     CLEAR gw_poschedulex.

     "条件数据
     gw_pocond-itm_number = l_ebelp. "(item number)
     gw_pocond-cond_type = ZB21. "(condition type)
     gw_pocond-cond_value = http://www.mamicode.com/13. "(condition value)
     gw_pocond-currency = %.
     gw_pocond-change_id = U.
     gw_pocond-condclass = A.
     gw_pocond-calctypcon = A.
     APPEND gw_pocond TO gt_pocond.
     CLEAR gw_pocond.

     gw_pocondx-itm_number = l_ebelp.
     gw_pocondx-itm_numberx = X.
     gw_pocondx-cond_type = X.
     gw_pocondx-cond_value = http://www.mamicode.com/X.
     gw_pocondx-currency = X.
     gw_pocondx-condclass = X.
     gw_pocondx-change_id = X.
     gw_pocondx-calctypcon = X.
     APPEND gw_pocondx TO gt_pocondx.
     CLEAR gw_pocondx.

*     gw_pocond-itm_number = l_ebelp. "(item number)
*     gw_pocond-cond_type = ‘PB00‘. "(condition type)
*     gw_pocond-cond_value = http://www.mamicode.com/gw_konp-kbetr."(condition value)
*     gw_pocond-currency = gw_konp-konwa.
*     gw_pocond-cond_p_unt = 1.
*     gw_pocond-condclass = ‘B‘.
*     gw_pocond-calctypcon = ‘C‘.
*     gw_pocond-change_id = ‘I‘.
*     APPEND gw_pocond TO gt_pocond.
*
*     gw_pocondx-itm_number = l_ebelp.
*     gw_pocondx-itm_numberx = ‘X‘.
*     gw_pocondx-cond_type = ‘X‘.
*     gw_pocondx-cond_value = http://www.mamicode.com/‘X‘.
*     gw_pocondx-currency = ‘X‘.
*     gw_pocondx-cond_p_unt = ‘X‘.
*     gw_pocondx-condclass = ‘X‘.
*     gw_pocondx-calctypcon = ‘X‘.
*     gw_pocondx-change_id = ‘X‘.
*     APPEND gw_pocondx TO gt_pocondx.

     l_ebelp = l_ebelp + 10.
   ENDLOOP.

   sy-tcode = ME21N.
   CALL FUNCTION BAPI_PO_CREATE1
     EXPORTING
       poheader         = gw_poheader
       poheaderx        = gw_poheaderx
     IMPORTING
       exppurchaseorder = g_ebeln
     TABLES
       return           = lt_return
       poitem           = gt_poitem
       poitemx          = gt_poitemx
    "  poschedule       = gt_poschedule
    "  poschedulex      = gt_poschedulex
    "  POCONDHEADER     =
    "  POCONDHEADERX    =
       pocond           = gt_pocond
       pocondx          = gt_pocondx.

   LOOP AT lt_return INTO lw_return WHERE type = E OR type = A.
     EXIT.
   ENDLOOP.

   IF sy-subrc = 0.
     g_err_flag = X.
     CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.

     gw_return-type = E.
     gw_return-message = 采购定单创建失败,原因如下:.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

     DELETE lt_return WHERE type NE E.
     APPEND LINES OF lt_return TO gt_return.

   ELSE.
     CALL FUNCTION BAPI_TRANSACTION_COMMIT
       EXPORTING
         wait = X.
     CONCATENATE 采购订单号: g_ebeln INTO g_msg.
     gw_return-type = S.
     gw_return-message = g_msg.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

   ENDIF.

   WAIT UP TO 1 SECONDS.
 ENDFORM.                    " FRM_CREATE_STO_PO
FORM frm_create_delivery .
   DATA:l_vstel      TYPE vstel,
        l_ledat      TYPE ledat,
        lt_sto_items TYPE shp_sto_itm_t,
        lw_sto_item  TYPE shp_sto_itm,
        lt_dlv_items TYPE shp_dlv_itm_t,
        lw_dlv_item  TYPE shp_dlv_itm,
        lt_message   TYPE vbfs_t,
        lw_message   TYPE vbfs.
   DATA:l_ebelp TYPE ekpo-ebelp.

   SELECT SINGLE vstel INTO l_vstel" = ‘Z030‘.
   FROM ekpv
   WHERE ebeln = g_ebeln.

   l_ledat = sy-datum.
   l_ebelp = 10.
   LOOP AT gt_output INTO gw_output WHERE matnr IS NOT INITIAL.
     lw_sto_item-rfbel = g_ebeln.
     lw_sto_item-rfpos = l_ebelp.
     lw_sto_item-lfimg = gw_output-psmng.
     lw_sto_item-vrkme = gw_output-meins.
     APPEND lw_sto_item TO lt_sto_items.
     l_ebelp = l_ebelp + 10.
   ENDLOOP.

   CALL FUNCTION SHP_DELIVERY_CREATE_FROM_STO
     EXPORTING
       if_vstel     = l_vstel
       if_ledat     = l_ledat
       it_sto_items = lt_sto_items
     IMPORTING
       et_dlv_items = lt_dlv_items
       et_messages  = lt_message.

   CLEAR g_msg.
   READ TABLE lt_dlv_items INTO lw_dlv_item INDEX 1.
   IF lw_dlv_item-vbeln IS NOT INITIAL.
     CALL FUNCTION BAPI_TRANSACTION_COMMIT
       EXPORTING
         wait = X.

     g_vbeln = lw_dlv_item-vbeln.
     CONCATENATE 交货单号: g_vbeln INTO g_msg.
     gw_return-type = S.
     gw_return-message = g_msg.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

   ELSE.
     g_err_flag = X.
     CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.

     gw_return-type = E.
     gw_return-message = 交货单创建失败,原因如下:.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

     LOOP AT lt_message INTO lw_message WHERE msgty = E.
       gw_return-type = lw_message-msgty.
       gw_return-id = lw_message-msgid.
       gw_return-number = lw_message-msgno.
       gw_return-message_v1 = lw_message-msgv1.
       gw_return-message_v2 = lw_message-msgv2.
       gw_return-message_v3 = lw_message-msgv3.
       gw_return-message_v4 = lw_message-msgv4.

       MESSAGE ID gw_return-id TYPE gw_return-type NUMBER gw_return-number
       INTO gw_return-message WITH gw_return-message_v1 gw_return-message_v2
       gw_return-message_v3 gw_return-message_v4.
       APPEND gw_return TO gt_return.
       CLEAR gw_return.
     ENDLOOP.
   ENDIF.

   WAIT UP TO 1 SECONDS.
 ENDFORM.                    " FRM_CREATE_DELIVERY
FORM frm_vl02n_post .
   DATA: lv_wadat_ist LIKE likp-wadat_ist.
   DATA: lw_vbkok LIKE vbkok.
   DATA: lv_error TYPE xfeld.
   DATA: lw_vbpok LIKE vbpok,
         lw_prot  LIKE prott.
   DATA: lt_vbpok LIKE STANDARD TABLE OF vbpok,
         lt_prot  LIKE STANDARD TABLE OF prott.
   DATA: lv_msg TYPE string.
   DATA: lw_werks LIKE lips-werks.
   DATA:lv_check TYPE c.
   DATA:lt_lips TYPE TABLE OF lips,
        lw_lips TYPE          lips.

   CLEAR: lw_vbkok.
   "交货单上面的实际发货日期 WADAT_IST
   CLEAR: lv_wadat_ist.
   SELECT SINGLE wadat_ist
   INTO lv_wadat_ist
   FROM likp
   WHERE likp~vbeln = g_vbeln.

   SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_lips
     FROM lips WHERE vbeln = g_vbeln.

   IF lv_wadat_ist IS NOT INITIAL.
     lw_vbkok-wadat_ist = lv_wadat_ist. "实际货物移动日期
     lw_vbkok-wadat     = lv_wadat_ist. "发货日期 即过账日期
   ENDIF.

   "客户输入了过账日期,则最优先
   IF p_gzrq IS NOT INITIAL.
     lw_vbkok-wadat_ist = p_gzrq. "实际货物移动日期
     lw_vbkok-wadat     = p_gzrq. "发货日期 即过账日期
   ENDIF.

   lw_vbkok-vbeln_vl  = g_vbeln.
   lw_vbkok-wabuc     = X.

*   IF P_TL EQ ‘X‘.
*   LOOP AT lt_lips INTO lw_lips WHERE matnr IS NOT INITIAL.
*     lw_vbpok-vbeln_vl = g_vbeln.
*     lw_vbpok-posnr_vl = lw_lips-posnr.
*
*     lw_vbpok-vbeln = g_vbeln.
*     lw_vbpok-posnn = lw_lips-posnr.
*     lw_vbpok-matnr = lw_lips-matnr.
*     LW_VBPOK-WERKS = LW_LIPS-WERKS.
*     LW_VBPOK-PIKMG = LW_LIPS-LFIMG.
*     LW_VBPOK-kzlgo = ‘X‘.
*     lw_vbpok-lgort = ‘YK02‘.
*     APPEND lw_vbpok TO lt_vbpok.
*   ENDLOOP.
*   ENDIF.
   SET UPDATE TASK LOCAL  .

   CALL FUNCTION WS_DELIVERY_UPDATE
     EXPORTING
       vbkok_wa                  = lw_vbkok
       synchron                  =  
       no_messages_update        =  
       commit                    = X
       delivery                  = g_vbeln
       update_picking            = X
     IMPORTING
       ef_error_in_goods_issue_0 = lv_error
     TABLES
       vbpok_tab                 = lt_vbpok
       prot                      = lt_prot.

   CALL FUNCTION BAPI_TRANSACTION_COMMIT
     EXPORTING
       wait = X.

   CLEAR lv_check.
   CLEAR: lw_prot.
   LOOP AT lt_prot INTO lw_prot WHERE msgty = E OR msgty = A.
     lv_check = X.
     EXIT.
   ENDLOOP.

*--函数失败也会将过账日期写到货物移动日期
   DATA:lw_likp TYPE likp.
   CLEAR lw_likp.
   IF lv_check = X AND lv_wadat_ist IS INITIAL ."过账出错并且原来的货物移动日期为空,则清空货物移动日期
     SELECT SINGLE *
     INTO lw_likp
     FROM likp
     WHERE likp~vbeln = g_vbeln.

     CLEAR lw_likp-wadat_ist.
     MODIFY likp FROM  lw_likp .
     IF sy-subrc = 0.
       CALL FUNCTION BAPI_TRANSACTION_COMMIT
         EXPORTING
           wait = X.
     ELSE.
       CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.
     ENDIF.
   ENDIF.

   CLEAR g_msg.
   IF lv_check = X.
     g_err_flag = X.
     gw_return-type = E.
     gw_return-message = 交货单发货过账失败,原因如下:.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

     LOOP AT lt_prot INTO lw_prot WHERE msgty = E OR msgty = A.
       gw_return-type = lw_prot-msgty.
       gw_return-id = lw_prot-msgid.
       gw_return-number = lw_prot-msgno.
       gw_return-message_v1 = lw_prot-msgv1.
       gw_return-message_v2 = lw_prot-msgv2.
       gw_return-message_v3 = lw_prot-msgv3.
       gw_return-message_v4 = lw_prot-msgv4.

       MESSAGE ID gw_return-id TYPE gw_return-type NUMBER gw_return-number
       INTO gw_return-message WITH gw_return-message_v1 gw_return-message_v2
       gw_return-message_v3 gw_return-message_v4.
       APPEND gw_return TO gt_return.
       CLEAR gw_return.
     ENDLOOP.

   ELSE.
     gw_return-type = S.
     gw_return-message = 交货单发货过账成功.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.
   ENDIF.

 ENDFORM.                    " FRM_VL02N_POST
 FORM frm_goodsmvt_create .
   DATA:lw_header TYPE          bapi2017_gm_head_01,
        lw_mblnr  TYPE          bapi2017_gm_head_ret,
        lt_item   TYPE TABLE OF bapi2017_gm_item_create,
        lw_item   TYPE          bapi2017_gm_item_create,
        lt_return TYPE TABLE OF bapiret2,
        lw_return TYPE          bapiret2.
   DATA:l_code TYPE bapi2017_gm_code.
   DATA:l_ebelp TYPE ekpo-ebelp.

   l_code = 01.
   lw_header-pstng_date = p_gzrq.
   lw_header-doc_date = sy-datum.

   l_ebelp = 10.
   LOOP AT gt_output INTO gw_output WHERE matnr IS NOT INITIAL.
     lw_item-material = gw_output-matnr.
     lw_item-plant = 2001.

     lw_item-entry_qnt = gw_output-psmng.
     lw_item-entry_uom = gw_output-meins.
     "lw_item-plant = ‘2001‘.
     IF p_fl = X.
       lw_item-move_type = 101.
     ELSE.
       lw_item-move_type = 161.
     ENDIF.

     IF lw_item-move_type = 161.
       lw_item-move_type  = 101.
       "  lw_item-xstob   = ‘X‘.
     ENDIF.
     CLEAR gw_marc.
     READ TABLE gt_marc INTO gw_marc WITH KEY werks = 2001 matnr = gw_output-matnr BINARY SEARCH.
     IF gw_marc-lgpro IS NOT INITIAL.
       lw_item-stge_loc = gw_marc-lgpro.
     ELSE.
       lw_item-stge_loc = gw_output-lgort.
     ENDIF.
     lw_item-po_number = g_ebeln.
     lw_item-po_item = l_ebelp.
     lw_item-no_more_gr = X.
     lw_item-mvt_ind = B.
     APPEND lw_item TO lt_item.
     l_ebelp = l_ebelp + 10.
   ENDLOOP.

   CALL FUNCTION BAPI_GOODSMVT_CREATE
     EXPORTING
       goodsmvt_header  = lw_header
       goodsmvt_code    = l_code
     IMPORTING
       goodsmvt_headret = lw_mblnr
     TABLES
       goodsmvt_item    = lt_item
       return           = lt_return.

   CLEAR g_msg.
   IF lw_mblnr IS INITIAL.
     CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.

     g_err_flag = X.
     gw_return-type = E.
     IF p_fl = X.
       gw_return-message = 采购订单入库失败,原因如下:.
     ELSE.
       gw_return-message = 采购订单退料失败,原因如下:.
     ENDIF.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

     DELETE lt_return WHERE type NE E.

     APPEND LINES OF lt_return TO gt_return.
     CLEAR gw_return.
   ELSE.
     CALL FUNCTION BAPI_TRANSACTION_COMMIT
       EXPORTING
         wait = X.

     g_mblnr1 = lw_mblnr-mat_doc.
     IF p_fl = X.
       CONCATENATE 采购订单入库物料凭证: g_mblnr1 INTO g_msg.
     ELSE.
       CONCATENATE 采购订单退料物料凭证: g_mblnr1 INTO g_msg.
     ENDIF.
     gw_return-type = S.
     gw_return-message = g_msg.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.
   ENDIF.

   WAIT UP TO 1 SECONDS.
 ENDFORM.                    " FRM_GOODSMVT_CREATE
 FORM frm_prodorder_ltl  .
   DATA:lw_header TYPE          bapi2017_gm_head_01,
        lw_mblnr  TYPE          bapi2017_gm_head_ret,
        lt_item   TYPE TABLE OF bapi2017_gm_item_create,
        lw_item   TYPE          bapi2017_gm_item_create,
        lt_return TYPE TABLE OF bapiret2,
        lw_return TYPE          bapiret2.
   DATA:l_code TYPE bapi2017_gm_code.

   lw_header-pstng_date = p_gzrq.
   lw_header-doc_date =  sy-datum.
   lw_header-pr_uname = sy-uname.

   CHECK gt_output IS NOT INITIAL.

   l_code = 03.              "03 - MB1A - Goods Issue

   LOOP AT gt_output INTO gw_output WHERE matnr IS NOT INITIAL.

     lw_item-material = gw_output-matnr.
     lw_item-plant = 2001.
     CLEAR gw_marc.
     READ TABLE gt_marc INTO gw_marc WITH KEY werks = 2001 matnr = gw_output-matnr BINARY SEARCH.
     IF gw_marc-lgpro IS NOT INITIAL.
       lw_item-stge_loc = gw_marc-lgpro.
     ELSE.
       lw_item-stge_loc = gw_output-lgort.
     ENDIF.

     IF p_fl = X.
       lw_item-move_type = 261.
     ELSE.
       lw_item-move_type = 262.
     ENDIF.

     IF lw_item-move_type = 262.
       lw_item-move_type  = 261.
       lw_item-xstob   = X.
     ENDIF.

     lw_item-entry_uom = gw_output-meins.        "单位 KAR&BOT
     lw_item-orderid   = gw_output-aufnr.        "生产订单号
     lw_item-unload_pt = gw_output-zbanc.        "班次
     lw_item-mvt_ind   = ‘‘.

     lw_item-entry_qnt = gw_output-psmng.
     lw_item-item_text = gw_output-zbz.

     CLEAR gw_resb.
     READ TABLE gt_resb INTO gw_resb WITH KEY aufnr = gw_output-aufnr matnr = gw_output-matnr BINARY SEARCH.
     lw_item-reserv_no = gw_resb-rsnum.
     lw_item-res_item  = gw_resb-rspos.

     APPEND lw_item TO lt_item.
     CLEAR:lw_item.
   ENDLOOP.

   CALL FUNCTION BAPI_GOODSMVT_CREATE
     EXPORTING
       goodsmvt_header  = lw_header
       goodsmvt_code    = l_code
     IMPORTING
       goodsmvt_headret = lw_mblnr
     TABLES
       goodsmvt_item    = lt_item
       return           = lt_return.
*如果过帐失败
   IF lw_mblnr IS INITIAL.
     CALL FUNCTION BAPI_TRANSACTION_ROLLBACK.

     g_err_flag = X.
     gw_return-type = E.
     IF p_fl EQ X.
       gw_return-message = 生产订单发料失败,原因如下:.
     ELSE.
       gw_return-message = 生产订单退料失败,原因如下:.
     ENDIF.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.

     DELETE lt_return WHERE type NE E.
     APPEND LINES OF lt_return TO gt_return.
     CLEAR gw_return.

   ELSE.
     CALL FUNCTION BAPI_TRANSACTION_COMMIT
       EXPORTING
         wait = X.

     g_mblnr2 = lw_mblnr-mat_doc.
     IF p_fl EQ X.
       CONCATENATE 生产订单发料物料凭证: g_mblnr2 INTO g_msg.
     ELSE.
       CONCATENATE 生产订单退料物料凭证: g_mblnr2 INTO g_msg.
     ENDIF.
     gw_return-type = S.
     gw_return-message = g_msg.
     APPEND gw_return TO gt_return.
     CLEAR gw_return.
   ENDIF.

   IF p_tl EQ X.
     WAIT UP TO 1 SECONDS.
   ENDIF.
 ENDFORM.                    " FRM_PRODORDER_SFL

 

懒得写了,直接复制代码了。。。跨公司发料到订单和退料