使用X3的录入点产生自定义序列号
<P>X3中的序列号定义功能十分强大。</P><P>但是在使用中我们可能会遇到客户要求产生的序列号并非普通的数字序列序列号的情况(如掺杂字母),这时我们可以用X3的录入点来完成这个自定义过程。</P><P>1、<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">序列号定义的录入点:创建一个名为</SPAN><SPAN lang=EN-US>XSUBANM</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">(自定义名称)的进程</SPAN></P><P><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><FONT face="Times New Roman"><IMG border=0 src="attachments/bbsxp/2009-6/200963011321.png"></FONT></SPAN></P><P><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> </v:shapetype></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">2、<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输入</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">XSUBANM</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序代码明细并编译(此例以客户</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">/</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">供应商国家代码作为参考值和产品组</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">1</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">2</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为参考值)</SPAN></SPAN></P><P><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><FONT face="Times New Roman"><IMG border=0 src="attachments/bbsxp/2009-6/200963011413.png"></FONT></SPAN></SPAN></P><P><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><FONT size=2>3、<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">序列数定义(注意这个序列号名必须和在</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">XSUBANM</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序中定义的一致)</SPAN></FONT></SPAN></SPAN></FONT></P><P><IMG border=0 src="attachments/bbsxp/2009-6/200963011644.png"></P><P>这样当系统通过GESBPC这支程序调用CUS这个序列数定义的时候就会走录入点中设定的逻辑给一些变量赋值。</P><P>以下是我以前写的一个31进制的序列号生成算法,该序列号定义所包含的字符为0123456789BCDFGHJKLMNPQRSTVWXYZ,即第一位为0,第11位为B,第31位为Z,第32位为0。</P><P>具体做法为在数据库中以数据形式记录一个序列值,当序列号增长时将此值+1,再将此值传入到bb FUNCTION中来算出增长后的这个数值对应的字符串,也可以将字符串传入dd FUNCTION产生对应的数字序列值。程序语言很简单,就不改了。代码如下:</P><P><FONT face="Courier New">FUNCTION bb(g)<BR>DEFINE g,g1,g2,g3,g4,g5,g6 INTEGER,<BR> ch CHAR(4),<BR> ch1 CHAR(4) </FONT></P><P><FONT face="Courier New"> LET ch='0000'<BR> LET g1=g mod 31<BR> CASE <BR> WHEN (g1 >=0 and g1<10) LET ch[4]=g1 <BR> WHEN g1=10 LET ch[4]='B'<BR> WHEN g1=11 LET ch[4]='C'<BR> WHEN g1=12 LET ch[4]='D'<BR> WHEN g1=13 LET ch[4]='F'<BR> WHEN g1=14 LET ch[4]='G'<BR> WHEN g1=15 LET ch[4]='H'<BR> WHEN g1=16 LET ch[4]='J'<BR> WHEN g1=17 LET ch[4]='K'<BR> WHEN g1=18 LET ch[4]='L'<BR> WHEN g1=19 LET ch[4]='M'<BR> WHEN g1=20 LET ch[4]='N'<BR> WHEN g1=21 LET ch[4]='P'<BR> WHEN g1=22 LET ch[4]='Q'<BR> WHEN g1=23 LET ch[4]='R'<BR> WHEN g1=24 LET ch[4]='S'<BR> WHEN g1=25 LET ch[4]='T'<BR> WHEN g1=26 LET ch[4]='V'<BR> WHEN g1=27 LET ch[4]='W'<BR> WHEN g1=28 LET ch[4]='X'<BR> WHEN g1=29 LET ch[4]='Y'<BR> WHEN g1=30 LET ch[4]='Z'<BR> END CASE</FONT></P><P><FONT face="Courier New"> LET g2=g/31<BR> CASE <BR> WHEN (g2 >=0 and g2<10) LET ch[3]=g2 <BR> WHEN g2=10 LET ch[3]='B'<BR> WHEN g2=11 LET ch[3]='C'<BR> WHEN g2=12 LET ch[3]='D'<BR> WHEN g2=13 LET ch[3]='F'<BR> WHEN g2=14 LET ch[3]='G'<BR> WHEN g2=15 LET ch[3]='H'<BR> WHEN g2=16 LET ch[3]='J'<BR> WHEN g2=17 LET ch[3]='K'<BR> WHEN g2=18 LET ch[3]='L'<BR> WHEN g2=19 LET ch[3]='M'<BR> WHEN g2=20 LET ch[3]='N'<BR> WHEN g2=21 LET ch[3]='P'<BR> WHEN g2=22 LET ch[3]='Q'<BR> WHEN g2=23 LET ch[3]='R'<BR> WHEN g2=24 LET ch[3]='S'<BR> WHEN g2=25 LET ch[3]='T'<BR> WHEN g2=26 LET ch[3]='V'<BR> WHEN g2=27 LET ch[3]='W'<BR> WHEN g2=28 LET ch[3]='X'<BR> WHEN g2=29 LET ch[3]='Y'<BR> WHEN g2=30 LET ch[3]='Z'<BR> WHEN g2>30<BR> LET g3=g2 mod 31<BR> Case <BR> WHEN (g3 >=0 and g3<10) LET ch[3]=g3 <BR> WHEN g3=10 LET ch[3]='B'<BR> WHEN g3=11 LET ch[3]='C'<BR> WHEN g3=12 LET ch[3]='D'<BR> WHEN g3=13 LET ch[3]='F'<BR> WHEN g3=14 LET ch[3]='G'<BR> WHEN g3=15 LET ch[3]='H'<BR> WHEN g3=16 LET ch[3]='J'<BR> WHEN g3=17 LET ch[3]='K'<BR> WHEN g3=18 LET ch[3]='L'<BR> WHEN g3=19 LET ch[3]='M'<BR> WHEN g3=20 LET ch[3]='N'<BR> WHEN g3=21 LET ch[3]='P'<BR> WHEN g3=22 LET ch[3]='Q'<BR> WHEN g3=23 LET ch[3]='R'<BR> WHEN g3=24 LET ch[3]='S'<BR> WHEN g3=25 LET ch[3]='T'<BR> WHEN g3=26 LET ch[3]='V'<BR> WHEN g3=27 LET ch[3]='W'<BR> WHEN g3=28 LET ch[3]='X'<BR> WHEN g3=29 LET ch[3]='Y'<BR> WHEN g3=30 LET ch[3]='Z'<BR> End CASE</FONT></P><P><FONT face="Courier New"> LET g4=g2/31<BR> CASE <BR> WHEN (g4 >=0 and g4<10) LET ch[2]=g4 <BR> WHEN g4=10 LET ch[2]='B'<BR> WHEN g4=11 LET ch[2]='C'<BR> WHEN g4=12 LET ch[2]='D'<BR> WHEN g4=13 LET ch[2]='F'<BR> WHEN g4=14 LET ch[2]='G'<BR> WHEN g4=15 LET ch[2]='H'<BR> WHEN g4=16 LET ch[2]='J'<BR> WHEN g4=17 LET ch[2]='K'<BR> WHEN g4=18 LET ch[2]='L'<BR> WHEN g4=19 LET ch[2]='M'<BR> WHEN g4=20 LET ch[2]='N'<BR> WHEN g4=21 LET ch[2]='P'<BR> WHEN g4=22 LET ch[2]='Q'<BR> WHEN g4=23 LET ch[2]='R'<BR> WHEN g4=24 LET ch[2]='S'<BR> WHEN g4=25 LET ch[2]='T'<BR> WHEN g4=26 LET ch[2]='V'<BR> WHEN g4=27 LET ch[2]='W'<BR> WHEN g4=28 LET ch[2]='X'<BR> WHEN g4=29 LET ch[2]='Y'<BR> WHEN g4=30 LET ch[2]='Z'<BR> WHEN g4>30<BR> LET g5=g4 mod 31<BR> Case <BR> WHEN (g5 >=0 and g5<10) LET ch[2]=g5 <BR> WHEN g5=10 LET ch[2]='B'<BR> WHEN g5=11 LET ch[2]='C'<BR> WHEN g5=12 LET ch[2]='D'<BR> WHEN g5=13 LET ch[2]='F'<BR> WHEN g5=14 LET ch[2]='G'<BR> WHEN g5=15 LET ch[2]='H'<BR> WHEN g5=16 LET ch[2]='J'<BR> WHEN g5=17 LET ch[2]='K'<BR> WHEN g5=18 LET ch[2]='L'<BR> WHEN g5=19 LET ch[2]='M'<BR> WHEN g5=20 LET ch[2]='N'<BR> WHEN g5=21 LET ch[2]='P'<BR> WHEN g5=22 LET ch[2]='Q'<BR> WHEN g5=23 LET ch[2]='R'<BR> WHEN g5=24 LET ch[2]='S'<BR> WHEN g5=25 LET ch[2]='T'<BR> WHEN g5=26 LET ch[2]='V'<BR> WHEN g5=27 LET ch[2]='W'<BR> WHEN g5=28 LET ch[2]='X'<BR> WHEN g5=29 LET ch[2]='Y'<BR> WHEN g5=30 LET ch[2]='Z'<BR> End CASE</FONT></P><P><FONT face="Courier New"> LET g6=g4/31<BR> CASE <BR> WHEN (g6 >=0 and g6<10) LET ch[1]=g6 <BR> WHEN g6=10 LET ch[1]='B'<BR> WHEN g6=11 LET ch[1]='C'<BR> WHEN g6=12 LET ch[1]='D'<BR> WHEN g6=13 LET ch[1]='F'<BR> WHEN g6=14 LET ch[1]='G'<BR> WHEN g6=15 LET ch[1]='H'<BR> WHEN g6=16 LET ch[1]='J'<BR> WHEN g6=17 LET ch[1]='K'<BR> WHEN g6=18 LET ch[1]='L'<BR> WHEN g6=19 LET ch[1]='M'<BR> WHEN g6=20 LET ch[1]='N'<BR> WHEN g6=21 LET ch[1]='P'<BR> WHEN g6=22 LET ch[1]='Q'<BR> WHEN g6=23 LET ch[1]='R'<BR> WHEN g6=24 LET ch[1]='S'<BR> WHEN g6=25 LET ch[1]='T' <BR> WHEN g6=26 LET ch[1]='V'<BR> WHEN g6=27 LET ch[1]='W'<BR> WHEN g6=28 LET ch[1]='X'<BR> WHEN g6=29 LET ch[1]='Y'<BR> WHEN g6=30 LET ch[1]='Z'<BR> END Case <BR> END Case <BR> END CASE <BR> LET ch1=ch <BR> return ch1<BR>END function</FONT></P><P><FONT face="Courier New">FUNCTION dd(k)<BR>DEFINE k CHAR(4),<BR> k1,k2,k3,k4 CHAR(1), <BR> g1,g2,g3,g4,g5,g6 integer</FONT></P><P><FONT face="Courier New"> LET k4=k[4]<BR> LET k3=k[3]<BR> LET k2=k[2]<BR> LET k1=k[1]<BR> CASE <BR> WHEN k4='0' LET g4=0<BR> WHEN k4='1' LET g4=1<BR> WHEN k4='2' LET g4=2<BR> WHEN k4='3' LET g4=3<BR> WHEN k4='4' LET g4=4<BR> WHEN k4='5' LET g4=5<BR> WHEN k4='6' LET g4=6<BR> WHEN k4='7' LET g4=7<BR> WHEN k4='8' LET g4=8<BR> WHEN k4='9' LET g4=9<BR> WHEN k4='B' LET g4=10<BR> WHEN k4='C' LET g4=11<BR> WHEN k4='D' LET g4=12<BR> WHEN k4='F' LET g4=13<BR> WHEN k4='G' LET g4=14<BR> WHEN k4='H' LET g4=15<BR> WHEN k4='J' LET g4=16<BR> WHEN k4='K' LET g4=17<BR> WHEN k4='L' LET g4=18<BR> WHEN k4='M' LET g4=19<BR> WHEN k4='N' LET g4=20<BR> WHEN k4='P' LET g4=21<BR> WHEN k4='Q' LET g4=22<BR> WHEN k4='R' LET g4=23<BR> WHEN k4='S' LET g4=24<BR> WHEN k4='T' LET g4=25<BR> WHEN k4='V' LET g4=26<BR> WHEN k4='W' LET g4=27<BR> WHEN k4='X' LET g4=28<BR> WHEN k4='Y' LET g4=29<BR> WHEN k4='Z' LET g4=30<BR> END CASE<BR> CASE <BR> WHEN k3='0' LET g3=0<BR> WHEN k3='1' LET g3=1<BR> WHEN k3='2' LET g3=2<BR> WHEN k3='3' LET g3=3<BR> WHEN k3='4' LET g3=4<BR> WHEN k3='5' LET g3=5<BR> WHEN k3='6' LET g3=6<BR> WHEN k3='7' LET g3=7<BR> WHEN k3='8' LET g3=8<BR> WHEN k3='9' LET g3=9<BR> WHEN k3='B' LET g3=10<BR> WHEN k3='C' LET g3=11<BR> WHEN k3='D' LET g3=12<BR> WHEN k3='F' LET g3=13<BR> WHEN k3='G' LET g3=14<BR> WHEN k3='H' LET g3=15<BR> WHEN k3='J' LET g3=16<BR> WHEN k3='K' LET g3=17<BR> WHEN k3='L' LET g3=18<BR> WHEN k3='M' LET g3=19<BR> WHEN k3='N' LET g3=20<BR> WHEN k3='P' LET g3=21<BR> WHEN k3='Q' LET g3=22<BR> WHEN k3='R' LET g3=23<BR> WHEN k3='S' LET g3=24<BR> WHEN k3='T' LET g3=25<BR> WHEN k3='V' LET g3=26<BR> WHEN k3='W' LET g3=27<BR> WHEN k3='X' LET g3=28<BR> WHEN k3='Y' LET g3=29<BR> WHEN k3='Z' LET g3=30<BR> END CASE<BR> CASE <BR> WHEN k2='0' LET g2=0<BR> WHEN k2='1' LET g2=1<BR> WHEN k2='2' LET g2=2<BR> WHEN k2='3' LET g2=3<BR> WHEN k2='4' LET g2=4<BR> WHEN k2='5' LET g2=5<BR> WHEN k2='6' LET g2=6<BR> WHEN k2='7' LET g2=7<BR> WHEN k2='8' LET g2=8<BR> WHEN k2='9' LET g2=9<BR> WHEN k2='B' LET g2=10<BR> WHEN k2='C' LET g2=11<BR> WHEN k2='D' LET g2=12<BR> WHEN k2='F' LET g2=13<BR> WHEN k2='G' LET g2=14<BR> WHEN k2='H' LET g2=15<BR> WHEN k2='J' LET g2=16<BR> WHEN k2='K' LET g2=17<BR> WHEN k2='L' LET g2=18<BR> WHEN k2='M' LET g2=19<BR> WHEN k2='N' LET g2=20<BR> WHEN k2='P' LET g2=21<BR> WHEN k2='Q' LET g2=22<BR> WHEN k2='R' LET g2=23<BR> WHEN k2='S' LET g2=24<BR> WHEN k2='T' LET g2=25<BR> WHEN k2='V' LET g2=26<BR> WHEN k2='W' LET g2=27<BR> WHEN k2='X' LET g2=28<BR> WHEN k2='Y' LET g2=29<BR> WHEN k2='Z' LET g2=30<BR> END CASE<BR> CASE<BR> WHEN k1='0' LET g1=0<BR> WHEN k1='1' LET g1=1<BR> WHEN k1='2' LET g1=2<BR> WHEN k1='3' LET g1=3<BR> WHEN k1='4' LET g1=4<BR> WHEN k1='5' LET g1=5<BR> WHEN k1='6' LET g1=6<BR> WHEN k1='7' LET g1=7<BR> WHEN k1='8' LET g1=8<BR> WHEN k1='9' LET g1=9<BR> WHEN k1='B' LET g1=10<BR> WHEN k1='C' LET g1=11<BR> WHEN k1='D' LET g1=12<BR> WHEN k1='F' LET g1=13<BR> WHEN k1='G' LET g1=14<BR> WHEN k1='H' LET g1=15<BR> WHEN k1='J' LET g1=16<BR> WHEN k1='K' LET g1=17<BR> WHEN k1='L' LET g1=18<BR> WHEN k1='M' LET g1=19<BR> WHEN k1='N' LET g1=20<BR> WHEN k1='P' LET g1=21<BR> WHEN k1='Q' LET g1=22<BR> WHEN k1='R' LET g1=23<BR> WHEN k1='S' LET g1=24<BR> WHEN k1='T' LET g1=25<BR> WHEN k1='V' LET g1=26<BR> WHEN k1='W' LET g1=27<BR> WHEN k1='X' LET g1=28<BR> WHEN k1='Y' LET g1=29<BR> WHEN k1='Z' LET g1=30<BR> END CASE<BR> LET g5=g4+g3*31+g2*31*31+g1*31*31*31<BR> RETURN g5<BR>END FUNCTION</FONT></P><p>[此帖子已被 tansj 在 2009-6-30 11:15:48 编辑过]页:
[1]