浅谈Sap的Check

最近做了一个关于CHECK的案件,是这样的,对于银行帐号,如果用F-53去支付时,余额不足的情况下,希望它报一个MSG出来,标准的SAP是没有这功能的,我们只能自己来实现它.实现它有几个步骤,我们先来看看实现它的步骤吧.

STEP1.我们先看看GCX2,在这里,我们定义了CHECK的程序,如下图.
这里的程序ZZCSF200_T就是我们CHECK用的程序.在这里你可以定义ABAP内容.

STEP2.我们再看看OB28,在这里我们定义了具体的CHECK,这里的CHECK可以连到刚刚定义的程序.


这里的2表示对凭证明细进行CHECK.后面的1表示CHECK有效.双击这里的ZCSF070,就会跳到下一画面

在此画面的STEP005(上面是对别的案件的CHECK),第一步,我们定义了CHECK的前提条件,首先是凭证类型,必须IN ZOVS0001和总帐IN ZOVS0002.ZOVS0001和2是什么东西呢,他是SET,可以GS01登陆,它相当于一个内表,把事先知道的数据放到里面来如下图,

第二步,我们就是调程序做CHECK了,这里的意思就是调用程序的U154.
第三步就是CHECK不通过是出什么MSG,这里面可以定义,MSG可以参照SE91
STEP3.我们最后可以看看程序了,程序先把U154加进来,然后在154里求一月初到本月的总计合值.用求好的值跟输入的值相比较,通过返回值,如果返回值是真的话就CHECK通过,否则就出MSG.

  EXITS-NAME  = 'U154'.
  EXITS-PARAM = C_EXIT_PARAM_NONE.       "Complete data used in exit.
  EXITS-TITLE = TEXT-109.                "Bank account balance CHECK
  APPEND EXITS.

FORM U154  USING B_RESULT.
  TABLES:GLT0.
  DATA: WK_HSL     TYPE    WERTV13.
  DATA: BEGIN OF WA_GLT0,            "define inter table
        BUKRS      LIKE    GLT0-BUKRS,
        RYEAR      LIKE    GLT0-RYEAR,
        RACCT      LIKE    GLT0-RACCT,
        HSL01      LIKE    GLT0-HSL01,
        HSL02      LIKE    GLT0-HSL02,
        HSL03      LIKE    GLT0-HSL03,
        HSL04      LIKE    GLT0-HSL04,
        HSL05      LIKE    GLT0-HSL05,
        HSL06      LIKE    GLT0-HSL06,
        HSL07      LIKE    GLT0-HSL07,
        HSL08      LIKE    GLT0-HSL08,
        HSL09      LIKE    GLT0-HSL09,
        HSL10      LIKE    GLT0-HSL10,
        HSL11      LIKE    GLT0-HSL11,
        HSL12      LIKE    GLT0-HSL12,
        HSL13      LIKE    GLT0-HSL13,
        HSL14      LIKE    GLT0-HSL14,
        HSL15      LIKE    GLT0-HSL15,
        HSL16      LIKE    GLT0-HSL16,
        HSLVT      LIKE    GLT0-HSLVT,
  END OF WA_GLT0.
  DATA: IT_GLT0  LIKE TABLE of WA_GLT0.
  CLEAR: WA_GLT0, WK_HSL.
  REFRESH: IT_GLT0.

  B_RESULT  = B_TRUE.

  TRANSLATE  BSEG-HKONT TO UPPER CASE.
  SELECT  BUKRS            " get G/L's the balance of eveymonth.
          RYEAR            " get the year
          RACCT            " get the G/L
          HSL01            " local currency of Period 1
          HSL02
          HSL03
          HSL04
          HSL05
          HSL06
          HSL07
          HSL08
          HSL09
          HSL10
          HSL11
          HSL12
          HSL13
          HSL14
          HSL15
          HSL16
          HSLVT
    INTO CORRESPONDING FIELDS OF TABLE IT_GLT0
    FROM GLT0
    WHERE RLDNR =  '00'
      AND RRCTY =  '0'
      AND RVERS =  '001'
      AND BUKRS =  BSEG-BUKRS    " input company
      AND RYEAR =  BSEG-GJAHR    " input year
      AND RACCT =  BSEG-HKONT.   " input G/L
    IF SY-SUBRC <>  0.
* if there is no data accord with the condition
      B_RESULT = B_FALSE.
    ELSE.
      SORT IT_GLT0 BY BUKRS RYEAR RACCT.
* get the sum from period 1 to this month.
      LOOP AT IT_GLT0 INTO WA_GLT0.
        WK_HSL = WK_HSL + WA_GLT0-HSLVT.
        IF BKPF-MONAT >= 1.
           WK_HSL = WK_HSL + WA_GLT0-HSL01.
        ENDIF.
        IF BKPF-MONAT >= 2.
           WK_HSL = WK_HSL + WA_GLT0-HSL02.
        ENDIF.
        IF BKPF-MONAT >= 3.
           WK_HSL = WK_HSL + WA_GLT0-HSL03.
        ENDIF.
        IF BKPF-MONAT >= 4.
           WK_HSL = WK_HSL + WA_GLT0-HSL04.
        ENDIF.
        IF BKPF-MONAT >= 5.
           WK_HSL = WK_HSL + WA_GLT0-HSL05.
        ENDIF.
        IF BKPF-MONAT >= 6.
           WK_HSL = WK_HSL + WA_GLT0-HSL06.
        ENDIF.
        IF BKPF-MONAT >= 7.
           WK_HSL = WK_HSL + WA_GLT0-HSL07.
        ENDIF.
        IF BKPF-MONAT >= 8.
           WK_HSL = WK_HSL + WA_GLT0-HSL08.
        ENDIF.
        IF BKPF-MONAT >= 9.
           WK_HSL = WK_HSL + WA_GLT0-HSL09.
        ENDIF.
        IF BKPF-MONAT >= 10.
           WK_HSL = WK_HSL + WA_GLT0-HSL10.
        ENDIF.
        IF BKPF-MONAT >= 11.
           WK_HSL = WK_HSL + WA_GLT0-HSL11.
        ENDIF.
        IF BKPF-MONAT >= 12.
           WK_HSL = WK_HSL + WA_GLT0-HSL12.
        ENDIF.
        IF BKPF-MONAT >= 13.
           WK_HSL = WK_HSL + WA_GLT0-HSL13.
        ENDIF.
        IF BKPF-MONAT >= 14.
           WK_HSL = WK_HSL + WA_GLT0-HSL14.
        ENDIF.
        IF BKPF-MONAT >= 15.
           WK_HSL = WK_HSL + WA_GLT0-HSL15.
        ENDIF.
        IF BKPF-MONAT >= 16.
           WK_HSL = WK_HSL + WA_GLT0-HSL16.
        ENDIF.
      ENDLOOP.
* if the sum < input amount
      IF WK_HSL < BSEG-DMBTR.
        B_RESULT = B_FALSE.
      ENDIF.
  ENDIF.
ENDFORM.

以上,各位朋友有什么指教的请留言.

posted on 2008-09-01 16:32 cs3682 阅读(1506) 评论(0)  编辑 收藏
 
Comments
 
标题
姓名
主页
内容 
  登录  使用高级评论  Top 订阅回复  取消订阅
[使用Ctrl+Enter键可以直接提交]