欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【SD】自定义销售订单审批状态

发布时间:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【SD】自定义销售订单审批状态 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

自定义销售订单审批状态

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

一、定义状态参数文件

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

事务代码:BS02

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

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

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

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

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

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

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

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

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

事务代码:VOV8 / VOV7

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

  Tip :

  • 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'EXPORTINGOBJNR          = LV_OBJNRESTAT_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 JESTWHERE OBJNR = OBJNRAND 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 JESTWHERE OBJNR = OBJNRAND 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'TABLESJEST_INS = T_JEST_INSJEST_UPD = T_JEST_UPDJSTO_INS = T_JSTO_INSJSTO_UPD = T_JSTO_UPDOBJ_DEL  = T_OBJ_DELEXCEPTIONSOTHERS   = 1.IF SY-SUBRC <> 0.RAISE CANNOT_UPDATE.ENDIF.ENDFUNCTION.

总结

以上是生活随笔为你收集整理的【SD】自定义销售订单审批状态的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。