采购订单审批/取消审批程序(BAPI_PO_RESET_RELEASE、BAPI_PO_RELEASE)

 

data:  gt_t16fs       TYPE STANDARD TABLE OF t16fs,            "批准策略

      "定义采购订单对应的审批信息
      BEGIN OF gt_ekko OCCURS 0,
        ebeln LIKE ekko-ebeln,                                "采购订单编号
        frggr LIKE ekko-frggr,                                   "审批组
        frgsx LIKE ekko-frgsx,                                  "审批策略
        frgzu LIKE ekko-frgzu,                                  "版本状态
        bsart LIKE ekko-bsart,                                 "采购凭证类型
        ekorg LIKE ekko-ekorg,                               "采购组织
      END   OF gt_ekko.

*&———————————————————————*
*&      Form  get_Approval_strategy
*&———————————————————————*
*       取采购订单对应的审批组和审批策略
*       再根据审批组和审批管理取每级对应的审批组
*———————————————————————-*
FORM get_approval_strategy.
  "取采购订单对应审批组
  SELECT ebeln                             "采购订单
    frggr                                             "审批组
    frgsx                                             "审批策略
    frgzu                                             "版本状态
    bsart                                            "采购凭证类型
    ekorg                                           "采购组织
    INTO TABLE gt_ekko
    FROM ekko

  WHERE ebeln = l_ebeln.


  "根据审批组取对应批准策略
  SELECT *
    INTO TABLE gt_t16fs
    FROM t16fs
    FOR ALL ENTRIES IN gt_ekko
  WHERE frggr = gt_ekko-frggr       "审批组

        AND frgsx = gt_ekko-frgsx.      "审批策略


ENDFORM.                    "get_Approval_strategy

 

*&———————————————————————*
*&      Form  PROCESS_po
*&———————————————————————*
*       处理采购订单,包括取消审批和审批
*———————————————————————-*
*      –>VALUE(FV_APPROVE)  处理标识,N:表示取消审批, Y:表示审批通过
*———————————————————————-*
FORM process_po USING value(fv_approve).
  DATA: l_level TYPE n,                                                  "当前订单已审批通过级别数
        l_last_char TYPE n,                                                 "当前订单最后审批通过级别
        l_pre_field TYPE string VALUE 'FRGC',              "所有审批组对应字段相同部分
        l_fieldname TYPE string.                                        "由l_pre_field + l_last_char组成对应审批组字段


  FIELD-SYMBOLS: <fs_field> TYPE t16fs-frgc1.      "当前审批组值
  CLEAR: l_level,
         l_last_char,
         l_fieldname.

  READ TABLE gt_ekko ASSIGNING <fs_ekko> WITH KEY ebeln = w_poheader-po_number.
  IF sy-subrc EQ 0 AND <fs_ekko>-frgzu IS NOT INITIAL.
    "根据采购订单的审批组、审批策略取对应的审批组
    READ TABLE gt_t16fs ASSIGNING <fs_t16fs> WITH KEY frggr = <fs_ekko>-frggr
                                                                                                         frgsx = <fs_ekko>-frgsx.

   "计算审批通过级数
    l_level = STRLEN( <fs_ekko>-frgzu ).
    "取消采购订单,只取消第一级审批就可以,不需要逐级取消审批,如果逐级取消审批后造成采购订单被锁定错误
    IF fv_approve = 'N'.

      "组成字段名
      CONCATENATE l_pre_field '1' INTO l_fieldname.

      "通过指针获取批准代码
      ASSIGN COMPONENT l_fieldname OF STRUCTURE <fs_t16fs> TO <fs_field>.

      PERFORM approve_po USING <fs_ekko>-ebeln 'N' <fs_field>.

    ENDIF.

    "批准采购订单,由前往后逐级审批

    IF fv_approve = 'Y'.
      DO l_level TIMES.
        l_last_char = sy-index.
        CONCATENATE l_pre_field l_last_char INTO l_fieldname.
        ASSIGN COMPONENT l_fieldname OF STRUCTURE <fs_t16fs> TO <fs_field>.
          PERFORM approve_po USING <fs_ekko>-ebeln 'Y' <fs_field>.
      ENDDO.

    ENDIF.
  ENDIF.

ENDFORM.                    "PROCESS_po

 

*&———————————————————————*
*&      Form  approve_po
*&———————————————————————*
*       审批或取消采购订单审批
*———————————————————————-*
*      –>VALUE(FV_EBELN)    采购订单编号
*      –>VALUE(FV_APPROVE)  审批状态
*      –>VALUE(FV_REL_COD)  审批代码
*———————————————————————-*
FORM approve_po USING value(fv_ebeln)
                      value(fv_approve)
                      value(fv_rel_cod).
  CALL FUNCTION 'Z_MM_APPROVE_PO'
    EXPORTING
      purchaseorder = fv_ebeln
      approve            = fv_approve
      rel_cod             = fv_rel_cod.

  IF sy-subrc EQ 0.
    WAIT UP TO 1 SECONDS.
  ENDIF.

ENDFORM.                    "approve_po

FUNCTION z_mm_approve_po.
*"———————————————————————-
*"*"Update function module:
*"
*"*"Local interface:
*"  IMPORTING
*"     VALUE(PURCHASEORDER) TYPE  BAPIMMPARA-PO_NUMBER
*"     VALUE(APPROVE) TYPE  CHAR1
*"     VALUE(REL_COD) TYPE  BAPIMMPARA-PO_REL_COD
*"———————————————————————-

  IF approve = 'Y'.
    CALL FUNCTION 'BAPI_PO_RELEASE'
      EXPORTING
        purchaseorder                = purchaseorder
        po_rel_code                  = rel_cod
*     USE_EXCEPTIONS               = 'X'
*     NO_COMMIT                    = ' '
*   IMPORTING
*     REL_STATUS_NEW               =
*     REL_INDICATOR_NEW            =
*     RET_CODE                     =
*   TABLES
*     RETURN                       = return
     EXCEPTIONS
       authority_check_fail         = 1
       document_not_found           = 2
       enqueue_fail                 = 3
       prerequisite_fail            = 4
       release_already_posted       = 5
       responsibility_fail          = 6
       OTHERS                       = 7
              .
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ELSEIF approve = 'N'.
    CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
      EXPORTING
        purchaseorder                  = purchaseorder
        po_rel_code                     = rel_cod
*     USE_EXCEPTIONS                 = 'X'
*   IMPORTING
*     REL_STATUS_NEW                 =
*     REL_INDICATOR_NEW              =
*   TABLES
*     RETURN                         = return
     EXCEPTIONS
       authority_check_fail           = 1
       document_not_found             = 2
       enqueue_fail                   = 3
       prerequisite_fail              = 4
       release_already_posted         = 5
       responsibility_fail            = 6
       no_release_already             = 7
       no_new_release_indicator       = 8
       OTHERS                         = 9
              .
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

  ENDIF.
ENDFUNCTION.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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
发出的红包

打赏作者

ChampaignWolf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值