当前位置 博文首页 > 少年休闲海:【SD】自定义销售订单审批状态

    少年休闲海:【SD】自定义销售订单审批状态

    作者:[db:作者] 时间:2021-09-14 13:33

    自定义销售订单审批状态

    销售订单可以在其抬头或者项目中定义审批状态,一般在抬头定义的话就相当于针对整单的审批,可以实现多级审批,每级审批设置能进行何种操作,这里就需要在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'
    ????????????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.

    cs
    下一篇:没有了