最近做了一个关于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.
以上,各位朋友有什么指教的请留言.