BAPI_PRODORD_CREATE_FROM_REF 参考创建生产订单

  1. 参考创建可以修改订单类型
  2. 自带commit 无需commit,call前如果有没提交的先commit掉
  3. 如果报错(前推式计划)之后,再返回上一个屏幕会dump
  4. 不会复制“分配”页签的WBS要素
  5. 建议直接BDC

 

 

DEMO

loop at gt_alv2 where aufnr_new is initial.

 

*参考创建新工单

*BAPI

    data ls_refcopy      type bapi_order_copy.

    data lv_order_number type bapi_order_copy-order_number.

    data lv_order_type   type bapi_order_copy-order_type.

    data ls_return       type bapiret2.

 

    clear:ls_refcopy,lv_order_type,ls_return.

    ls_refcopy-reference_order = gt_alv2-aufnr.

    ls_refcopy-basic_end_date = gt_alv2-gltrp_new.

 

    set update task local.

    call function 'BAPI_PRODORD_CREATE_FROM_REF'

      exporting

        refcopy      = ls_refcopy

      importing

        order_number = lv_order_number

        order_type   = lv_order_type

        return       = ls_return.

 

    if lv_order_number is not initial.

      perform frm_lock using lv_order_number.

      gt_alv2-rtype = 'S'.

      gt_alv2-rtmsg = '订单创建成功;'.

      gt_alv2-aufnr_new = lv_order_number.

 

      call function 'BAPI_TRANSACTION_COMMIT'

        exporting

          wait = 'X'.

 

*修改工单数量

      perform frm_pro_quantity_change using lv_order_number gt_alv2-gamng_new changing gt_alv2-rtype gt_alv2-rtmsg.

    else.

      call function 'BAPI_TRANSACTION_ROLLBACK'.

      gt_alv2-rtype = 'E'.

      message id ls_return-id type ls_return-type number ls_return-number

        with ls_return-message_v1 ls_return-message_v2

             ls_return-message_v3 ls_return-message_v4

             into  gt_alv2-rtmsg.

    endif.

    modify gt_alv2.

  endloop.

 

*修改原工单数量

  read table gt_alv2 into data(ls_alv2) with key rtype = 'E'.

  if sy-subrc ne 0.

    read table gt_alv2 into ls_alv2 index 1.

    if ls_alv2-gamng_new = 0. "打删除标识

      perform frm_pro_del using ls_alv2-aufnr changing ls_alv2-rtype ls_alv2-rtmsg.

    else. "修改数量

      perform frm_pro_quantity_change using ls_alv2-aufnr ls_alv2-gamng_new changing ls_alv2-rtype ls_alv2-rtmsg.

    endif.

    modify gt_alv2 from ls_alv2 index 1 transporting rtype rtmsg.

  endif.

 

form frm_lock  using uv_key .

 

  data mode_aufk type enqmode.

  data mandt     type aufk-mandt.

  data aufnr     type aufk-aufnr.

 

  aufnr = uv_key.

 

  call function 'ENQUEUE_ESORDER'

    exporting

      mode_aufk      = 'E'

      mandt          = sy-mandt

      aufnr          = aufnr

      x_aufnr        = ' '

      _scope         = '1'

      _wait          = ' '

      _collect       = ' '

    exceptions

      foreign_lock   = 1

      system_failure = 2.

  if sy-subrc ne 0.

*    cv_rtype = 'E'.

    message id sy-msgid

      type sy-msgty

      number sy-msgno

      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4

*       into cv_rtmsg

       .

    return.

  endif.

endform.

 

猜你喜欢

转载自blog.csdn.net/cylcylcylcylwo/article/details/113929341
今日推荐