Purchase Request 内容

  • PR Header : 采购订单编号、供应商、货币、付款期限、采购订单日期

  • PR Item : 物料编号、短文本、发货日期、采购订单数量、采购订单价格、分类

BAPI:

  • ME51N:BAPI_PR_CREATE & BAPI_PR_CHANGE

  • ME51:BAPI_REQUISITION_CREATE & BAPI_REQUISITION_CHANGE

BAPI_PR_CREATE 实例

DATA:PREQ_NO      TYPE  BAPIMEREQHEADER-PREQ_NO,
     PRHEADER    TYPE  BAPIMEREQHEADER,
     PRHEADERX   TYPE  BAPIMEREQHEADERX,
     RETURN      TYPE TABLE OF  BAPIRET2 WITH HEADER LINE,
     PRITEM   TYPE TABLE OF BAPIMEREQITEMIMP WITH HEADER LINE,
     PRITEMX  TYPE TABLE OF BAPIMEREQITEMX WITH HEADER LINE.
DATA:LV_POS TYPE I.
" Fill Header "
PRHEADER-PR_TYPE = 'NB'.
PRHEADERX-PR_TYPE = 'X'.
" Fill Item "
PRITEM-PREQ_ITEM = LV_POS. " Item Number of Purchase Requisition "
PRITEM-PUR_GROUP = '011'.  " Purchasing Group "
PRITEM-MATERIAL = LV_MATNR.
PRITEM-PLANT    = LV_PLANT.
PRITEM-STORE_LOC = LV_LGORT. 
PRITEM-QUANTITY = LV_MENGE.
PRITEM-UNIT     = LV_MEINS.
PRITEM-DELIV_DATE = SY_DATUM. "Delivery Date of Goods"
APPEND PRITEM.

PRITEMX-PREQ_ITEM = LV_POS.
PRITEMX-PREQ_ITEMX = 'X'.
PRITEMX-PUR_GROUP = 'X'.
PRITEMX-PREQ_NAME = 'X'.
PRITEMX-MATERIAL = 'X'.
PRITEMX-PLANT = 'X'.
PRITEMX-STORE_LOC = 'X'.
PRITEMX-QUANTITY = 'X'.
PRITEMX-UNIT = 'X'.
PRITEMX-DELIV_DATE = 'X'.
APPEND PRITEMX.  

CALL FUNCTION 'BAPI_PR_CREATE'
  EXPORTING
    PRHEADER              = PRHEADER
    PRHEADERX             = PRHEADERX
    TESTRUN               = TESTRUN
  IMPORTING
    NUMBER                = PREQ_NO
    PRHEADEREXP           = PRHEADEREXP
  TABLES
    RETURN                = RETURN
    PRITEM                = PRITEM
    PRITEMX               = PRITEMX.

READ TABLE RETURN WITH KEY TYPE = 'E' TRANSPORTING NO FIELDS.
IF SY-SUBRC NE 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
ELSE.
  CLEAR PREQ_NO.
ENDIF.

BAPI_REQUISITION_CREATE

Demo1

FORM create_pr_batch .
  DATA: BEGIN OF gt_data1 OCCURS 0,
    bsart   TYPE string, "凭证类型"
    bnfpo   TYPE string, "项目"
*   KNTTP   TYPE STRING, "科目分配类别"
    matnr   TYPE string, "商品代码"
*   TXZ01   TYPE STRING, "短文本"
    menge   TYPE string, "数量"
    meins   TYPE string, "单位"
    eeind   TYPE string, "交货日期"
*   MATKL   TYPE STRING, "物料组"
    werks   TYPE string, "工厂"
    ekgrp   TYPE string, "采购组"
    afnam   TYPE string, "申请者"
    bednr   TYPE string, "需求跟踪号"
    sakto   TYPE string, "总帐科目"
    kostl   TYPE string, "成本中心"
    anln1   TYPE string, "资产"
    aufnr   TYPE string, "订单"
    waers   TYPE string, "币种"
    peinh   TYPE string, "价格单位"
    dispo   TYPE string, "MRP控制者"
    str1    TYPE string, "行项目文本-传送文本"
    str2    TYPE string, "行项目文本-预算年度"
    str3    TYPE string, "行项目文本-资产类别"
  END OF gt_data1.
  DATA: BEGIN OF gt_data OCCURS 0,
    bednr   TYPE string, "需求跟踪号"
    bsart   TYPE string, "凭证类型"
    bnfpo   TYPE string, "项目"
*   KNTTP   TYPE STRING, "科目分配类别"
    matnr   TYPE string, "商品代码"
*   TXZ01   TYPE STRING, "短文本"
    menge   TYPE string, "数量"
    meins   TYPE string, "单位"
    eeind   TYPE string, "交货日期"
*   MATKL   TYPE STRING, "物料组"
    werks   TYPE string, "工厂"
    ekgrp   TYPE string, "采购组"
    afnam   TYPE string, "申请者"
    sakto   TYPE string, "总帐科目"
    kostl   TYPE string, "成本中心"
    anln1   TYPE string, "资产"
    aufnr   TYPE string, "订单"
    preis   TYPE string, "评估价格"
    waers   TYPE string, "币种"
    peinh   TYPE string, "价格单位"
    dispo   TYPE string, "MRP控制者"
    str1    TYPE string, "行项目文本-传送文本"
    str2    TYPE string, "行项目文本-预算年度"
    str3    TYPE string, "行项目文本-资产类别"
  END OF gt_data.
  "=============== Upload File ==============="
  LOOP AT gt_data.
    bnfpo = gt_data-bnfpo.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = bnfpo
      IMPORTING
        output = bnfpo.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gt_data-matnr
      IMPORTING
        output = matnr.
    pr_item-doc_type          = gt_data-bsart.     "凭证类型"
    pr_item-preq_item         = bnfpo.             "项目"
*   PR_ITEM-ACCTASSCAT        = GT_DATA-KNTTP.     "科目分配类别"
    pr_item-material          = matnr.             "商品代码"
*   PR_ITEM-SHORT_TEXT        = GT_DATA-TXZ01.     "短文本"
    pr_item-quantity          = gt_data-menge.     "数量"
    pr_item-unit              = gt_data-meins.     "单位"
    pr_item-deliv_date        = gt_data-eeind.     "交货日期"
*    PR_ITEM-MAT_GRP          = GT_DATA-MATKL.     "物料组"
    pr_item-plant             = gt_data-werks.     "工厂"
    pr_item-pur_group         = gt_data-ekgrp.     "采购组"
    pr_item-preq_name         = gt_data-afnam.     "申请者"
    pr_item-trackingno        = gt_data-bednr.     "需求跟踪号"
    pr_item-c_amt_bapi        = gt_data-preis.     "评估价格"
    pr_item-currency          = gt_data-waers.     "货币码"
    pr_item-price_unit        = gt_data-peinh.     "价格单位"
    pr_item-mrp_contr         = gt_data-dispo.     "MRP控制者"
    APPEND pr_item.
    CLEAR pr_item.
    pr_account-preq_item = bnfpo.        "项目"
    pr_account-g_l_acct = gt_data-sakto. "总帐科目"
    pr_account-cost_ctr = gt_data-kostl. "成本中心"
    pr_account-asset_no = gt_data-anln1. "资产"
    pr_account-order_no = gt_data-aufnr. "订单"
    pr_account-co_area = 'BELL'.
    APPEND pr_account.
    CLEAR pr_account.
    pr_item_id-preq_item = bnfpo.
    pr_item_id-text_id = 'B03'.
    pr_item_id-text_line = gt_data-str1."行项目文本-传送文本"
    APPEND pr_item_id.
    CLEAR pr_item_id.
    pr_item_id-preq_item = bnfpo.
    pr_item_id-text_id = 'B07'.
    pr_item_id-text_line = gt_data-str2."行项目文本-预算年度"
    APPEND pr_item_id.
    CLEAR pr_item_id.
    pr_item_id-preq_item = bnfpo.
    pr_item_id-text_id = 'B08'.
    pr_item_id-text_line = gt_data-str3."行项目文本-资产类别"
    APPEND  pr_item_id.
    CLEAR  pr_item_id.
    AT END OF bednr.
    
    CALL FUNCTION 'BAPI_REQUISITION_CREATE'
	" EXPORTING
	"   SKIP_ITEMS_WITH_ERROR                =
	"   AUTOMATIC_SOURCE                     = 'X'
      IMPORTING
        number                               = pr_no
      TABLES
        requisition_items                    = pr_item
        requisition_account_assignment       = pr_account
        requisition_item_text                = pr_item_id
	"   REQUISITION_LIMITS                   =
	"   REQUISITION_CONTRACT_LIMITS          =
	"   REQUISITION_SERVICES                 =
	"   REQUISITION_SRV_ACCASS_VALUES        =
        return                               = pr_return
	"   REQUISITION_SERVICES_TEXT            =
	"   REQUISITION_ADDRDELIVERY             =
	"   EXTENSIONIN                          =
                .
      CLEAR: lv_message.
      LOOP AT pr_return WHERE type = 'E' OR type = 'A'.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
			INTO lv_message
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDLOOP.
      IF sy-subrc = 0.
        CLEAR: lv_message.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        LOOP AT pr_return INTO l_return WHERE type = 'E' .
          CONCATENATE lv_message l_return-message ';'
            INTO lv_message.
        ENDLOOP.
        CONCATENATE gt_data-bednr lv_message INTO gt_out-text.
        APPEND gt_out.
        CLEAR gt_out.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        CONCATENATE pr_no '创建成功' INTO gt_out-text.
        APPEND gt_out.
        CLEAR gt_out.
      ENDIF.
      FREE pr_item.
      FREE pr_account.
      FREE pr_item_id.
      FREE pr_return.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " CREATE_PR "

Demo2

*&---------------------------------------------------------------------*
*& BAPI_REQUISITION_CREATE 和 BAPI_PR_CREATE 相关问题查看NOTE
*& 499627 - FAQ BAPIs for purchase requisitions
*&---------------------------------------------------------------------*
REPORT ZLM_CREATE_PR.
DATA: LT_ITEM     LIKE TABLE OF  BAPIEBANC,
      LT_RETURN   LIKE TABLE OF  BAPIRETURN,
      LS_RETURN   LIKE  BAPIRETURN,
      LS_ITEM     LIKE BAPIEBANC.
*&如果有增强字段
DATA: LT_EXTENSIONIN  TYPE TABLE OF  BAPIPAREX .
DATA: LW_ITM    TYPE BAPI_TE_REQUISITION_ITEM.
DATA: LV_PR_NO  TYPE BAPIEBANC-PREQ_NO.
PARAMETERS:P_MATNR1 TYPE MATNR .
PARAMETERS:P_MATNR2 TYPE MATNR.
PARAMETERS:P_EKORG  TYPE EKORG .
PARAMETERS:P_WERKS  TYPE WERKS_D.
START-OF-SELECTION.
  CLEAR LT_ITEM[].
  CLEAR LS_ITEM.
  LS_ITEM-DOC_TYPE      = 'NB'.              "凭证类型"
  LS_ITEM-PREQ_ITEM     = '00010'.           "项目"
  LS_ITEM-MATERIAL      = P_MATNR1.          "商品代码"
  LS_ITEM-QUANTITY      = 1.                 "数量"
  LS_ITEM-DELIV_DATE    = SY-DATUM.          "交货日期"
  LS_ITEM-PLANT         = P_WERKS.           "工厂"
  LS_ITEM-PURCH_ORG     = P_EKORG.

  APPEND LS_ITEM TO LT_ITEM.
  IF P_MATNR2 IS NOT INITIAL.
    LS_ITEM-DOC_TYPE     = 'NB'.           "凭证类型"
    LS_ITEM-PREQ_ITEM    = '00020'.        "项目"
    LS_ITEM-MATERIAL     = P_MATNR2.       "商品代码"
    LS_ITEM-QUANTITY     = 1.              "数量"
    LS_ITEM-DELIV_DATE   = SY-DATUM.       "交货日期"
    LS_ITEM-PLANT        = P_WERKS.        "工厂"
    LS_ITEM-PURCH_ORG    = P_EKORG.
    APPEND LS_ITEM TO LT_ITEM.
  ENDIF.
*  extensionin-structure = 'BAPI_TE_REQUISITION_ITEM'.
*  extensionin-valuepart1 = lw_itm.
*  APPEND EXTENSIONIN.

  CALL FUNCTION 'BAPI_REQUISITION_CREATE'
    IMPORTING
      NUMBER            = LV_PR_NO
    TABLES
      REQUISITION_ITEMS = LT_ITEM
*     requisition_account_assignment = pr_account
*     requisition_item_text          = pr_item_id
      RETURN            = LT_RETURN.
*      extensionin                    = extensionin[].

  LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E' .
    WRITE LS_RETURN-MESSAGE.
  ENDLOOP.
  WRITE LV_PR_NO.