SAP_ABAP_MM_BAPI清单案例教程——框架协议-合同_BAPI_CONTRACT_CREATE_ME31K

SAP ABAP 顾问(开发工程师)能力模型_企业数字化建设者的博客-CSDN博客目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提参考ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977


目标: 掌握SAP MM模块,主要流程相关的BAPI 函数的使用,主要有如下模块:

询价 报价 货源清单 配额安排 采购信息记录 框架协议-合同 框架协议-计划协议 采购订单 采购收货  发票校验 发票过账


 一 背景说明

1.1 什么是SAP BAPI.

        BAPI是SAP系统标准函数,比如:采购申请创建函数、采购订单创建函数等等。

1.2 SAP采购模块标准流程

1.2.1 模块导航
采购信息记录修改 SAP_ABAP_MM_BAPI清单案例教程——采购信息记录_企业数字化建设者的博客-CSDN博客
框架协议-合同创建 SAP_ABAP_MM_BAPI清单案例教程——框架协议-合同_企业数字化建设者的博客-CSDN博客
框架协议-合同修改 SAP_ABAP_MM_BAPI清单案例教程——框架协议-合同_企业数字化建设者的博客-CSDN博客
框架协议-计划协议创建 SAP_ABAP_MM_BAPI清单案例教程——框架协议-计划协议_企业数字化建设者的博客-CSDN博客
采购申请创建 SAP_ABAP_MM_BAPI清单案例教程——采购申请_企业数字化建设者的博客-CSDN博客
采购订单创建 SAP_ABAP_MM_BAPI清单案例教程——采购订单_企业数字化建设者的博客-CSDN博客
采购订单收货创建 SAP_ABAP_MM_BAPI清单案例教程——采购订单收货_企业数字化建设者的博客-CSDN博客
采购发票预制 SAP_ABAP_MM_BAPI清单案例教程——采购发票校验_企业数字化建设者的博客-CSDN博客
采购发票过账 SAP_ABAP_MM_BAPI清单案例教程——采购发票校验_企业数字化建设者的博客-CSDN博客
1.2.2 BAPI清单
ME_INFORECORD_MAINTAIN  采购信息记录修改
BAPI_CONTRACT_CREATE 框架协议-合同创建
BAPI_CONTRACT_CHANGE 框架协议-合同修改
BAPI_SAG_CREATE 框架协议-计划协议创建
BAPI_PR_CREATE 采购申请创建
BAPI_PO_CREATE1 采购订单创建
BAPI_GOODSMVT_CREATE 采购订单收货创建
BAPI_INCOMINGINVOICE_PARK 采购发票预制
BAPI_INCOMINGINVOICE_POST 采购发票过账

二 代码模板

1.3 框架协议-合同

1.3.1 创建

1.3.2 修改

  • 接口参数部分构成:

抬头、抬头条件、抬头时间、增强、行项目、行项目条件

  • bapi名称:

BAPI_CONTRACT_CHANGE

BAPI_CONTRACT_CREATE

  • 代码实现:直接copy 调整参数即可以用
FUNCTION zfm_contract.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------

  DATA:l_flag TYPE c.
  DATA:l_ebeln                TYPE bapimeoutheader-number,  "#EC NEEDED
       ls_ekko                TYPE ekko,

       extensionin            LIKE bapiparex OCCURS 0 WITH HEADER LINE,
       lt_extensionout        TYPE bapiparex_t,

       ls_header              TYPE bapimeoutheader, "抬头数据框架协议
       ls_headerx             TYPE bapimeoutheaderx,

       ls_head_cond_validity  TYPE  bapimeoutheadvalidity,
       lt_head_cond_validity  TYPE TABLE OF  bapimeoutheadvalidity,
       ls_head_cond_validityx TYPE  bapimeoutheadvalidityx,
       lt_head_cond_validityx TYPE TABLE OF bapimeoutheadvalidityx,

       ls_head_condition      TYPE  bapimeoutheadercond,
       lt_head_condition      TYPE TABLE OF  bapimeoutheadercond,
       ls_head_conditionx     TYPE  bapimeoutheadercondx,
       lt_head_conditionx     TYPE  TABLE OF bapimeoutheadercondx,

       ls_item                TYPE bapimeoutitem,    "合同的项目数据
       lt_item                TYPE bapimeout_t_item, "表类型:项目数据框架协议

       ls_itemx               TYPE bapimeoutitemx,
       lt_itemx               TYPE bapimeout_t_itemx,

       ls_item_condition      TYPE  bapimeoutcondition,
       ls_item_conditionx     TYPE  bapimeoutconditionx,
       lt_item_condition      TYPE TABLE OF  bapimeoutcondition,
       lt_item_conditionx     TYPE TABLE OF  bapimeoutconditionx,

       lt_return              TYPE bapiret2_t,
       ls_return              TYPE bapiret2
       .

*--------------------------------------------------------------------*
*   Header赋值
*--------------------------------------------------------------------*
  CLEAR: ls_header,ls_headerx,l_flag.
  REFRESH: lt_return, lt_item, lt_itemx.


  ls_header-number      = ''.  "合同号
  ls_header-vendor      = '0000100234'.  "供应商
  ls_header-doc_type    = 'WK'.  "协议类型
  ls_header-comp_code   = '2010'.  "公司代码
  ls_header-doc_date    = '20230725'.  "协议日期
  ls_header-vper_start  = '20230725'.  "协议起始日期
  ls_header-vper_end    = '20230930'.  "协议截至日期
  ls_header-purch_org   = '2010'.  "采购组织
  ls_header-pur_group   = '100'.  "采购组
  ls_header-acum_value  = '10000'.  "目标值
  ls_header-currency    = 'CNY'.  "货币
  ls_header-langu       = sy-langu. "ABAP 系统字段:文本环境的语言码

  ls_headerx-number     = 'X'.  "合同号
  ls_headerx-vendor     = 'X'.  "供应商
  ls_headerx-doc_type   = 'X'.  "协议类型
  ls_headerx-comp_code  = 'X'.  "公司代码
  ls_headerx-doc_date   = 'X'.  "协议日期
  ls_headerx-vper_start = 'X'. "协议起始日期
  ls_headerx-vper_end   = 'X'. "协议截至日期
  ls_headerx-purch_org  = 'X'. "采购组织
  ls_headerx-pur_group  = 'X'. "采购组
  ls_headerx-acum_value = 'X'. "目标值
  ls_headerx-currency   = 'X'. "货币
  ls_headerx-langu      = 'X'. "ABAP 系统字段:文本环境的语言码

*--------------------------------------------------------------------*
*   Header 自定义字段赋值
*--------------------------------------------------------------------*
***  DATA: ls_bapi_te_meoutheaderx LIKE bapi_te_meoutheaderx,
***        ls_bapi_te_meoutheader  LIKE bapi_te_meoutheader.
***
***  CLEAR extensionin.
***  ls_bapi_te_meoutheader-number = gwa_out-ebeln.
***  ls_bapi_te_meoutheader-zhtnum = gwa_out-zhtnum.  "外部合同号
***  ls_bapi_te_meoutheader-zlotno = gwa_out-zlotno.  "LOT包号
***  ls_bapi_te_meoutheader-zcgblx = gwa_out-zcgblx.  "采购包类型
***  ls_bapi_te_meoutheader-zhtbz  = gwa_out-zhtbz.   "采购立项号
***  ls_bapi_te_meoutheader-zcgnum = gwa_out-zcgnum.  "采购任务
***  extensionin-structure = 'BAPI_TE_MEOUTHEADER'.
***  CALL METHOD cl_abap_container_utilities=>fill_container_c
***    EXPORTING
***      im_value               = ls_bapi_te_meoutheader
***    IMPORTING
***      ex_container           = extensionin-valuepart1
***    EXCEPTIONS
***      illegal_parameter_type = 1
***      OTHERS                 = 2.
***  APPEND extensionin.
***
***  CLEAR extensionin.
***  ls_bapi_te_meoutheaderx-number = gwa_out-ebeln.
***  ls_bapi_te_meoutheaderx-zhtnum = 'X'.  "外部合同号
***  ls_bapi_te_meoutheaderx-zlotno = 'X'.  "LOT包号
***  ls_bapi_te_meoutheaderx-zcgblx = 'X'.  "采购包类型
***  ls_bapi_te_meoutheaderx-zhtbz  = 'X'.   "采购立项号
***  ls_bapi_te_meoutheaderx-zcgnum = 'X'.  "采购任务
***  extensionin-structure = 'BAPI_TE_MEOUTHEADERX'.
***  CALL METHOD cl_abap_container_utilities=>fill_container_c
***    EXPORTING
***      im_value               = ls_bapi_te_meoutheaderx
***    IMPORTING
***      ex_container           = extensionin-valuepart1
***    EXCEPTIONS
***      illegal_parameter_type = 1
***      OTHERS                 = 2.
****  EXTENSIONIN-VALUEPART1 = LS_BAPI_TE_MEOUTHEADERX.
***  APPEND extensionin.

*--------------------------------------------------------------------*
*   Item赋值
*--------------------------------------------------------------------*
  CLEAR: ls_item,ls_itemx,lt_item[],lt_itemx[].
  CLEAR: ls_item, ls_itemx.

  ls_item-item_no     = '10'.         "行号
  ls_item-short_text  = '镀锡25mm2 test by zhong1'. "端文本
  ls_item-material    = '000003005003000051'.
  ls_item-matl_group  = '3202007'."物料组
  ls_item-plant       = '2012'.   "工厂
  ls_item-target_qty  = '1000'.   "目标数量
  ls_item-po_unit     = 'KG'.
  ls_item-po_unit_iso = 'KG'.
  ls_item-net_price   = 10.      "净价
  ls_item-price_unit  = '1'.     "价格单位
  ls_item-conv_num1   = '1'.     "订单价格单位转换为订单单位的分子
  ls_item-conv_den1   = '1'.     "订单价格单位转换为订单单位的分母
  ls_item-orderpr_un  = 'KG'.    "订单价格单位(采购)
  ls_item-orderpr_un_iso = 'KG'. "订单价格单位(采购)
*  ls_item-acctasscat     = 'U'. "科目分配类别  U 未知
  "ls_item-item_cat       = 0.   "项目类别
  APPEND ls_item TO lt_item.

  ls_itemx-item_no     = '10'.  "行号
  ls_itemx-item_nox    = 'X'.  "行号
  ls_itemx-short_text  = 'X'.  "端文本
  ls_itemx-material    = 'X'.  "物料号
  ls_itemx-matl_group  = 'X'.  "物料组
  ls_itemx-plant       = 'X'.  "工厂
  ls_itemx-target_qty  = 'X'.  "目标数量
  ls_itemx-po_unit     = 'X'.
  ls_itemx-po_unit_iso = 'X'.
  ls_itemx-net_price   = 'X'.  "净价
  ls_itemx-price_unit  = 'X'.  "价格单位
*  ls_itemx-conv_num1   = 'X'.
*  ls_itemx-conv_den1   = 'X'.
  ls_itemx-orderpr_un  = 'X'.
  ls_itemx-orderpr_un_iso = 'X'.
*  ls_itemx-acctasscat  = 'X'.  "科目分配类别
  "ls_itemx-item_cat    = 'X'.  "项目类别
  APPEND ls_itemx TO lt_itemx.

  ls_item_condition-item_no    = 10."采购凭证的项目编号
  ls_item_condition-cond_type  = 'RA01'."条件类型
  ls_item_condition-cond_value = '-10'."条件金额
  ls_item_condition-cond_p_unt = '-1.0'."条件定价单位
  ls_item_condition-cond_unit  = '%'."条件单位


  APPEND ls_item_condition TO lt_item_condition.
  ls_item_conditionx-item_no    = '10'."采购凭证的项目编号
  ls_item_conditionx-cond_type  = 'X'."条件类型
  ls_item_conditionx-cond_value = 'X'."条件金额
  ls_item_conditionx-cond_p_unt = 'X'."条件定价单位
  ls_item_conditionx-cond_unit  = 'X'."条件单位
  APPEND ls_item_conditionx TO lt_item_conditionx.

  ls_head_cond_validity-serial_id  = ''.
  ls_head_cond_validity-valid_from = '20230727'.
  ls_head_cond_validity-valid_to   = '99991231'.
  APPEND ls_head_cond_validity TO lt_head_cond_validity.

*  ls_head_cond_validityx-serial_id  = 'X'.
  ls_head_cond_validityx-valid_from = 'X'.
  ls_head_cond_validityx-valid_to   = 'X'.
  APPEND ls_head_cond_validityx TO lt_head_cond_validityx.

  ls_head_condition-cond_type  = 'RA01'.
  ls_head_condition-cond_count = '01'.
  ls_head_condition-scale_type = 'A'.
  ls_head_condition-calctypcon = 'A'.
  ls_head_condition-cond_value = -10.
  ls_head_condition-currency = '%'.
  APPEND ls_head_condition TO lt_head_condition.

  ls_head_conditionx-cond_type  = 'X'.
  ls_head_conditionx-cond_count = 'X'.
  ls_head_conditionx-scale_type = 'X'.
  ls_head_conditionx-calctypcon = 'X'.
  ls_head_conditionx-cond_value = 'X'.
  ls_head_conditionx-currency   = 'X'.
  APPEND ls_head_conditionx TO lt_head_conditionx.


*--------------------------------------------------------------------*
*   Create contract
*--------------------------------------------------------------------*
  IF ls_header-number IS INITIAL.
    "无合同号,新建
    CALL FUNCTION 'BAPI_CONTRACT_CREATE'
      EXPORTING
        header              = ls_header
        headerx             = ls_headerx
*       TESTRUN             = PA_TEST
      IMPORTING
        purchasingdocument  = l_ebeln
      TABLES
        return              = lt_return
        item                = lt_item
        itemx               = lt_itemx
        extensionin         = extensionin
*       item_condition      = lt_item_condition
*       item_conditionx     = lt_item_conditionx
        head_cond_validity  = lt_head_cond_validity
        head_cond_validityx = lt_head_cond_validityx
        head_condition      = lt_head_condition
        head_conditionx     = lt_head_conditionx.

    DATA: head_cond_validity TYPE TABLE OF  bapimeoutheadvalidity.
    DATA: head_condition     TYPE TABLE OF  bapimeoutheadercond.

  ELSE.
    " 有合同号,修改
    l_ebeln = ls_header-number.
    CALL FUNCTION 'BAPI_CONTRACT_CHANGE'
      EXPORTING
        purchasingdocument = l_ebeln
        header             = ls_header
        headerx            = ls_headerx
*       TESTRUN            = PA_TEST
      IMPORTING
        exp_header         = ls_header
      TABLES
        return             = lt_return
        item               = lt_item
        itemx              = lt_itemx
        extensionin        = extensionin
        item_condition     = lt_item_condition
        item_conditionx    = lt_item_conditionx.

  ENDIF.

  l_flag = 'S'.
  LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
    l_flag = 'E'.
    EXIT.
  ENDLOOP.

  IF l_flag EQ 'S'.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.


  IF NOT lt_return IS INITIAL.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_structure_name = 'BAPIRET2'
      TABLES
        t_outtab         = lt_return
      EXCEPTIONS
        OTHERS           = 0.
  ENDIF.


ENDFUNCTION.

1.3.3 删除

三 业务理解

3.1 概念理解

        框架协议-合同在SAP MM模块中的业务作用是优化和简化采购管理,提高采购效率,降低采购成本,稳定供应链,同时提供更好的供应商关系管理。这种方法适用于那些需要定期采购相同或类似物料或服务的企业,特别是对于长期供应关系的建立和管理。通过SAP MM模块,企业可以有效地创建、维护和监控框架协议,以支持其采购和供应链策略

  1. 采购计划和管理: 框架协议允许企业与供应商建立长期协议,规定了一段时间内需要采购的物料或服务的数量和条件。这有助于企业更好地规划和管理采购需求。

  2. 减少采购复杂性: 框架协议减少了每次采购交易的繁琐程度。企业无需每次都创建新的采购订单,而是可以使用现有的框架协议来采购所需物料或服务。

  3. 价格协商和稳定性: 框架协议通常包括价格协商,允许企业与供应商协商和锁定一段时间内的物料或服务价格。这有助于稳定采购成本,并提供了价格预测的可行性。

  4. 库存控制: 通过框架协议,企业可以更好地控制物料的库存水平,因为它们可以按计划定期获得物料,而不会因过多或过少的库存而产生成本。

  5. 供应链透明度: 框架协议增强了企业与供应商之间的合作和沟通,使供应链变得更加透明。供应商能够更好地了解客户的需求,客户则可以更好地掌握供应链的进展。

  6. 灵活性: 框架协议通常具有一定程度的灵活性,允许企业根据需求进行一定程度的变更,例如更改交付数量或交货时间。

  7. 合同履行监控: 通过SAP MM模块,企业可以监控和跟踪框架协议的履行情况,包括已交付数量、未交付数量、交付进度等。这有助于确保供应商遵守合同条款。

  8. 采购效率: 使用框架协议可以提高采购效率,减少了不必要的文档工作和采购流程的复杂性。

四  常用Tcode

4.1 基于Tcode的顺序排列

供应商主数据 物料主数据 货源清单 配额安排 采购信息记录 采购订单 框架协议 采购询价/报价 采购申请 订单收货 发票校验 物料需求计划
BP-供应商主数据 MM01 - 物料主数据新增 ME01 - 维护 MEQ1 - 维护 ME11 - 创建 ME21N - 创建 框架协议-合同: 询价: ME51N - 创建采购申请 MIGO - 货物移动 MIRO - 发票校验 MD01 - 联机
XK01 - 创建 MM02 - 物料主数据修改 ME03 - 显示 MEQ3 - 显示 ME12 - 修改 ME22N - 更改 ME31K - 创建 ME41 - 创建 ME52N - 更改采购申请 MB03 - 显示物料凭证 MD04 - 显示库存/需求状况
XK02 - 更改 MM03 - 物料主数据查询 ME0M - 清单查询 MEQ4 - 更改 ME13 - 查询 ME23N - 显示 ME32K - 更改 ME42 - 更改 ME53N - 显示采购申请 MB51 - 物料凭证清单
XK03 - 显示 MM04 - 物料主数据冻结与解冻 ME04 - 修改记录查询 MEQM - 按物料 (清单显示) ME14 - 修改记录查询 ME29N - 审批 ME33K - 显示 ME43 - 显示 ME54N - 批准采购请求 MMBE - 库存总览
XK04 - 修改 MM50 - 扩充物料视图 ME15 - 删除 ME34K - 维护补充 ME44 - 维护补充 ME5A - 清单查询 MB52 - 现有仓库库存清单
XK05 - 冻结 MM06 - 删除物料标记 ME1L - 清单查询 ME35K - 审批 ME45 - 审批
XK06 - 删除标记 MM60 - 物料清单 框架协议-计划协议: 报价:
XK07 - 科目组改变 MM17 - 成批维护 ME31L - 已知供应商 ME47 - 维护
ME37 - 库存传送计划协议 ME48 - 显示
ME32L - 更改 ME49 - 价格比较
ME33L - 显示
ME34L - 维护补充
ME35L - 审批

鸣谢:感谢查阅,请多多指教,有用请收藏、点赞哦 ! 

你可能感兴趣的:(Abap编程,经验分享,ABAP,MM,框架协议)