Foxtable(狐表)用户栏目专家坐堂 → [求助]生成编号的问题


  共有5060人关注过本帖树形打印复制链接

主题:[求助]生成编号的问题

帅哥哟,离线,有人找我吗?
7EQ98
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:26:00 [显示全部帖子]

*** EC_MAX_NO

*** 开发日期:2013-05-21  作者:LLAjun

*** 修改日期:2013-05-21  参与者:

*** 作用:返回最大编号

*范例:

* = EC_MAX_NO(1,'U_MPlan',"MPlan_Num","WJ_[YYYY]_[MM]_[XXXX]")

*!* EL_Net_Num   = 1  &&网络连接

*!* EL_Net_Name  = "U_MPlan"    &&网络表名称

*!* EL_Fid_Name  = "Mplan_Num"  &&编码字段

*!* EL_Num_Code  = Alltrim(Upper(EP_MPlan_Type(This.Parent.Combo1.ListIndex,6)))  &&编码方案

*!* EL_Max_Num = EC_Max_NO(EL_Net_Num,EL_Net_Name,EL_Fid_Name,EL_Num_Code)

Lparameters Input_Net_Num,Input_Net_Name,Input_Fid_Name,Input_Code,Input_Type

LOCAL       Input_Net_Num,Input_Net_Name,Input_Fid_Name,Input_Code,Input_Type

Input_Net_Num = Iif(Type("Input_Net_Num")="N",Input_Net_Num,1) &&网络连接

Input_Net_Name = Iif(Type("Input_Net_Name")="C",Alltrim(Upper(Input_Net_Name)),"U_MPlan")   &&网络表名称

Input_Fid_Name = Iif(Type("Input_Fid_Name")="C",Alltrim(Upper(Input_Fid_Name)),"MPlan_Num") &&编码字段名称

Input_Code = Iif(Type("Input_Code")="C",Alltrim(Upper(Input_Code)),"WJ-[YYYY]-[MM]-[XXXX]") &&编码方式  WJ_[YYYY]_[MM]_[XXXX]

Input_Type = Iif(Type("Input_Type")="C",Alltrim(Upper(Input_Type)),"A") &&A使用字母增位,L自动增位

Input_Code = EF_Para(Input_Code)  &&替换系统参数

REOUT = ""



 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:27:00 [显示全部帖子]

****** 必要传入参数检测 Top

***

If Empty(Input_Net_Name) = .T.

    Return REOUT

Endif

If Empty(Input_Fid_Name) = .T.

    Return REOUT

Endif

If Empty(Input_Code) = .T.

    Return REOUT

Endif

***

****** 必要传入参数检测 End

****** 增位方式提取 Top

***

If "{A}"$Input_Code

    Input_Type = "A"

    Input_Code = Strtran(Input_Code,"{A}","")

Endif

If "{L}"$Input_Code

    Input_Type = "L"

    Input_Code = Strtran(Input_Code,"{L}","")

Endif

***

****** 增位方式提取 End



 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:28:00 [显示全部帖子]

****** 流水号码段定位长度 Top

***

EL_Code_Len = 0  &&流水号位数

For EL_I = 1 To 20

    EL_X = "[" + Padl("", EL_I ,"X") + "]"

    If EL_X $ Input_Code

        Input_Code = Strtran(Input_Code,EL_X,"")

        EL_Code_Len = EL_I

    Endif

Next

***

****** 流水号码段定位长度 End

****** 网络连接 Top

***

EL_Net_Handle = EC_Net(Input_Net_Num) &&网络连接

If EL_Net_Handle <= 0

    Return REOUT

Endif

***

****** 网络连接 End

****** 生成条件语句 Top

***

EL_Cast_Code = EF_Cast(Input_Code,'V','SQL','X%T')  &&左包含

EL_Cast_LEN = EF_Cast(LEN(Input_Code) + EL_Code_Len,'V','SQL','')  &&

If Input_Type = 'A'  &&自动增加号码

    EL_SQL_Exec = "Select Max("+ Input_Fid_Name +") AS Max_Num" + ;

        " FROM " + Input_Net_Name + ;

        " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +;

        " And Len(LTrim(RTrim("+Input_Fid_Name+"))) >= " + EL_Cast_LEN +""

Else

    EL_SQL_Exec = "Select Max("+ Input_Fid_Name +") AS Max_Num" + ;

        " FROM " + Input_Net_Name + ;

        " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +;

        " And Len(LTrim(RTrim(MPlan_Num))) >= (" +;

        "Select  MAX(Len(LTrim(RTrim("+Input_Fid_Name+"))))" +;

        " FROM " + Input_Net_Name + ;

        " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +;

        ")"

Endif

***

****** 生成条件语句 End

*!*    _Cliptext = EL_SQL_Exec



 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:29:00 [显示全部帖子]

****** 返回最大编号 Top

***

EL_Max_Num = ""

EL_Cur_Dbf = "Cur_Max_NO" &&统计记录数量使用到的临时表

EL_Alias = Alias() &&返回当前工作表

If Used(EL_Cur_Dbf) = .T.

    Use In(EL_Cur_Dbf)

Endif

*** 执行SQL语句查询 Top

Try &&异常错误,TRY 无提示处理

    nResult = SQLExec(EL_Net_Handle,EL_SQL_Exec,EL_Cur_Dbf) &&网络查询语句

CATCH

_Cliptext = EL_SQL_Exec

    nResult = -4

Endtry

*** 执行SQL语句查询 End

If nResult >= 0 And Used(EL_Cur_Dbf)=.T.

    Select(EL_Cur_Dbf)

    EL_Max_Num = Max_Num

    If Isnull(EL_Max_Num) = .T.

        EL_Max_Num = Padl("", EL_Code_Len ,"0")

    Endif

ELSE

_Cliptext = EL_SQL_Exec

Endif

If Used(EL_Cur_Dbf) = .T.

    Use In(EL_Cur_Dbf)

Endif

If Empty(EL_Alias) = .F.

    If Used(EL_Alias) = .T.

        Select(EL_Alias)

    Endif

Endif

If Empty(EL_Max_Num) = .T.

    Return REOUT

Endif

*!* _Cliptext = FL_Exec_CSql

***

****** 返回最大编号 End



 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:29:00 [显示全部帖子]

****** 生成最新编号 Top

***

EL_Max_X = Alltrim(Strtran(EL_Max_Num,Input_Code,''))  &&取返回的流水号部分

EL_Max_X_N = Val(EL_Max_X) + 1 &&返回流水号转换数字值后+1

EL_Max_X_C = Str(EL_Max_X_N)   &&+1后转换为字符型

EL_Max_X_Len = Len(Alltrim(EL_Max_X_C)) &&转换为字符型后的长度

EL_Max_X_Out = ""

If Input_Type = 'L'  &&自动增加号码

    If EL_Max_X_Len <= EL_Code_Len &&新的字符串长度小于等于指定长度时

        EL_Max_X_Out = Strtran(Str(EL_Max_X_N,EL_Code_Len),' ','0')

    Else

        EL_Max_X_Out = Alltrim(Str(EL_Max_X_N))

    Endif

Else

    EL_SJ = .F.

    EL_A_Len = 0

    For EL_U = 1 To LEN(ALLTRIM(EL_Max_X)) &&1位开始检查是否为字母

        EL_P = Asc(Substr(Alltrim(EL_Max_X),EL_U,1))

        If EL_P >=65 And EL_P <=90 And EL_P<>0 &&如果是字母

            EL_SJ = .T.

            EL_A_Len = EL_U &&字母部分长度

        Endif

    Next

    If EL_SJ = .F.

        If EL_Max_X_Len > EL_Code_Len &&返回流水号总长度大于流水号长度

            EL_SJ =.T.

            EL_A_Len = 1 &&字母部分长度

        Endif

    Endif



 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:30:00 [显示全部帖子]

    If EL_SJ = .T.

        EL_A_C = Substr(Alltrim(EL_Max_X),1,EL_A_Len) &&字母部分

        EL_N_LEN =  EL_Code_Len - EL_A_Len            &&数字部分长度

        EL_N_C = Substr(Alltrim(EL_Max_X),EL_A_Len + 1,EL_Code_Len) &&数字部分

        EL_N = Val(EL_N_C) + 1 &&取数字部分+1

        If Len(Alltrim(Str(EL_N))) > EL_N_LEN &&如果长度超过原有数字部分长度

            If Asc(Right(EL_A_C,1)) >= 90

                EL_A_C = EL_A_C + "A"

                EL_N_C = Strtran(Str(1,EL_N_LEN-1),' ','0')

                EL_Max_X_Out = EL_A_C + EL_N_C

            ELSE

                IF Asc(Right(EL_A_C,1)) >= 48 AND Asc(Right(EL_A_C,1)) <= 57 &&9

                EL_A_C = Left(EL_A_C,EL_A_LEN - 1) + "A"

                else

                EL_A_C = Left(EL_A_C,EL_A_LEN - 1) + Chr(Asc(Right(EL_A_C,1))+1)

                endif

                EL_N_C = Strtran(Str(1,EL_N_LEN),' ','0')

                EL_Max_X_Out = EL_A_C + EL_N_C

            Endif

        Else

            EL_Max_X_Out = Substr(Alltrim(EL_Max_X),1,EL_A_Len) + Strtran(Str(EL_N,EL_N_LEN),' ','0')

        Endif

    Else

        EL_Max_X_Out = Strtran(Str(EL_Max_X_N,EL_Code_Len),' ','0')

    Endif

Endif

EL_Max_Out = Input_Code + EL_Max_X_Out

RETURN EL_Max_Out

***

****** 生成最新编号 End


 回到顶部
帅哥哟,离线,有人找我吗?
7EQ98
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:16 积分:166 威望:0 精华:0 注册:2014/1/9 8:34:00
  发帖心情 Post By:2014/1/10 10:30:00 [显示全部帖子]

图片点击可在新窗口打开查看

 回到顶部