*数据定义
DATA:tab_set_bukrs_gxgsdm5 TYPE TABLE OF rgsb4,
rec_set_bukrs_gxgsdm5 LIKE LINE OF tab_set_bukrs_gxgsdm5,
r_bukrs_gxgsdm5 TYPE RANGE OF bukrs WITH HEADER LINE.
DATA:
tab_set_hkont_gxkjkm5 TYPE STANDARD TABLE OF rgsb4,
rec_set_hkont_gxkjkm5 LIKE LINE OF tab_set_hkont_gxkjkm5.
RANGES:
set_acct FOR bseg-hkont.
DATA:
l_c TYPE char1,
* Declare the variable
* For Length
l_serial_length TYPE i,
* For Alpha numeric
l_str TYPE string,
l_valid_characters TYPE string.
"查询集下的公司代码。
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
setnr = 'XGSDM5'
class = '0000'
* fieldname = 'BUKRS'
TABLES
set_values = tab_set_bukrs_gxgsdm5
EXCEPTIONS
set_not_found = 1
OTHERS = 2.
**&循环集中的数据,将数据放到range表中
LOOP AT tab_set_bukrs_gxgsdm5 INTO rec_set_bukrs_gxgsdm5.
CLEAR r_bukrs_gxgsdm5-high.
r_bukrs_gxgsdm5-sign = 'I'.
r_bukrs_gxgsdm5-low = rec_set_bukrs_gxgsdm5-from.
IF rec_set_bukrs_gxgsdm5-to NE space.
r_bukrs_gxgsdm5-option = 'BT'.
r_bukrs_gxgsdm5-high = rec_set_bukrs_gxgsdm5-to.
ELSE.
r_bukrs_gxgsdm5-option = 'EQ'.
ENDIF.
APPEND r_bukrs_gxgsdm5.
ENDLOOP.
* 获取集
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
setnr = 'GL_ACCT_REQ_GXKJKM5'
class = '0000'
TABLES
set_values = tab_set_hkont_gxkjkm5
EXCEPTIONS
set_not_found = 1
OTHERS = 2.
* 判断科目集是否为空,不为空继续
CHECK sy-subrc = 0 AND tab_set_hkont_gxkjkm5 IS NOT INITIAL.
LOOP AT tab_set_hkont_gxkjkm5 INTO rec_set_hkont_gxkjkm5.
CLEAR set_acct-high.
set_acct-sign = 'I'.
set_acct-low = rec_set_hkont_gxkjkm5-from.
IF rec_set_hkont_gxkjkm5-to NE space.
set_acct-option = 'BT'.
set_acct-high = rec_set_hkont_gxkjkm5-to.
ELSE.
set_acct-option = 'EQ'.
ENDIF.
APPEND set_acct.
ENDLOOP.
DATA:
l_htype LIKE dd01v-datatype,
l_len TYPE char3.
* Fill in those valid characters you need to check
CONCATENATE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'
INTO l_valid_characters.
* L_VALID_CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
*校验凭证行项目中的ZUONR分配字段输入的内容如果为“英文字母”+“-”开头时说明此输入为WBS号
IF bseg-hkont IN set_acct AND
bseg-bukrs IN r_bukrs_gxgsdm5.
IF bseg-zuonr IS NOT INITIAL.
* Get User Input
l_str = bseg-zuonr+0(1).
* The Checks
IF l_str CO l_valid_characters.
CLEAR:
l_c.
l_c = bseg-zuonr+1(1).
IF l_c = '-'.
CONDENSE bseg-zuonr NO-GAPS.
l_len = strlen( bseg-zuonr ).
IF l_len <> 9 AND
l_len <> 10.
b_result = b_false.
MESSAGE e001(00) WITH '请在分配字段输入正确的WBS号'.
ENDIF.
ELSE.
MESSAGE e001(00) WITH '请在分配字段输入正确的WBS号'.
ENDIF.
ELSE.
MESSAGE e001(00) WITH '请在分配字段输入正确的WBS号'.
ENDIF.
ELSE.
MESSAGE e001(00) WITH '请在分配字段输入正确的WBS号'.
ENDIF.
ENDIF.
WBS号校验逻辑处理代码参考