流水号规则:
年 月 字母 编号
11 11  A    
11 11  B
   .
   .
   .
11 11  Z
11 11  A   1
11 11  B   1
   .
   .
   .
11 11  Z   1
11 11  A   2
11 11  B   2   .
   .
   .

解决方案 »

  1.   

    年月简单吧,不说了两个变量,v1,v2v1表示字母,从A至Z累加,加到Z回A,同时inc(v2)
      

  2.   


      var
        i,j,n:integer;
    begin
      n:=10;
      for j:=65 to 90 do
        memo1.Lines.add((  IntToStr((YearOf(date)) mod 100))+IntToStr(MonthOf(date))+char(j)     );
      for i:=1 to n do
         for j:=65 to 90 do
           memo1.Lines.add((  IntToStr((YearOf(date)) mod 100))+IntToStr(MonthOf(date))+char(j)+IntToStr(i)     );
    end;我来练练
      

  3.   

    这个前面取日期,后面记录序号,比如序号是 monid,流水号就是xid
    int xxx;
    string xid:=FormatDateTime("yymm",Now());
    xid:=xid+Chr(monid mod 26+65);
    xxx=monid div 26;
    if(xxx>0)
    xid:=xid+inttostr(xxx);
      

  4.   

    给你一个是从数据库取流水号计算的,到了Z9就结束,就是说一个月最多260个
    我测试过的,试试符合要求吗,也可以再扩展一下
    建表:t(t varchar(20))
    function TForm1.GetID():string;
    var
      s,s1,s2:string;
    begin
      s:=FormatDateTime('YYMM',Date+30);
      with adoquery1 do
      begin
        close;
        sql.text:='Select Top 1 t From t Where t like ''%'+s+'%'' Order By Len(t) Desc, right(t,1) desc,right(t,2) desc';
        open;
        if isempty then
           result:=s+'A'
        else
        begin
          s1:=adoquery1.fieldbyname('t').asstring;
          if s1=s+'Z9' then
             result:='超出了'
          else
          begin
            s2:=copy(s1,5,1);
            if s2<>'Z' then
               result:=s+Chr(Ord(s2[1])+1)+ copy(s1,6,1)
            else
            case Length(s1) of
              5:result:=s+'A1';
              6:result:=s+'A'+IntToStr(StrToInt(copy(s1,6,1))+1);
            end;
          end;
        end;
      end;
    end;