创建采购申请(BAPI_REQUISITION_CREATE / BAPI_PR_CREATE)_SAP刘梦_新浪博客

*&---------------------------------------------------------------------*
*& Report  ZLM_TEST_028
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zlm_test_028.

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, "订单
            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_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.


DATA: BEGIN OF gt_out OCCURS 0,
            text(255),
          END OF gt_out.

DATA: pr_item LIKE TABLE OF  bapiebanc WITH HEADER LINE,
          pr_account LIKE TABLE OF bapiebkn WITH HEADER LINE,
          pr_item_id LIKE TABLE OF bapiebantx WITH HEADER LINE,
          pr_return LIKE TABLE OF bapireturn WITH HEADER LINE.
DATA: l_return LIKE pr_return.
DATA: lv_message(255).

DATA: pr_no TYPE bapiebanc-preq_no.
DATA: bnfpo TYPE bnfpo.
DATA: matnr TYPE matnr.
DATA: pp_file TYPE string.

PARAMETERS:p_file(128) .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM get_file.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM create_pr.
  PERFORM write_out.
*&---------------------------------------------------------------------*
*&      Form  GET_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_file .
  CALL FUNCTION 'WS_FILENAME_GET'
       EXPORTING
            def_filename     = p_file
            mask             = ',*.txt,*.TXT.'
*'',*.xls,*.XLS.'如果读入txt文件,在后边就需要用函数
*  CALL FUNCTION 'WS_UPLOAD'
            mode             = 'O'
            title            = 'File Name'
       IMPORTING
            filename         =  p_file
       EXCEPTIONS
            inv_winsys       = 1
            no_batch         = 2
            selection_cancel = 3
            selection_error  = 4
            OTHERS           = 5.
  pp_file = p_file.

ENDFORM.                    " GET_FILE
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                      = pp_file
     filetype                      = 'ASC'
     has_field_separator           = 'X'
*   HEADER_LENGTH                 = 0
     read_by_line                  = 'X'
*   DAT_MODE                      = ' '
*   CODEPAGE                      = ' '
*   IGNORE_CERR                   = ABAP_TRUE
*   REPLACEMENT                   = '#'
*   CHECK_BOM                     = ' '
*   VIRUS_SCAN_PROFILE            =
*   NO_AUTH_CHECK                 = ' '
* IMPORTING
*   FILELENGTH                    =
*   HEADER                        =
    TABLES
      data_tab                      = gt_data1
   EXCEPTIONS
     file_open_error               = 1
     file_read_error               = 2
     no_batch                      = 3
     gui_refuse_filetransfer       = 4
     invalid_type                  = 5
     no_authority                  = 6
     unknown_error                 = 7
     bad_data_format               = 8
     header_not_allowed            = 9
     separator_not_allowed         = 10
     header_too_long               = 11
     unknown_dp_error              = 12
     access_denied                 = 13
     dp_out_of_memory              = 14
     disk_full                     = 15
     dp_timeout                    = 16
     OTHERS                        = 17
            .
  IF sy-subrc <> 0.
    CASE sy-subrc.
      WHEN 1.MESSAGE 'FILE_OPEN_ERROR ' TYPE 'E'.
      WHEN 2.MESSAGE 'FILE_READ_ERROR ' TYPE 'E'.
      WHEN 3.MESSAGE 'NO_BATCH' TYPE 'E'.
      WHEN 4.MESSAGE 'GUI_REFUSE_FILETRANSFER  ' TYPE 'E'.
      WHEN 5.MESSAGE 'INVALID_TYPE ' TYPE 'E'.
      WHEN 6.MESSAGE ' NO_AUTHORITY' TYPE 'E'.
      WHEN 7.MESSAGE 'UNKNOWN_ERROR' TYPE 'E'.
      WHEN 8.MESSAGE 'BAD_DATA_FORMAT ' TYPE 'E'.
      WHEN 9.MESSAGE 'HEADER_NOT_ALLOWED' TYPE 'E'.
      WHEN 10.MESSAGE 'SEPARATOR_NOT_ALLOWED' TYPE 'E'.
      WHEN 11.MESSAGE 'HEADER_TOO_LONG ' TYPE 'E'.
      WHEN 12.MESSAGE 'UNKNOWN_DP_ERROR' TYPE 'E'.
      WHEN 13.MESSAGE ' ACCESS_DENIED ' TYPE 'E'.
      WHEN 14.MESSAGE 'DP_OUT_OF_MEMORY ' TYPE 'E'.
      WHEN 15.MESSAGE 'DISK_FULL  ' TYPE 'E'.
      WHEN 16.MESSAGE 'DP_TIMEOUT' TYPE 'E'.
      WHEN 17.MESSAGE ' OTHERS  ' TYPE 'E'.
      WHEN OTHERS.
    ENDCASE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  LOOP AT gt_data1.
    MOVE-CORRESPONDING gt_data1 TO gt_data.
    APPEND gt_data.
    CLEAR: gt_data,gt_data1.
  ENDLOOP.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_PR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_pr .
  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                          =
                .
      LOOP AT pr_return WHERE type = 'E' OR type = 'A'.
      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
*&---------------------------------------------------------------------*
*&      Form  WRITE_OUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_out .
  LOOP AT gt_out.
    WRITE: / gt_out-text.
  ENDLOOP.
ENDFORM.                    " WRITE_OUT

*以下为数据格式(行项目以回车键换行,列以TAB分隔):
*ZB 10 100009 10 EA 20100915 D005
*ZB 10 100008 10 EA 20100915 D005s



另外还有一个BAPI:BAPI_PR_CREATE,大致赋值如下

DATA :  header    TYPE bapimereqheader ,
      headerx   TYPE bapimereqheaderx  ,
       number    LIKE bapimereqheader -preq_no ,
       return    LIKE bapiret2                    OCCURS  0  WITH  HEADER  LINE ,
      item      LIKE bapimereqitemimp            OCCURS  0  WITH  HEADER  LINE ,
      itemx     LIKE bapimereqitemx              OCCURS  0  WITH  HEADER  LINE .

  header-pr_type              = eban-bsart.
  headerx-pr_type             = 'X'.

  item-item_cat               =                  
  ITEM-PREQ_NAME              =                  
  item-suppl_stloc            =                  
  item-preq_item              =                  
  item-pur_group              =                  
  item-preq_name              =                  
  item-short_text             =                  
  item-material               =                  
  item-plant                  =                  
  item-store_loc              =                  
  item-suppl_plnt             =                  
  item-quantity               =                  
  item-deliv_date             =                  
  item-batch                  =                                                          
  ITEM-PREQ_PRICE             =        
  item-purch_org              =        
  ITEM-PROCURING_PLANT        =        
  item-suppl_stloc            =     
     
  IF eban-bwtar <> ''.
    item-val_type = eban-bwtar.
  ENDIF.

  APPEND item.


  itemx-preq_item             =  
  itemx-item_cat              = 'X'.
  ITEMX-PREQ_NAME             = 'X'.
  itemx-suppl_stloc           = 'X'.
  itemx-preq_item             = 'X'.
  itemx-pur_group             = 'X'.
  itemx-preq_name             = 'X'.
  itemx-short_text            = 'X'.
  itemx-material              = 'X'.
  itemx-plant                 = 'X'.
  itemx-store_loc             = 'X'.
  itemx-suppl_plnt            = 'X'.
  itemx-quantity              = 'X'.
  itemx-deliv_date            = 'X'.
  itemx-batch                 = 'X'.
  itemx-purch_org             = 'X'.
  ITEMX-PROCURING_PLANT       = 'X'.
  itemx-suppl_stloc           = 'X'.
  
  IF eban-bwtar <> ''.
    itemx-val_type            = 'X'.
  ENDIF.

  APPEND  itemx.


  CALL FUNCTION 'BAPI_PR_CREATE'
    EXPORTING
      prheader  = header
      prheaderx = headerx
    IMPORTING
      number    = number
    TABLES
      return    = return
      pritem    = item
      pritemx   = itemx.

  COMMIT WORK AND WAIT .


欢迎关注订阅号:SAP学习记录 (SAPlearning )

PO <wbr><wbr>text <wbr><wbr>copy <wbr><wbr>rules <wbr><wbr>:copy <wbr><wbr>PR <wbr><wbr>item <wbr><wbr>text <wbr><wbr>to <wbr><wbr>PO

SAP BAPI_PO_CREATE1是一个SAP系统中的功能模块,用于创建采购订单(Purchase Order)。通过该功能模块,我们可以使用SAP系统来快速创建和维护采购订单的相关数据。 使用BAPI_PO_CREATE1,我们可以通过调用该功能模块来向SAP系统中创建新的采购订单。在调用该功能模块时,我们需要提供一些必要的输入参数,如采购订单的相关信息、采购组织和公司代码等。 这个功能模块可以帮助我们在SAP系统中自动化采购订单的创建流程。它可以根据输入的参数,自动生成采购订单,并将相关的物料、供应商和价格等信息添加到订单中。 通过使用BAPI_PO_CREATE1,我们可以实现以下功能: 1. 创建采购订单:我们可以通过调用该功能模块来创建新的采购订单。在调用时,我们需要提供订单的相关信息,如供应商、物料、数量、交货日期等。系统会根据提供的信息自动创建采购订单。 2. 修改采购订单:除了创建新的采购订单,我们还可以使用BAPI_PO_CREATE1来修改现有的采购订单。在调用时,我们需要提供订单的标识符和要修改的字段及对应的值。系统将根据提供的信息来更新采购订单的数据。 3. 检查采购订单:在调用BAPI_PO_CREATE1之前,我们可以先使用BAPI_PO_EXISTENCE_CHECK来检查采购订单是否存在。这可以帮助我们避免重复创建订单或更新不存在的订单。 总而言之,SAP BAPI_PO_CREATE1是一个用于创建和维护采购订单的功能模块。它可以帮助我们在SAP系统中实现自动化的采购订单处理,并提高采购过程的效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值