ME41询价单创建BAPI

关于ME41创建询价单系统并没有准备标准的BAPI,这一点在note:2115337中有说明。 

但是通过查阅相关资料找到一个BAPI:BS01_MM_QUOTATION_CREATE,可以为ME41进行创建,但是如果不做一些增强,会有一些额外的错误,比如创建出的单据数量为0,报错必须输入价格等。此外,该函数属于服务清单,是行业解决方案DIMP的一部分,只有在SFW5中激活DIMP才能正常使用,但是不建议仅针对要使用该函数而激活DIMP。

但是创建ME41没有比这个函数更合适的了,所以不激活DIMP的情况下,只需要做两个增强即可。

增强点1:

Main Program:            SAPMM06E

Include:                       MM06EF0N_NEUE_POS_BESTELLUNG

Enhancement Spot:    ES_SAPMM06E

Enhancement Point:   MM06EF0N_NEUE_POS_BESTELLUN_05

增强点2:

Main Program:            SAPMM06E

Include:                       MM06EF0E_EKPO-NETWR_MOD

Enhancement Spot:    ES_MM06EF0E_EKPO_NETWR_MOD

Enhancement Point:   MM06EF0E_EKPO_NETWR_MOD_01

BAPI调用参考代码:

*&---------------------------------------------------------------------*
*& Form FRM_BAPI_RFQ_MAINTAIN
*&---------------------------------------------------------------------*
*& Using BAPI to create RFQ
*&---------------------------------------------------------------------*
FORM frm_bapi_rfq_maintain USING us_head            TYPE zprmmsrfq_head_in
                                 ut_item            TYPE zprmmtrfq_item_in
                                 ut_item_text       TYPE zprmmtcontract_item_text_in
                        CHANGING cs_resp TYPE zprbcsrest_out.

  DATA:
    ls_header   TYPE bs01mmhead,
    ls_address  TYPE bapiaddress,
    lt_items    TYPE STANDARD TABLE OF bs01mmitem,
    ls_items    TYPE bs01mmitem,
    lt_schdules TYPE STANDARD TABLE OF bs01mmschedule,
    ls_schdules TYPE bs01mmschedule,
    lt_text     TYPE STANDARD TABLE OF bs01mmitemtx,
    ls_text     TYPE bs01mmitemtx,
    lt_return   TYPE STANDARD TABLE OF bapiret2.

  DATA:
    lv_ponumber TYPE ebeln.

  DATA:
    ls_addr_sel TYPE addr1_sel,
    ls_addr_val TYPE addr1_val.

  CONSTANTS:
    lc_doc_type TYPE ebstyp VALUE 'A'.

**********************************************************************
* Head data
**********************************************************************
  ls_header-doc_cat    = lc_doc_type.                                 "
  ls_header-doc_type   = us_head-bsart.                                 "Purchasing Document Category
  ls_header-created_on = sy-datum.                                      "Purchasing Document Type
  ls_header-created_by = sy-uname.                                      "Create user
  ls_header-vendor     = us_head-lifnr.                                 "Vendor
  ls_header-purch_org  = us_head-ekorg.                                 "Purchasing organization
  ls_header-pur_group  = us_head-ekgrp.                                 "Purchasing Group
  ls_header-language   = sy-langu.                                      "Language Key
  ls_header-doc_date   = us_head-bedat.                                 "Create Date
  ls_header-quot_dead  = us_head-angdt.                                 "Deadline for Submission of Bid/Quotation
  ls_header-currency   = us_head-waers.                                 "Currency
  ls_header-mast_cond  = abap_true.                                     "Document with time-dependent conditions

**********************************************************************
* Address Data
**********************************************************************
  SELECT SINGLE
         adrnr
    INTO ls_addr_sel-addrnumber
    FROM lfa1
   WHERE lifnr = ls_header-vendor.

  CALL FUNCTION 'ADDR_GET'
    EXPORTING
      address_selection = ls_addr_sel
    IMPORTING
      address_value     = ls_addr_val
    EXCEPTIONS
      parameter_error   = 1
      address_not_exist = 2
      version_not_exist = 3
      internal_error    = 4
      address_blocked   = 5
      OTHERS            = 6.

  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.

  MOVE-CORRESPONDING ls_addr_val TO ls_address.

**********************************************************************
* Item Data
**********************************************************************
  LOOP AT ut_item INTO DATA(us_item).
    ls_items-doc_item   = us_item-ebelp.                                "Item Number
    ls_items-pur_mat    = us_item-matnr.                                "Material Number
    ls_items-plant      = us_item-werks.                                "Plant
    ls_items-store_loc  = us_item-lgort.                                "Storage location
    ls_items-unit       = us_item-meins.                                "Unit
    APPEND ls_items TO lt_items.

    ls_schdules-doc_item   = us_item-ebelp.                             "Item Number
    ls_schdules-serial_no  = 1.                                         "Delivery Schedule Line Counter
    ls_schdules-deliv_date = us_item-eindt.                             "Item delivery date
    ls_schdules-quantity   = us_item-ktmng.                             "Scheduled Quantity
    APPEND ls_schdules TO lt_schdules.

    LOOP AT ut_item_text INTO DATA(us_item_text) WHERE item_no = us_item-ebelp.
      ls_text-doc_item  = us_item_text-item_no.                         "Item Number
      ls_text-text_id   = us_item_text-text_id.                         "Text Id
      ls_text-text_line = us_item_text-text_line.                       "Text Value
      APPEND ls_text TO lt_text.
      CLEAR ls_text.
    ENDLOOP.

    CLEAR:
      ls_items,
      ls_schdules.
  ENDLOOP.

*--------------------------------------------------------------------*
* Note: This BAPI is not designed to create RFQ functions. If you need
* to use this function to create MM RFQ documents, you need to implement
* the following enhancements:
* ①
* Program:    MM06EF0N_NEUE_POS_BESTELLUNG
* Enhancement:ENHANCEMENT-POINT MM06EF0N_NEUE_POS_BESTELLUN_05 SPOTS ES_SAPMM06E.
* Code:       EKPO-REPOS = ''.(Should be only use for create RFQ)
*
* ②
* Program:    MM06EF0E_EKPO-NETWR_MOD
* Enhancement:ENHANCEMENT-POINT MM06EF0E_EKPO_NETWR_MOD_01 SPOTS ES_MM06EF0E_EKPO_NETWR_MOD INCLUDE BOUND.
* Code:       RM06E-ANMNG = EKPO-MENGE.(Should be only use for create RFQ)
*--------------------------------------------------------------------*
* Create RFQ
  CALL FUNCTION 'BS01_MM_QUOTATION_CREATE'
    EXPORTING
      quotation_header         = ls_header
      quotation_address        = ls_address
      skip_items_with_error    = ''
    IMPORTING
      quotation                = lv_ponumber
    TABLES
      quotation_items          = lt_items
      quotation_item_schedules = lt_schdules
      quotation_item_text      = lt_text
      return                   = lt_return.

  LOOP AT lt_return INTO DATA(ls_return)
    WHERE type CA gc_err_ty.

    cs_resp-msgty = gc_msgty_e.
    CONCATENATE cs_resp-msgtx ls_return-message INTO cs_resp-msgtx.
  ENDLOOP.

  IF lv_ponumber IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.

    cs_resp-msgty = gc_msgty_s.

*   & created under the number &
    MESSAGE s017(06) WITH sy-msgv1 sy-msgv2 INTO cs_resp-msgtx.

    cs_resp-sapnum = lv_ponumber.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.
ENDFORM.

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在ABAP中,可以使用BAPI创建交货。 具体步骤如下: 1. 首先,需要使用BAPI "BAPI_OUTB_DELIVERY_CREATEFROMDAT2"来创建交货。 2. 然后,需要准备所需的参数。具体来说,需要准备的参数包括: - 订号(ORDER_NO) - 客户(CUSTOMER) - 工厂(PLANT) - 库存地点(STORE_LOC) - 销售组织(SALES_ORG) - 分销渠道(DISTR_CHAN) - 交货日期(DELIV_DATE) 3. 然后,可以调用BAPI创建交货。具体来说,可以使用以下代码: CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATEFROMDAT2' EXPORTING order_no = ORDER_NO customer = CUSTOMER plant = PLANT store_loc = STORE_LOC sales_org = SALES_ORG distr_chan = DISTR_CHAN deliv_date = DELIV_DATE IMPORTING delivery = DELIVERY TABLES return = RETURN. 4. 最后,可以检查BAPI调用的结果。如果返回值表(RETURN)中存在错误消息,则说明BAPI调用失败;否则,BAPI调用成功,交货已经创建成功。 希望这些信息能够帮助你。如果你有其他疑问,欢迎继续提问。 ### 回答2: 在ABAP中,我们可以使用BAPI技术创建交货。 首先,我们需要使用事务代码BAPI事务代码SE37,打开Function Builder。在Function Builder中,我们可以选择BAPI交货提供的功能模块。 在功能模块搜索栏中,输入“BAPI_GOODSMVT_CREATE”并点击“Check”按钮。在搜索结果中找到该功能模块后,双击它,进入模块详细信息页面。 在功能模块的详细信息页面中,我们可以看到各种输入和输出参数。我们需要根据需求来正确填写这些参数,以创建所需的交货。 在输入参数中,最重要的参数是“GOODSMVT_HEADER”和“GOODSMVT_ITEM”。这些参数定义了交货的头部信息和项目信息。 在“GOODSMVT_HEADER”参数中,我们需要填写交货的相关信息,如交货类型、日期、移动类型等。 在“GOODSMVT_ITEM”参数中,我们需要填写交货的项目信息,如物料号、数量、批次信息等。 在输入参数填写完成后,我们可以点击“Test”按钮来测试该功能模块。系统会根据输入的参数运行该功能模块,并返回相应的输出结果。 如果一切都正常,我们可以将该功能模块集成到我们的ABAP程序中。在程序中调用该功能模块,并传递正确的参数值,即可创建交货。 需要注意的是,我们还需要考虑异常情况的处理。在调用该功能模块时,我们可以检查返回的系统消息,以判断交货是否成功创建。如果出现错误,我们可以根据系统消息来进行相应的错误处理。 总之,通过使用ABAP中的BAPI技术,我们可以方便地创建交货,并通过正确填写参数值和处理异常情况来确保交货的正确创建。 ### 回答3: ABAP是一种编程语言,用于SAP系统中的应用开发,包括创建交货等业务处理。在ABAP中,可以使用一种称为BAPI(Business Application Programming Interface)的特殊功能来创建交货。 要创建交货BAPI,首先需要了解交货的必要信息,如交货号、客户、物料、数量等。然后使用合适的BAPI函数模块,如'BAPI_OUTB_DELIVERY_CREATE_SLS'或'BAPI_OUTB_DELIVERY_CREATE_STO'等。 在ABAP程序中,可以使用以下步骤来创建交货BAPI: 1. 首先,声明和定义必要的变量,如交货号、客户、物料等。根据需求,可能还需要其他辅助变量。 2. 调用合适的BAPI函数模块,传递必要的输入参数。例如,使用'BAPI_OUTB_DELIVERY_CREATE_SLS'来创建销售交货,传递交货号、客户、物料和数量等信息。 3. 处理返回的结果。BAPI函数模块通常会返回一个结构或表,其中包含创建交货的结果。可以根据需要对返回结果进行处理,如输出错误信息或记录成功创建的交货号。 4. 根据实际情况,可能还需要其他的处理步骤,如更新交货的状态或进行后续业务操作。 总之,使用ABAP语言编写程序来创建交货BAPI可以简化企业内部的业务流程,并提高工作效率。通过合理的参数传递和结果处理,我们可以实现快速、准确地创建交货,并满足业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值