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.

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

  1. SAP采购订单审批时可以拒绝吗?

    先说答案:采购订单可以拒绝.且不审批和拒绝是两回事.区别嘛,采购订单在没有审批情况下,会出现在待审批列表中,但采购订单拒绝后,就不会再出现在待审批列表中了.这个有兴趣的读者可以自行通过ME28和ME2 ...

  2. 37 MM配置-采购-采购订单-采购订单审批-编辑类

    业务背景:定义采购订单审批类 事务码:CL02 SPRO路径:物料管理->采购->采购订单->采购订单的下达过程->编辑类 第1步,SPRO进入 第2步,创建审批类 配置完成! ...

  3. 36 MM配置-采购-采购订单-采购订单审批-编辑特性

    业务背景:定义采购订单审批特性 事务码:CT04 SPRO路径:物料管理->采购->采购订单->采购订单的下达过程->编辑特性 第1步,SPRO进入 第2步,创建 采购申请 审 ...

  4. 维护采购订单审批的特性Characteristic和类Class

    SAP的采购审批过程(Release Procedure for Purchase Orders)配置包括两大部分,一部分是后台配置的审批策略(Release Strategy),另一部分是类(Cla ...

  5. SAP S/4 采购订单审批策略无效问题

    1.问题:采购审批策略无效.根据SAP ECC模式定义采购订单审批策略后.创建采购订单,通过ME29N审批,提示无有效的审批策略.检查相关设置没有错误,在同行提示下,是因为S/4增加了参数引起的. 2 ...

  6. 采购订单审批与采购申请审批

    1 采购申请可以有项目审批,采购订单只有抬头审批.意义:申请可能只同意部分行:申请可以同意部分数量,这个在申请转订单时实现. 2 无分类审批,只能做抬头审批,并且只有帐户类别,物料组,工厂,值4个选项 ...

  7. 38 MM配置-采购-采购订单-采购订单审批-定义采购订单审批过程

    业务背景:定义采购订单审批过程 事务码:SPRO SPRO路径:物料管理->采购->采购订单->采购订单的下达过程->定义采购订单审批过程 第1步,SPRO进入 第2步,选择& ...

  8. SAP 采购申请、采购订单的审批策略

    采购申请.采购订单的审批策略 采购申请审批 PR审批可以分为:含分类.无分类       1.无分类PR审批: A.后台配置: 设置批准代码(批准代码可以设置多级审批):               ...

  9. SAP中如何查询未审批采购订单

    在MM采购订单审批应用中,作为申请部门或采购部门需要能主动的进行待审批订单的状态查询,以便及时跟进业务.因此,如何查询未审批采购订单是一个很基础很实用的功能.下面一起来看看吧. 在事务ME2N中先按下 ...

最新文章

  1. VMWare中CentOS7 设置固定IP且能够访问外网
  2. c++获取当前目录_如何在 Linux 下利用 Vim 搭建 C/C++ 开发环境?
  3. 使用keepalived监控tomcat 达到双机热备
  4. Eclipse中实现SpringBoot与Mybatis整合(图文教程带源码)
  5. ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy
  6. java_object的具体使用--上帝
  7. Linux裸设备管理详解--
  8. Python基础之完数输出
  9. Markdown编辑器简单总结
  10. exoplayer和mediaplayer的封装
  11. 一批恶意Google Play应用窃取用户银行信息
  12. [Ubuntu] 解决Win10+Ubuntu双系统时间不一致问题
  13. 如何把手机证件照压缩到15KB?手机压缩图片方法
  14. ubuntu 装机必备软件
  15. 整型和bcd的对应关系_微信与多闪之争背后,好友关系链到底是如何窃取的?
  16. 限制性立方样条(Restricted Cubic Spline)
  17. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK!
  18. android xml文件中进行上传图片以及获取图片
  19. SmartNIC — Overview
  20. 30s快速开通微商城,零售+分销结合,支持直播美颜

热门文章

  1. 做外贸如何获取同行的价格体系?转至【【Mr.Harris 原创】
  2. B端产品方法论:从流量思维转向客户服务
  3. 周源:知乎的未来是什么
  4. 基本数据与引用数据类型参数传递
  5. 【python基础】用字典做一个小型的查询数据库
  6. [编程题] 迷路的牛牛
  7. C#机器学习插件 ---- AForge.NET
  8. JVM中的垃圾收集算法和Heap分区简记
  9. 30. SQL -- 完整性及约束(1)
  10. hostswap dcevm