返回列表 发帖

使用X3的录入点产生自定义序列号

X3中的序列号定义功能十分强大。

但是在使用中我们可能会遇到客户要求产生的序列号并非普通的数字序列序列号的情况(如掺杂字母),这时我们可以用X3的录入点来完成这个自定义过程。

1、序列号定义的录入点:创建一个名为XSUBANM(自定义名称)的进程

 2、输入XSUBANM程序代码明细并编译(此例以客户/供应商国家代码作为参考值和产品组12作为参考值)

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 编辑过]

返回列表