matinal:全网最详细SAP SD 自定义销售订单审批状态

🚀欢迎来到本文🚀
🍉个人简介:matinal,目前职业是IT行业,一个正在慢慢前行的普通人。
🏀系列专栏:涵盖SAP各模块,Python,Excel,人工智能等
💡 其他专栏:一些平时学习的技术,感兴趣的小伙伴可以看看。

🍔公众号:matinal
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​
⛱️万物从心起,心动则万物动🏄‍♂️
⛱️对于总是找茬的人该怼就怼,让自己不爽的人,必须也让这人不爽🏄‍♂️


前言:销售订单可以在其抬头或者项目中定义审批状态,一般在抬头定义的话就相当于针对整单的审批,可以实现多级审批,每级审批设置能进行何种操作,这里就需要在IMG中定义审批状态参数文件。

🦙(工作遇到傻逼,千万要远离。道路千万条,远离傻逼第一条)


目录

自定义销售订单审批状态

一、定义状态参数文件

二、分配订单类型/状态参数文件&分配状态参数文件到项目类型


自定义销售订单审批状态

销售订单可以在其抬头或者项目中定义审批状态,一般在抬头定义的话就相当于针对整单的审批,可以实现多级审批,每级审批设置能进行何种操作,这里就需要在IMG中定义审批状态参数文件。

一、定义状态参数文件

配置路径:SPRO→销售与分销→销售→销售凭证→定义并分配状态参数文件→定义状态参数文件

事务代码:BS02

首先需要在“对象类型”中确定类型是销售订单标题还是销售订单项目,这里我们就以销售订单标题为例进行说明。

在用户状态界面输入需要控制几级审批,系统会自动为第一条设置初始状态。

双击各个状态进入事务控制界面,可以选择在此状态下哪些操作是禁止的。

依次设置完毕后保存即可。

状态参数文件基本信息保存的数据表是TJ20,对应的语言描述表TJ20T;

 用户状态条目保存的数据表是TJ30,对应的语言描述表TJ30T,注意字段TJ30-ESTAT(用户状态)是条目的自增长值,不可以编辑,格式“Exxx”,例如E0001、E0002;

 用户状态控制保存的数据表是TJ31,字段MODKZ存放编辑标志,1为允许、2为允许但警告、3为禁止。

二、分配订单类型/状态参数文件&分配状态参数文件到项目类型

配置路径:SPRO→销售与分销→销售→销售凭证→定义并分配状态参数文件→分配订单类型/状态参数文件&分配状态参数文件到项目类型

事务代码:VOV8 / VOV7

分配完成之后会将相关信息保存于数据库表TVAK 和 TVAP中。 

TVAK中的是根据销售凭证类型分配需要在销售订单抬头进行审批的;
TVAP中的是根据项目类型分配需要在销售订单项目进行审批的。
三、订单审批
路径:SAP 菜单→后勤→销售与分销→销售→订单→更改

路径:SAP 菜单→后勤→销售与分销→销售→合同→更改

事务代码:VA42/VA02

在CBO程序中就可以用函数” I_CHANGE_STATUS”进行逐层审批。

【样例代码】

         DATA : LV_OBJNR        TYPE J_OBJNR.
          LV_OBJNR = 'VB' && E_VBELN && IT_ITEM-POSNR.
          CALL FUNCTION 'I_CHANGE_STATUS'
            EXPORTING
              OBJNR          = LV_OBJNR
              ESTAT_INACTIVE = 'E0001'
              ESTAT_ACTIVE   = 'E0002'
              STSMA          = 'ZFMSD02'
*       EXCEPTIONS
*             CANNOT_UPDATE  = 1
*             OTHERS         = 2.


FUNCTION I_CHANGE_STATUS.
*"----------------------------------------------------------------------
*"*"Update function module:
*"
*"*"Local interface:
*"       IMPORTING
*"             VALUE(OBJNR) LIKE  JEST-OBJNR
*"             VALUE(ESTAT_INACTIVE) LIKE  TJ30-ESTAT
*"             VALUE(ESTAT_ACTIVE) LIKE  TJ30-ESTAT
*"             VALUE(STSMA) LIKE  JSTO-STSMA OPTIONAL
*"       EXCEPTIONS
*"              CANNOT_UPDATE
*"----------------------------------------------------------------------
 
************************************************************************
*
* Description:    Changes the status for an object
*                 (ex. a notification or a notification task).
*                 This function does not validate if the status
*                 transition is valid (a call to I_CHECK_CHANGE_STATUS
*                 function should be done before).
*
************************************************************************
 
  TABLES: JSTO.
 
  DATA: T_JEST_INS LIKE JEST_UPD OCCURS 0 WITH HEADER LINE,
        T_JEST_UPD LIKE JEST_UPD OCCURS 0 WITH HEADER LINE,
        T_JSTO_INS LIKE JSTO     OCCURS 0,
        T_JSTO_UPD LIKE JSTO_UPD OCCURS 0,
        T_OBJ_DEL  LIKE ONR00    OCCURS 0.
 
 
  SELECT SINGLE * FROM JSTO WHERE OBJNR = OBJNR.
 
  IF NOT ESTAT_INACTIVE IS INITIAL.
    SELECT SINGLE * INTO T_JEST_UPD FROM JEST
      WHERE OBJNR = OBJNR
        AND STAT  = ESTAT_INACTIVE.
    IF SY-SUBRC = 0.
      T_JEST_UPD-INACT = 'X'.
      ADD 1 TO T_JEST_UPD-CHGNR.
      T_JEST_UPD-CHGKZ = JSTO-CHGKZ.
      T_JEST_UPD-OBTYP = 'ORI'.
      T_JEST_UPD-STSMA = STSMA.
      APPEND T_JEST_UPD.
    ELSE.
      RAISE CANNOT_UPDATE.
    ENDIF.
  ENDIF.
 
  SELECT SINGLE * INTO T_JEST_UPD FROM JEST
    WHERE OBJNR = OBJNR
      AND STAT  = ESTAT_ACTIVE.
  IF SY-SUBRC = 0.
    T_JEST_UPD-MANDT = SY-MANDT.
    T_JEST_UPD-INACT = ' '.
    ADD 1 TO T_JEST_UPD-CHGNR.
    T_JEST_UPD-CHGKZ = JSTO-CHGKZ.
    T_JEST_UPD-OBTYP = 'ORI'.
    T_JEST_UPD-STSMA = STSMA.
    APPEND T_JEST_UPD.
  ELSE.
    T_JEST_INS-MANDT = SY-MANDT.
    T_JEST_INS-OBJNR = OBJNR.
    T_JEST_INS-STAT  = ESTAT_ACTIVE.
    T_JEST_INS-INACT = ' '.
    T_JEST_INS-CHGNR = '001'.
    T_JEST_INS-CHGKZ = JSTO-CHGKZ.
    T_JEST_INS-OBTYP = 'ORI'.
    T_JEST_INS-STSMA = STSMA.
    APPEND T_JEST_INS.
  ENDIF.
 
  CALL FUNCTION 'STATUS_UPDATE'
       TABLES
            JEST_INS = T_JEST_INS
            JEST_UPD = T_JEST_UPD
            JSTO_INS = T_JSTO_INS
            JSTO_UPD = T_JSTO_UPD
            OBJ_DEL  = T_OBJ_DEL
       EXCEPTIONS
            OTHERS   = 1.
 
  IF SY-SUBRC <> 0.
    RAISE CANNOT_UPDATE.
  ENDIF.
 
ENDFUNCTION.

怎么样,在了解自定义销售订单审批状态后是不是觉得这个东西很强呀?😏


如果本文对大家有所帮助的话,还望各位能给我点赞、收藏并评论一下,感谢各位💕!!! 另如果大家有什么疑问或者建议的话,欢迎评论区留言。


  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的vector是一种动态数组,可以存储不同类型的元素。sort函数是C++ STL库中的一个算法函数,用于对容器中的元素进行排序。该函数可以接受三个参数,分别是要排序的容器的起始迭代器、结束迭代器和一个比较函数。 在引用中的例子中,使用sort函数对vector容器中的元素进行排序。sort函数默认使用小于号运算符(operator<)进行比较,因此默认情况下是按照升序对容器中的元素进行排序。 在引用中的例子中,定义了两个比较函数GreaterSort和LessSort,分别用于降序和升序排序。通过传入这些比较函数作为sort函数的第三个参数,可以实现自定义的排序方式。 在引用中的例子中,使用greater<int>()作为sort函数的第三个参数,实现了对容器中元素的降序排序。而没有传入第三个参数时,默认按照小于号运算符进行升序排序。 因此,C++中的vector容器可以通过sort函数进行排序,并且可以根据需要使用默认比较函数或自定义比较函数来实现不同的排序方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++中,结构体vector使用sort排序](https://blog.csdn.net/zhouxun623/article/details/49887555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++vector容器使用sort排序(含升序以及降序)](https://blog.csdn.net/G_matinal/article/details/126769371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值