SD--关于销售订单可用性检查控制的检查规则和检查组的确定

1)首先读取物料主数据(MARC)获取可用性检查设置(MTVFP),填写到VBAP-MTVFP

该字段来自物料主数据“销售:一般/工厂”-》“一般数据”-》“可用性检查”

 

2)首先在单元FV45VF0B_BEDARF_LESEN代码里设置可用性检查的初始(TMVFP-OBVFP)
代码摘抄如下
  DA_AUFRUFER              = CHARA.
  IF TVAK-LISOF NE SPACE.       "立即交货
    IF XVBUK-VBELN NE VBAK-VBELN.
      PERFORM XVBUK_LESEN(SAPFV45K) USING VBAK-VBELN.
    ENDIF.
    IF XVBUK-LFSTK NE CHARB AND XVBUK-LFSTK NE CHARC.
      DA_AUFRUFER          = CHARB.
    ENDIF.
  ENDIF.
  在同个这个值调用
 CALL FUNCTION 'RV_REQUIREMENT_GET'
       EXPORTING
            AUFRUFER            = DA_AUFRUFER
            MATERIAL            = US_MATNR
            PRUEFGRUPPE         = US_MTVFP
            WERK                = US_WERKS
            BELEG               = US_VBELN
            POSITION            = US_POSNR
            VPMAT               = US_VPMAT
            VPWRK               = US_VPWRK
            PZMNG_LOESCHEN      = DA_KORRI
            KORR_AKT            = US_KORRI
            KORR_ALT            = DA_KOPIERMODUS
            CALL_MODUS          = DA_CALL_MODUS
            NICHT_SPERREN       = DA_NICHT_SPERREN
            VBTYP               = VBAK-VBTYP
       IMPORTING
            SUMMIERUNG          = SUMBD
            MAT_GESPERRT        = DA_GESPERRT
       TABLES
            AVBBD               = AVBBD
            XMVERF_POS          = XMVERF_POS
            XQUOT_VB            = XQUOT_VB
            XQUOT_CH            = XQUOT_CH
       EXCEPTIONS
            MARC_MATNR_GESPERRT = 01
            MARC_VPMAT_GESPERRT = 02
            ENQUEUE_FEHLER      = 03.

3)在RV_REQUIREMENT_GET函数中根据读取的可用性检查设置读取可用性检查控制(TMVF)和可用量检查冻结(TMVFP)
  PERFORM TMVF_SELECT USING PRUEFGRUPPE AUFRUFER CHARX SY-SUBRC.
3.1)读取可用量检查冻结(TMVFP)的代码摘抄
代码单元:LV03VFT2
FORM TMVFP_SELECT USING US_MTVFP
                        US_OBVFP
                        US_ERROR
                        US_SUBRC.
  US_SUBRC = 0.
  IF TMVFP-MTVFP NE SPACE AND TMVFP-OBVFP NE SPACE.
    CHECK: US_MTVFP NE TMVFP-MTVFP OR
           US_OBVFP NE TMVFP-OBVFP.
  ENDIF.
* Wenn in TMVF-ACENQ gesetzt wird TMVFP eigentlich nicht gebraucht,
* verwendet wird allerdings OBVFP als Aufrufer.
* Ebenso wenn VERPN (keine Pr黤ung) gesetzt
  IF ( TMVF-ACENQ NE SPACE OR       "物料在具有传递需求的可用性检查中冻结
       TMVF-VERPN NE SPACE )  AND          "没有可用性检查
      US_MTVFP NE SPACE       AND
      US_OBVFP NE SPACE.
    TMVFP-MTVFP            = US_MTVFP.
    TMVFP-OBVFP            = US_OBVFP.
    TMVFP-VFPSP            = SPACE.
  ENDIF.
  CHECK TMVF-ACENQ EQ SPACE AND TMVF-VERPN EQ SPACE.
  IF US_MTVFP EQ SPACE.
    US_SUBRC = 4.
  ELSE.
    SELECT SINGLE * FROM TMVFP WHERE MTVFP = US_MTVFP
                                 AND OBVFP = US_OBVFP.
    IF SY-SUBRC NE 0.
      US_SUBRC = 4.
    ENDIF.
  ENDIF.
  IF US_SUBRC NE 0.
    IF US_ERROR NE SPACE.
      CLEAR: TMVFP.
      MESSAGE I305(VV) WITH US_MTVFP US_OBVFP.
    ENDIF.
  ENDIF.
ENDFORM.                    "TMVFP_SELECT

4)、在代码单元LV03VFA7中形成(PRREG)检查可用性检查的规则,代码摘抄如下:
  p_atpcs-prreg          = tmvfp-obvfp.
  p_atpcs-prreg+1(1)     = p_mverf_pos-sobkz. "SOBKZ:特殊库存标识
  IF p_mverf_pos-sobkz NE space AND
     p_mverf_pos-sobkz NE chare AND
     p_mverf_pos-sobkz NE charq.
    p_atpcs-kunnr        = p_mverf_pos-kunnr.
  ELSE.
    CLEAR p_atpcs-kunnr.
  ENDIF.

5)这样可用性的检查控制的两个因素就都决定出来了检查规则和检查组(MTVFP prreg),这样就可以读取T441V表,并用于可用性检查。

 6)相关 TCODE

OVZ2

OVZ1

OVZ9

你可能感兴趣的:(SD--关于销售订单可用性检查控制的检查规则和检查组的确定)