SAP劍客 2021-08-15 05:29:34 阅读数:975
銷售訂單可以在其抬頭或者項目中定義審批狀態,一般在抬頭定義的話就相當於針對整單的審批,可以實現多級審批,每級審批設置能進行何種操作,這裏就需要在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.
版权声明:本文为[SAP劍客]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815052907174b.html