二维码

[BAPI] ME52N修改采购申请BAPI_REQUISITION_CHANGE

Twilight发表于 2019-06-10 16:09Twilight 最后回复于 2019-06-10 16:09 [复制链接] 4992 0


修改采购申请也有两个BAPI:BAPI_REQUISITION_CHANGE /BAPI_PR_CHANGE,BAPI_PR_CHANGE除了支持BOM的PR修改,其次修改的字段比BAPI_REQUISITION_CHANGE多

程序代码:
  1. FUNCTION zpufm003.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口
  4. *"  IMPORTING
  5. *"     VALUE(I_BANFN) TYPE  BANFN
  6. *"  EXPORTING
  7. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  8. *"  TABLES
  9. *"      T_ITEM STRUCTURE  ZPUS003
  10. *"      T_TEXT STRUCTURE  ZPUS004 OPTIONAL
  11. *"      T_ACCOUNT STRUCTURE  ZPUS005 OPTIONAL
  12. *"----------------------------------------------------------------------

  13.   DATA:lt_items   TYPE TABLE OF bapieban   WITH HEADER LINE.
  14.   DATA:lt_account TYPE TABLE OF bapiebkn   WITH HEADER LINE.
  15.   DATA:lt_text    TYPE TABLE OF bapiebantx WITH HEADER LINE.
  16.   DATA:lt_items_old   TYPE TABLE OF bapiebanv WITH HEADER LINE.
  17.   DATA:lt_account_old TYPE TABLE OF bapiebknv WITH HEADER LINE.
  18.   DATA:lt_text_old    TYPE TABLE OF bapiebantx WITH HEADER LINE.
  19.   DATA:lt_items_new   TYPE TABLE OF bapiebanv  WITH HEADER LINE.
  20.   DATA:lt_account_new TYPE TABLE OF bapiebknv  WITH HEADER LINE.
  21.   DATA:lt_text_new    TYPE TABLE OF bapiebantx WITH HEADER LINE.
  22.   DATA:lt_return TYPE TABLE OF bapireturn WITH HEADER LINE.

  23.   PERFORM frm_inputsap_banfn CHANGING i_banfn.

  24.   CALL FUNCTION 'BAPI_REQUISITION_GETDETAIL'
  25.     EXPORTING
  26.       number                         = i_banfn
  27.       account_assignment             = 'X'
  28.       item_texts                     = 'X'
  29.     TABLES
  30.       requisition_items              = lt_items
  31.       requisition_account_assignment = lt_account
  32.       requisition_text               = lt_text
  33.       return                         = lt_return.
  34.   LOOP AT lt_return WHERE type CA 'AEX'.
  35.     IF e_message-message IS INITIAL.
  36.       e_message-message   = lt_return-message.
  37.     ELSE.
  38.       CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  39.     ENDIF.
  40.   ENDLOOP.
  41.   IF sy-subrc = 0.
  42.     e_message-type   = 'E'.
  43.   ELSE.
  44. *-->采购申请基本数据
  45.     LOOP AT t_item.
  46.       READ TABLE lt_items WITH KEY preq_item = t_item-bnfpo.
  47.       IF sy-subrc = 0.
  48.         CLEAR:lt_items_new,lt_items_old.
  49.         MOVE-CORRESPONDING lt_items TO lt_items_old.
  50.         APPEND lt_items_old.

  51.         MOVE-CORRESPONDING lt_items TO lt_items_new.
  52.         IF t_item-flief IS NOT INITIAL.
  53.           PERFORM frm_conv_input CHANGING t_item-flief.
  54.         ENDIF.
  55.         IF t_item-infnr IS NOT INITIAL.
  56.           PERFORM frm_conv_input CHANGING t_item-infnr.
  57.         ENDIF.
  58.         IF t_item-lifnr IS NOT INITIAL.
  59.           PERFORM frm_conv_input CHANGING t_item-lifnr.
  60.         ENDIF.
  61.         lt_items_new-preq_item = t_item-bnfpo.
  62. *        lt_items_new-doc_type  = t_item-bsart.
  63. *        lt_items_new-item_cat = t_item-pstyp.
  64. *        lt_items_new-acctasscat = t_item-knttp.
  65.         lt_items_new-distrib = t_item-vrtkz.
  66. *        IF t_item-matnr IS NOT INITIAL.
  67. *          PERFORM frm_conversion_matnr_input CHANGING t_item-matnr.
  68. *          lt_items_new-material = t_item-matnr.
  69. *        ENDIF.
  70.         lt_items_new-batch      = t_item-charg.
  71.         lt_items_new-short_text = t_item-txz01.
  72.         lt_items_new-mat_grp    = t_item-matkl.
  73.         lt_items_new-vend_mat   = t_item-idnlf.
  74.         lt_items_new-quantity   = t_item-menge.
  75.         lt_items_new-unit       = t_item-meins.
  76.         lt_items_new-del_datcat = t_item-lpein.
  77.         lt_items_new-deliv_date = t_item-lfdat.
  78. *        lt_items_new-preq_date = t_item-badat.
  79.         lt_items_new-rel_date   = t_item-frgdt.
  80.         lt_items_new-gr_ind     = t_item-wepos.
  81.         lt_items_new-gr_non_val = t_item-weunb.
  82.         lt_items_new-ir_ind     = t_item-repos.
  83.         lt_items_new-agreement  = t_item-konnr.
  84.         lt_items_new-agmt_item  = t_item-ktpnr.
  85.         lt_items_new-fixed_vend = t_item-flief.
  86.         lt_items_new-info_rec   = t_item-infnr.
  87.         lt_items_new-des_vendor = t_item-lifnr.
  88.         lt_items_new-purch_org  = t_item-ekorg.
  89. *        lt_items_new-suppl_plnt = t_item-reswk.
  90. *        lt_items_new-req_blocked = t_item-blckd.
  91. *        lt_items_new-reason_blocking = t_item-blckt.
  92. *        lt_items_new-preq_name = t_item-afnam.
  93.         lt_items_new-trackingno = t_item-bednr.
  94.         lt_items_new-pur_group  = t_item-ekgrp.
  95. *        lt_items_new-mrp_contr = t_item-dispo.
  96. *        lt_items_new-plant = t_item-werks.
  97.         lt_items_new-store_loc  = t_item-lgort.
  98. *        lt_items_new-delete_ind = t_item-LOEKZ.
  99.         APPEND lt_items_new.
  100.       ENDIF.
  101.     ENDLOOP.

  102. *-->科目分配
  103.     LOOP AT t_account.
  104.       READ TABLE lt_account WITH KEY preq_item = t_account-bnfpo.
  105.       IF sy-subrc = 0.
  106.         CLEAR:lt_items_new,lt_account_old.
  107.         MOVE-CORRESPONDING lt_account TO lt_account_old.
  108.         APPEND lt_account_old.

  109.         MOVE-CORRESPONDING lt_account TO lt_account_new.
  110.         IF t_account-sakto IS NOT INITIAL.
  111.           PERFORM frm_conv_input CHANGING t_account-sakto.
  112.         ENDIF.
  113.         IF t_account-kostl IS NOT INITIAL.
  114.           PERFORM frm_conv_input CHANGING t_account-kostl.
  115.         ENDIF.
  116.         IF t_account-anln1 IS NOT INITIAL.
  117.           PERFORM frm_conv_input CHANGING t_account-anln1.
  118.         ENDIF.
  119.         IF t_account-anln2 IS NOT INITIAL.
  120.           PERFORM frm_conv_input CHANGING t_account-anln2.
  121.         ENDIF.
  122.         IF t_account-aufnr IS NOT INITIAL.
  123.           PERFORM frm_conv_input CHANGING t_account-aufnr.
  124.         ENDIF.
  125.         IF t_account-vbeln IS NOT INITIAL.
  126.           PERFORM frm_conv_input CHANGING t_account-vbeln.
  127.         ENDIF.
  128.         lt_account_new-preq_item = t_account-bnfpo.
  129.         lt_account_new-serial_no = t_account-dzebkn.
  130.         lt_account_new-preq_qty  = t_account-menge.
  131.         lt_account_new-unload_pt = t_account-ablad.
  132.         lt_account_new-g_l_acct  = t_account-sakto.
  133.         lt_account_new-co_area   = t_account-kokrs.
  134.         lt_account_new-cost_ctr  = t_account-kostl.
  135.         lt_account_new-asset_no  = t_account-anln1.
  136.         lt_account_new-sub_number = t_account-anln2.
  137.         lt_account_new-order_no  = t_account-aufnr.
  138.         lt_account_new-sd_doc    = t_account-vbeln.
  139.         lt_account_new-sdoc_item = t_account-vbelp.
  140.         lt_account_new-delete_ind = t_account-loekz.
  141.         APPEND lt_account_new.
  142.       ENDIF.
  143.     ENDLOOP.
  144. *-->抬头&项目文本
  145.     LOOP AT lt_text.
  146.       CLEAR:lt_text_old.
  147.       MOVE-CORRESPONDING lt_text TO lt_text_old.
  148.       APPEND lt_text_old.
  149.     ENDLOOP.
  150.     LOOP AT t_text.
  151.       CLEAR:lt_text_new.
  152.       MOVE-CORRESPONDING t_text TO lt_text_new.
  153.       lt_text_new-preq_no    = t_text-banfn.
  154.       lt_text_new-preq_item  = t_text-bnfpo.
  155.       APPEND lt_text_new.
  156.     ENDLOOP.

  157.     CALL FUNCTION 'BAPI_REQUISITION_CHANGE'
  158.       EXPORTING
  159.         number                  = i_banfn
  160.       TABLES
  161.         requisition_items_old   = lt_items_old
  162.         requisition_items_new   = lt_items_new
  163.         requisition_account_old = lt_account_old
  164.         requisition_account_new = lt_account_new
  165.         requisition_text_old    = lt_text_old
  166.         requisition_text_new    = lt_text_new
  167.         return                  = lt_return.
  168.   ENDIF.

  169.   LOOP AT lt_return WHERE type CA 'AEX'.
  170.     IF e_message-message IS INITIAL.
  171.       e_message-message   = lt_return-message.
  172.     ELSE.
  173.       CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  174.     ENDIF.
  175.   ENDLOOP.
  176.   IF sy-subrc = 0.
  177.     CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  178.     e_message-type   = 'E'.
  179.   ELSE.
  180.     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  181.       EXPORTING
  182.         wait = 'X'.
  183.     e_message-type    = 'S'.
  184.     e_message-message = '采购申请修改成功!'.
  185.   ENDIF.

  186. ENDFUNCTION.
  187. FORM frm_inputsap_banfn CHANGING pc_vbeln TYPE eban-banfn.
  188.   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  189.     EXPORTING
  190.       input  = pc_vbeln
  191.     IMPORTING
  192.       output = pc_vbeln.
  193. ENDFORM.
复制代码


回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表