X3中的序列号定义功能十分强大。
但是在使用中我们可能会遇到客户要求产生的序列号并非普通的数字序列序列号的情况(如掺杂字母),这时我们可以用X3的录入点来完成这个自定义过程。
1、序列号定义的录入点:创建一个名为XSUBANM(自定义名称)的进程
3、序列数定义(注意这个序列号名必须和在XSUBANM程序中定义的一致)
这样当系统通过GESBPC这支程序调用CUS这个序列数定义的时候就会走录入点中设定的逻辑给一些变量赋值。
以下是我以前写的一个31进制的序列号生成算法,该序列号定义所包含的字符为0123456789BCDFGHJKLMNPQRSTVWXYZ,即第一位为0,第11位为B,第31位为Z,第32位为0。
具体做法为在数据库中以数据形式记录一个序列值,当序列号增长时将此值+1,再将此值传入到bb FUNCTION中来算出增长后的这个数值对应的字符串,也可以将字符串传入dd FUNCTION产生对应的数字序列值。程序语言很简单,就不改了。代码如下:
FUNCTION bb(g)
DEFINE g,g1,g2,g3,g4,g5,g6 INTEGER,
ch CHAR(4),
ch1 CHAR(4)
LET ch='0000'
LET g1=g mod 31
CASE
WHEN (g1 >=0 and g1<10) LET ch[4]=g1
WHEN g1=10 LET ch[4]='B'
WHEN g1=11 LET ch[4]='C'
WHEN g1=12 LET ch[4]='D'
WHEN g1=13 LET ch[4]='F'
WHEN g1=14 LET ch[4]='G'
WHEN g1=15 LET ch[4]='H'
WHEN g1=16 LET ch[4]='J'
WHEN g1=17 LET ch[4]='K'
WHEN g1=18 LET ch[4]='L'
WHEN g1=19 LET ch[4]='M'
WHEN g1=20 LET ch[4]='N'
WHEN g1=21 LET ch[4]=''
WHEN g1=22 LET ch[4]='Q'
WHEN g1=23 LET ch[4]='R'
WHEN g1=24 LET ch[4]='S'
WHEN g1=25 LET ch[4]='T'
WHEN g1=26 LET ch[4]='V'
WHEN g1=27 LET ch[4]='W'
WHEN g1=28 LET ch[4]='X'
WHEN g1=29 LET ch[4]='Y'
WHEN g1=30 LET ch[4]='Z'
END CASE
LET g2=g/31
CASE
WHEN (g2 >=0 and g2<10) LET ch[3]=g2
WHEN g2=10 LET ch[3]='B'
WHEN g2=11 LET ch[3]='C'
WHEN g2=12 LET ch[3]='D'
WHEN g2=13 LET ch[3]='F'
WHEN g2=14 LET ch[3]='G'
WHEN g2=15 LET ch[3]='H'
WHEN g2=16 LET ch[3]='J'
WHEN g2=17 LET ch[3]='K'
WHEN g2=18 LET ch[3]='L'
WHEN g2=19 LET ch[3]='M'
WHEN g2=20 LET ch[3]='N'
WHEN g2=21 LET ch[3]=''
WHEN g2=22 LET ch[3]='Q'
WHEN g2=23 LET ch[3]='R'
WHEN g2=24 LET ch[3]='S'
WHEN g2=25 LET ch[3]='T'
WHEN g2=26 LET ch[3]='V'
WHEN g2=27 LET ch[3]='W'
WHEN g2=28 LET ch[3]='X'
WHEN g2=29 LET ch[3]='Y'
WHEN g2=30 LET ch[3]='Z'
WHEN g2>30
LET g3=g2 mod 31
Case
WHEN (g3 >=0 and g3<10) LET ch[3]=g3
WHEN g3=10 LET ch[3]='B'
WHEN g3=11 LET ch[3]='C'
WHEN g3=12 LET ch[3]='D'
WHEN g3=13 LET ch[3]='F'
WHEN g3=14 LET ch[3]='G'
WHEN g3=15 LET ch[3]='H'
WHEN g3=16 LET ch[3]='J'
WHEN g3=17 LET ch[3]='K'
WHEN g3=18 LET ch[3]='L'
WHEN g3=19 LET ch[3]='M'
WHEN g3=20 LET ch[3]='N'
WHEN g3=21 LET ch[3]=''
WHEN g3=22 LET ch[3]='Q'
WHEN g3=23 LET ch[3]='R'
WHEN g3=24 LET ch[3]='S'
WHEN g3=25 LET ch[3]='T'
WHEN g3=26 LET ch[3]='V'
WHEN g3=27 LET ch[3]='W'
WHEN g3=28 LET ch[3]='X'
WHEN g3=29 LET ch[3]='Y'
WHEN g3=30 LET ch[3]='Z'
End CASE
LET g4=g2/31
CASE
WHEN (g4 >=0 and g4<10) LET ch[2]=g4
WHEN g4=10 LET ch[2]='B'
WHEN g4=11 LET ch[2]='C'
WHEN g4=12 LET ch[2]='D'
WHEN g4=13 LET ch[2]='F'
WHEN g4=14 LET ch[2]='G'
WHEN g4=15 LET ch[2]='H'
WHEN g4=16 LET ch[2]='J'
WHEN g4=17 LET ch[2]='K'
WHEN g4=18 LET ch[2]='L'
WHEN g4=19 LET ch[2]='M'
WHEN g4=20 LET ch[2]='N'
WHEN g4=21 LET ch[2]='P'
WHEN g4=22 LET ch[2]='Q'
WHEN g4=23 LET ch[2]='R'
WHEN g4=24 LET ch[2]='S'
WHEN g4=25 LET ch[2]='T'
WHEN g4=26 LET ch[2]='V'
WHEN g4=27 LET ch[2]='W'
WHEN g4=28 LET ch[2]='X'
WHEN g4=29 LET ch[2]='Y'
WHEN g4=30 LET ch[2]='Z'
WHEN g4>30
LET g5=g4 mod 31
Case
WHEN (g5 >=0 and g5<10) LET ch[2]=g5
WHEN g5=10 LET ch[2]='B'
WHEN g5=11 LET ch[2]='C'
WHEN g5=12 LET ch[2]='D'
WHEN g5=13 LET ch[2]='F'
WHEN g5=14 LET ch[2]='G'
WHEN g5=15 LET ch[2]='H'
WHEN g5=16 LET ch[2]='J'
WHEN g5=17 LET ch[2]='K'
WHEN g5=18 LET ch[2]='L'
WHEN g5=19 LET ch[2]='M'
WHEN g5=20 LET ch[2]='N'
WHEN g5=21 LET ch[2]='P'
WHEN g5=22 LET ch[2]='Q'
WHEN g5=23 LET ch[2]='R'
WHEN g5=24 LET ch[2]='S'
WHEN g5=25 LET ch[2]='T'
WHEN g5=26 LET ch[2]='V'
WHEN g5=27 LET ch[2]='W'
WHEN g5=28 LET ch[2]='X'
WHEN g5=29 LET ch[2]='Y'
WHEN g5=30 LET ch[2]='Z'
End CASE
LET g6=g4/31
CASE
WHEN (g6 >=0 and g6<10) LET ch[1]=g6
WHEN g6=10 LET ch[1]='B'
WHEN g6=11 LET ch[1]='C'
WHEN g6=12 LET ch[1]='D'
WHEN g6=13 LET ch[1]='F'
WHEN g6=14 LET ch[1]='G'
WHEN g6=15 LET ch[1]='H'
WHEN g6=16 LET ch[1]='J'
WHEN g6=17 LET ch[1]='K'
WHEN g6=18 LET ch[1]='L'
WHEN g6=19 LET ch[1]='M'
WHEN g6=20 LET ch[1]='N'
WHEN g6=21 LET ch[1]='P'
WHEN g6=22 LET ch[1]='Q'
WHEN g6=23 LET ch[1]='R'
WHEN g6=24 LET ch[1]='S'
WHEN g6=25 LET ch[1]='T'
WHEN g6=26 LET ch[1]='V'
WHEN g6=27 LET ch[1]='W'
WHEN g6=28 LET ch[1]='X'
WHEN g6=29 LET ch[1]='Y'
WHEN g6=30 LET ch[1]='Z'
END Case
END Case
END CASE
LET ch1=ch
return ch1
END function
FUNCTION dd(k)
DEFINE k CHAR(4),
k1,k2,k3,k4 CHAR(1),
g1,g2,g3,g4,g5,g6 integer
LET k4=k[4]
LET k3=k[3]
LET k2=k[2]
LET k1=k[1]
CASE
WHEN k4='0' LET g4=0
WHEN k4='1' LET g4=1
WHEN k4='2' LET g4=2
WHEN k4='3' LET g4=3
WHEN k4='4' LET g4=4
WHEN k4='5' LET g4=5
WHEN k4='6' LET g4=6
WHEN k4='7' LET g4=7
WHEN k4='8' LET g4=8
WHEN k4='9' LET g4=9
WHEN k4='B' LET g4=10
WHEN k4='C' LET g4=11
WHEN k4='D' LET g4=12
WHEN k4='F' LET g4=13
WHEN k4='G' LET g4=14
WHEN k4='H' LET g4=15
WHEN k4='J' LET g4=16
WHEN k4='K' LET g4=17
WHEN k4='L' LET g4=18
WHEN k4='M' LET g4=19
WHEN k4='N' LET g4=20
WHEN k4='P' LET g4=21
WHEN k4='Q' LET g4=22
WHEN k4='R' LET g4=23
WHEN k4='S' LET g4=24
WHEN k4='T' LET g4=25
WHEN k4='V' LET g4=26
WHEN k4='W' LET g4=27
WHEN k4='X' LET g4=28
WHEN k4='Y' LET g4=29
WHEN k4='Z' LET g4=30
END CASE
CASE
WHEN k3='0' LET g3=0
WHEN k3='1' LET g3=1
WHEN k3='2' LET g3=2
WHEN k3='3' LET g3=3
WHEN k3='4' LET g3=4
WHEN k3='5' LET g3=5
WHEN k3='6' LET g3=6
WHEN k3='7' LET g3=7
WHEN k3='8' LET g3=8
WHEN k3='9' LET g3=9
WHEN k3='B' LET g3=10
WHEN k3='C' LET g3=11
WHEN k3='D' LET g3=12
WHEN k3='F' LET g3=13
WHEN k3='G' LET g3=14
WHEN k3='H' LET g3=15
WHEN k3='J' LET g3=16
WHEN k3='K' LET g3=17
WHEN k3='L' LET g3=18
WHEN k3='M' LET g3=19
WHEN k3='N' LET g3=20
WHEN k3='P' LET g3=21
WHEN k3='Q' LET g3=22
WHEN k3='R' LET g3=23
WHEN k3='S' LET g3=24
WHEN k3='T' LET g3=25
WHEN k3='V' LET g3=26
WHEN k3='W' LET g3=27
WHEN k3='X' LET g3=28
WHEN k3='Y' LET g3=29
WHEN k3='Z' LET g3=30
END CASE
CASE
WHEN k2='0' LET g2=0
WHEN k2='1' LET g2=1
WHEN k2='2' LET g2=2
WHEN k2='3' LET g2=3
WHEN k2='4' LET g2=4
WHEN k2='5' LET g2=5
WHEN k2='6' LET g2=6
WHEN k2='7' LET g2=7
WHEN k2='8' LET g2=8
WHEN k2='9' LET g2=9
WHEN k2='B' LET g2=10
WHEN k2='C' LET g2=11
WHEN k2='D' LET g2=12
WHEN k2='F' LET g2=13
WHEN k2='G' LET g2=14
WHEN k2='H' LET g2=15
WHEN k2='J' LET g2=16
WHEN k2='K' LET g2=17
WHEN k2='L' LET g2=18
WHEN k2='M' LET g2=19
WHEN k2='N' LET g2=20
WHEN k2='P' LET g2=21
WHEN k2='Q' LET g2=22
WHEN k2='R' LET g2=23
WHEN k2='S' LET g2=24
WHEN k2='T' LET g2=25
WHEN k2='V' LET g2=26
WHEN k2='W' LET g2=27
WHEN k2='X' LET g2=28
WHEN k2='Y' LET g2=29
WHEN k2='Z' LET g2=30
END CASE
CASE
WHEN k1='0' LET g1=0
WHEN k1='1' LET g1=1
WHEN k1='2' LET g1=2
WHEN k1='3' LET g1=3
WHEN k1='4' LET g1=4
WHEN k1='5' LET g1=5
WHEN k1='6' LET g1=6
WHEN k1='7' LET g1=7
WHEN k1='8' LET g1=8
WHEN k1='9' LET g1=9
WHEN k1='B' LET g1=10
WHEN k1='C' LET g1=11
WHEN k1='D' LET g1=12
WHEN k1='F' LET g1=13
WHEN k1='G' LET g1=14
WHEN k1='H' LET g1=15
WHEN k1='J' LET g1=16
WHEN k1='K' LET g1=17
WHEN k1='L' LET g1=18
WHEN k1='M' LET g1=19
WHEN k1='N' LET g1=20
WHEN k1='P' LET g1=21
WHEN k1='Q' LET g1=22
WHEN k1='R' LET g1=23
WHEN k1='S' LET g1=24
WHEN k1='T' LET g1=25
WHEN k1='V' LET g1=26
WHEN k1='W' LET g1=27
WHEN k1='X' LET g1=28
WHEN k1='Y' LET g1=29
WHEN k1='Z' LET g1=30
END CASE
LET g5=g4+g3*31+g2*31*31+g1*31*31*31
RETURN g5
END FUNCTION
[此帖子已被 tansj 在 2009-6-30 11:15:48 编辑过]
欢迎光临 赛捷软件论坛 (http://sagesoft.cn/bbs/) | Powered by Discuz! 7.2 |