BAPI_PO_CREATE1创建采购订单范例 - 海边星
【原创】 BAPI_PO_CREATE1创建采购订单范例
栏目:ABAP  作者:在海边看星星  阅读:(389)
    DATA: ls_pohead    TYPE bapimepoheader,
          ls_poheadx   TYPE bapimepoheaderx,
          lt_return    TYPE STANDARD TABLE OF bapiret2,
          ls_return    TYPE bapiret2,
          lt_itempo    TYPE STANDARD TABLE OF bapimepoitem,
          ls_itempo    TYPE bapimepoitem,
          lt_itempox   TYPE STANDARD TABLE OF bapimepoitemx,
          ls_itempox   TYPE bapimepoitemx,
          lt_schedule  TYPE STANDARD TABLE OF bapimeposchedule,
          ls_schedule  TYPE bapimeposchedule,
          lt_schedulex TYPE STANDARD TABLE OF bapimeposchedulx,
          ls_schedulex TYPE bapimeposchedulx,
          lt_pocond    TYPE STANDARD TABLE OF bapimepocond,
          ls_pocond    TYPE bapimepocond,
          lt_pocondx   TYPE STANDARD TABLE OF bapimepocondx,
          ls_pocondx   TYPE bapimepocondx.
    DATA: lv_ebeln    TYPE ebeln,
          lv_row      TYPE i,
          lv_etenr    TYPE etenr,
          lv_msg(255).

    CLEAR: ls_pohead,ls_poheadx,lt_return,ls_return,lt_itempo,ls_itempo,
           lt_itempox,ls_itempox,lt_schedule,ls_schedule,lt_schedulex,ls_schedulex.
    READ TABLE it_item INTO DATA(ls_item) INDEX 1.

    ls_pohead-doc_type   = 'ZSO'.               "订单类型
    ls_pohead-vendor     = is_header-lifnr.     "供应商
    ls_pohead-vendor     = |{ ls_pohead-vendor ALPHA = IN }|.
    ls_pohead-doc_date   = is_header-audat.     "凭证日期
    ls_pohead-currency   = ls_item-konwa.       "货币
    ls_pohead-collect_no = is_header-bstkd.     "so单号
    IF is_header-lifnr = '2090'.
      ls_pohead-purch_org  = '2130'.            "采购组织
      ls_pohead-pur_group  = '907'.             "采购组
      ls_pohead-comp_code  = '2130'.            "公司代码
    ELSEIF is_header-lifnr = '2130'.
      ls_pohead-purch_org  = '2020'.            "采购组织
      ls_pohead-pur_group  = '901'.             "采购组
      ls_pohead-comp_code  = '2020'.            "公司代码
    ENDIF.

    ls_poheadx-doc_type    = 'X'.     "订单类型
    ls_poheadx-vendor      = 'X'.     "供应商
    ls_poheadx-doc_date    = 'X'.     "凭证日期
    ls_poheadx-currency    = 'X'.     "货币
    ls_poheadx-collect_no  = 'X'.     "so单号
    ls_poheadx-purch_org   = 'X'.     "采购组织
    ls_poheadx-pur_group   = 'X'.     "采购组
    ls_poheadx-comp_code   = 'X'.     "公司代码

    IF it_item IS NOT INITIAL.
      SELECT matnr,meins FROM mara
        INTO TABLE @DATA(lt_mara)
        FOR ALL ENTRIES IN @it_item
        WHERE matnr = @it_item-matnr.
    ENDIF.

    CLEAR: lv_row,lv_etenr.
    LOOP AT it_item INTO ls_item.
      lv_row  = lv_row  + 10.

      ls_itempo-po_item     = lv_row.            "行项目
      ls_itempo-material    = ls_item-matnr.     "物料编码
      ls_itempo-quantity    = ls_item-menge.     "数量
      ls_itempo-po_price    = '2'.               "
      ls_itempo-price_unit  = ls_item-kpein.     "
      READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = ls_item-matnr.
      IF sy-subrc = 0.
        ls_itempo-po_unit     = ls_mara-meins.   "单位
      ENDIF.
      IF is_header-lifnr = '2090'.
        ls_itempo-plant       = '2130'.          "工厂
        ls_itempo-net_price   = ls_item-kbetr1.  "
      ELSEIF is_header-lifnr = '2130'.
        ls_itempo-plant       = '2020'.          "工厂
        ls_itempo-net_price   = ls_item-kbetr.   "
      ENDIF.

*      ls_itempo-stge_loc    = ls_item-lgort.    "库存地点
      APPEND ls_itempo TO lt_itempo.
      CLEAR ls_itempo.

      ls_itempox-po_item     = lv_row.  "行项目
      ls_itempox-material    = 'X'.     "物料编码
      ls_itempox-quantity    = 'X'.     "数量
      ls_itempox-po_price    = 'X'.     "
      ls_itempox-net_price   = 'X'.     "
      ls_itempox-price_unit  = 'X'.     "
      ls_itempox-po_unit     = 'X'.     "单位
      ls_itempox-plant       = 'X'.     "工厂
*      ls_itempox-stge_loc    = 'X'.     "库存地点
      APPEND ls_itempox TO lt_itempox.
      CLEAR ls_itempox.

      lv_etenr = 1.
      ls_schedule-po_item       = lv_row.               "
      ls_schedule-sched_line    = lv_etenr.             "
      ls_schedule-delivery_date = is_header-audat.      "
      ls_schedule-quantity      = ls_item-menge.        "
      APPEND ls_schedule TO lt_schedule.
      CLEAR ls_schedule.

      ls_schedulex-po_item       = lv_row.         "
      ls_schedulex-sched_line    = 'X'.            "
      ls_schedulex-delivery_date = 'X'.            "
      ls_schedulex-quantity      = 'X'.            "
      APPEND ls_schedulex TO lt_schedulex.
      CLEAR ls_schedulex.


      ls_pocond-itm_number  = lv_row.
      ls_pocond-cond_type   = 'PB00'.
      IF is_header-lifnr = '2090'.
        ls_pocond-cond_value  = ls_item-kbetr1.     "条件金额(价格)
      ELSEIF is_header-lifnr = '2130'.
        ls_pocond-cond_value  = ls_item-kbetr.      "条件金额(价格)
      ENDIF.
      ls_pocond-cond_p_unt  = ls_item-kpein.      "价格单位
*      ls_pocond-cond_unit   = ls_mara-meins.      "条件单位
      ls_pocond-currency    = ls_item-konwa.      "货币码
      ls_pocond-change_id   = 'I'.                "更改类型
      APPEND ls_pocond TO lt_pocond.
      CLEAR ls_pocond.

      ls_pocondx-itm_number = lv_row.
      ls_pocondx-cond_type  = 'X'.
      ls_pocondx-cond_value = 'X'.
      ls_pocondx-cond_p_unt = 'X'.
*      ls_pocondx-cond_unit  = 'X'.
      ls_pocondx-currency   = 'X'.
      ls_pocondx-change_id  = 'X'.
      APPEND ls_pocondx TO lt_pocondx.
      CLEAR ls_pocondx.
    ENDLOOP.

    CALL FUNCTION 'BAPI_PO_CREATE1'
      EXPORTING
        poheader         = ls_pohead
        poheaderx        = ls_poheadx
      IMPORTING
        exppurchaseorder = lv_ebeln
      TABLES
        return           = lt_return
        poitem           = lt_itempo
        poitemx          = lt_itempox
        poschedule       = lt_schedule
        poschedulex      = lt_schedulex.
*        pocond           = lt_pocond
*        pocondx          = lt_pocondx.

    LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
      MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
        INTO lv_msg
        WITH ls_return-message_v1 ls_return-message_v2
             ls_return-message_v3 ls_return-message_v4.
      es_return-msg = es_return-msg && lv_msg && ';'.
    ENDLOOP.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      es_return-type = 'E'.
      IF is_header-lifnr = '2090'.
        es_return-msg = '2090 <- 2130 PO ' && text-006 && es_return-msg.
      ELSEIF is_header-lifnr = '2130'.
        es_return-msg = '2130 -> 2020 PO ' && text-006 && es_return-msg.
      ENDIF.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      es_return-type = 'S'.
      es_return-msg = text-002 && lv_ebeln && text-003.
      es_return-ebeln = lv_ebeln.

      CLEAR: lv_row.
    ENDIF.




我的评论
昵称
邮箱
域名
  记住 通知博主
验证码

  联系我们

微信扫一扫

 登录  打赏

  随机文章