创建采购订单

    1. 前台创建

 

事务代码:me21n

 

 

    1. BP实现

 

*&---------------------------------------------------------------------*
*& Report ZTEST001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST001.

"""创建采购订单

DATA:gs_poheader           TYPE                   bapimepoheader,
     gs_poheaderx          TYPE                   bapimepoheaderx,
     gt_return             TYPE STANDARD TABLE OF bapiret2,
     gwa_return            TYPE                   bapiret2,
     gt_item               TYPE STANDARD TABLE OF bapimepoitem,
     gwa_item              TYPE                   bapimepoitem,
     gt_itemx              TYPE STANDARD TABLE OF bapimepoitemx,
     gwa_itemx             TYPE                   bapimepoitemx,
     gt_poschedule         TYPE STANDARD TABLE OF bapimeposchedule,
     gwa_poschedule        TYPE                   bapimeposchedule,
     gt_poschedulex        TYPE STANDARD TABLE OF bapimeposchedulx,
     gwa_poschedulex       TYPE                   bapimeposchedulx,
     gt_pocomponents       TYPE STANDARD TABLE OF bapimepocomponent,
     gwa_pocomponents      TYPE                   bapimepocomponent,
     gwa_pocomponents_temp TYPE                   bapimepocomponent,
     gt_pocomponentsx      TYPE STANDARD TABLE OF bapimepocomponentx,
     gwa_pocomponentsx     TYPE                   bapimepocomponentx.
DATA:lv_num TYPE bapimepoheader-po_number.


"抬头
gs_poheader-doc_type  'Z02'."采购订单类型
gs_poheader-PO_NUMBER  '2190400015'."采购凭证编号


"抬头创建标志
gs_poheaderx-doc_type 'X'.
gs_poheaderx-PO_NUMBER  'X'."采购凭证编号


"行项目
gwa_item-po_item '00010'"采购凭证的项目编号
gwa_item-quantity 10."采购订单数量
gwa_item-AGREEMENT '3190400002'.主采购协议号
APPEND gwa_item TO gt_item.

gwa_itemx-po_item '00010'"采购凭证的项目编号
gwa_itemx-quantity 'X'采购订单数量
gwa_itemx-AGREEMENT 'X'.主采购协议号
APPEND gwa_itemx TO gt_itemx.





CALL FUNCTION 'BAPI_PO_CREATE1'
  EXPORTING
    poheader         gs_poheader
    poheaderx        
gs_poheaderx
*   POADDRVENDOR     =
*   TESTRUN          =
*   MEMORY_UNCOMPLETE            =
*   MEMORY_COMPLETE  =
*   POEXPIMPHEADER   =
*   POEXPIMPHEADERX  =
*   VERSIONS         =
*   NO_MESSAGING     =
*   NO_MESSAGE_REQ   =
*   NO_AUTHORITY     =
    no_price_from_po 'X'
*   PARK_COMPLETE    =
*   PARK_UNCOMPLETE  =
  IMPORTING
    exppurchaseorder lv_num
*   EXPHEADER        =
*   EXPPOEXPIMPHEADER            =
  TABLES
    return           gt_return
    poitem           
gt_item
    poitemx          
gt_itemx
*   POADDRDELIVERY   =
    poschedule       gt_poschedule
    poschedulex      
gt_poschedulex
*   POACCOUNT        =
*   POACCOUNTPROFITSEGMENT       =
*   POACCOUNTX       =
*   POCONDHEADER     =
*   POCONDHEADERX    =
*    pocond           = gt_pocond
*    pocondx          = gt_pocondx
*   POLIMITS         =
*   POCONTRACTLIMITS =
*   POSERVICES       =
*   POSRVACCESSVALUES            =
*   POSERVICESTEXT   =
*   EXTENSIONIN      =
*   EXTENSIONOUT     =
*   POEXPIMPITEM     =
*   POEXPIMPITEMX    =
*   POTEXTHEADER     =
*   POTEXTITEM       =
*   ALLVERSIONS      =
*   POPARTNER        =
    pocomponents     gt_pocomponents
    pocomponentsx    
gt_pocomponentsx.

IF sy-subrc 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait 'X'.
  WRITE:'采购订单成功创建:',lv_num.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

 

FUNCTION zfmm02.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(LT_CG) TYPE  ZTTMM02
*"  EXPORTING
*"     VALUE(LS_SIGN) TYPE  ZESIGN
*"     VALUE(LS_MESSAGE) TYPE  ZEMESSAGE
*"     VALUE(O_EBELN) TYPE  EBELN
*"----------------------------------------------------------------------

  DATAgt_cg TYPE STANDARD TABLE OF zsmm02,
        gs_cg TYPE zsmm02.

  SELECT
    ekpo~ebeln 采购凭证编号
    ekpo~ematn 物料
    ekpo~ebelp ,
    ekpo~matnr
    
FROM ekpo
      
INTO TABLE @DATA(gt_ekpo)
    FOR ALL ENTRIES IN @lt_cg
    
WHERE ebeln @lt_cg-ebeln.
*      AND matnr = @lt_cg-matnr.

  LOOP AT lt_cg INTO DATA(ls_cg).
    READ TABLE gt_ekpo INTO DATA(gs_ekpoWITH KEY ebeln ls_cg-ebeln matnr+22(18) = ls_cg-matnr.
    IF sy-subrc 0.
      ls_cg-ktpnr gs_ekpo-ebelp.
    ENDIF.
    gs_cg ls_cg.
    APPEND gs_cg TO gt_cg.
    CLEAR gs_cg.

  ENDLOOP.

  SORT gt_cg BY bsart ebeln ebelp.

  """创建采购订单
  DATA:gs_poheader          TYPE                   bapimepoheader,
       gs_poheaderx         TYPE                   bapimepoheaderx,
       gt_return            TYPE STANDARD TABLE OF bapiret2,
       gs_return            TYPE                   bapiret2,
       gt_item              TYPE STANDARD TABLE OF bapimepoitem,
       gs_item              TYPE                   bapimepoitem,
       gt_itemx             TYPE STANDARD TABLE OF bapimepoitemx,
       gs_itemx             TYPE                   bapimepoitemx,
       gt_poschedule        TYPE STANDARD TABLE OF bapimeposchedule,
       gs_poschedule        TYPE                   bapimeposchedule,
       gt_poschedulex       TYPE STANDARD TABLE OF bapimeposchedulx,
       gs_poschedulex       TYPE                   bapimeposchedulx,
       gt_pocomponents      TYPE STANDARD TABLE OF bapimepocomponent,
       gs_pocomponents      TYPE                   bapimepocomponent,
       gs_pocomponents_temp TYPE                   bapimepocomponent,
       gt_pocomponentsx     TYPE STANDARD TABLE OF bapimepocomponentx,
       gs_pocomponentsx     TYPE                   bapimepocomponentx.
  DATA:lv_num TYPE bapimepoheader-po_number.


  LOOP AT gt_cg INTO gs_cg.
    "抬头
    gs_poheader-doc_type  gs_cg-bsart .  "'Z02'."采购订单类型
    gs_poheader-po_number  gs_cg-ebeln "'2190400017'."采购凭证编号
    "抬头创建标志
    gs_poheaderx-doc_type 'X'.
    gs_poheaderx-po_number  'X'.         "采购凭证编号


    "行项目
    gs_item-po_item   gs_cg-ebelp.       "'00010'. "采购凭证的项目编号
    gs_item-quantity  gs_cg-menge.                "采购订单数量
*    gs_item-PLANT     = 1000.              "工厂
    gs_item-agreement gs_cg-evrtn . .      主采购协议号
    APPEND gs_item TO gt_item.
    gs_itemx-po_item   gs_cg-ktpnr.      "采购凭证的项目编号
    gs_itemx-quantity  'X'.              采购订单数量
*    gs_itemx-PLANT     =   'X'.            "工厂
    gs_itemx-agreement 'X'.              主采购协议号
    APPEND gs_itemx TO gt_itemx.

    AT END OF ebeln.
      CALL FUNCTION 'BAPI_PO_CREATE1'
        EXPORTING
          poheader         gs_poheader
          poheaderx        
gs_poheaderx
          no_price_from_po 
'X'
        IMPORTING
          exppurchaseorder lv_num
        
TABLES
          return           gt_return
          poitem           
gt_item
          poitemx          
gt_itemx
          poschedule       
gt_poschedule
          poschedulex      
gt_poschedulex
          pocomponents     
gt_pocomponents
          pocomponentsx    
gt_pocomponentsx.

      LOOP AT gt_return INTO gs_return WHERE type 'E' OR type 'A'.
        ls_sign 'E'.
      ENDLOOP.
      IF ls_sign <> 'E'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait 'X'.
        ls_sign 'S'.
        ls_message '采购申请创建成功'.
        o_ebeln =  lv_num.
        ELSE.
          ls_sign 'E'.
          LOOP AT gt_return INTO gs_return WHERE type 'E' OR type 'A' .
            ls_message ls_message && gs_return-message.
          ENDLOOP.
        ENDIF.
      ENDAT.


    ENDLOOP.




  ENDFUNCTION.

猜你喜欢

转载自blog.csdn.net/z_x_xing_/article/details/90075939