【SD】自定義銷售訂單審批狀態

SAP劍客 2021-08-15 05:29:34 阅读数:975

本文一共[544]字,预计阅读时长:1分钟~
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'
            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