VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: caoyuezj

单据审批流程的sql如何写

[复制链接]

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 22:36:02 | 显示全部楼层
2,如何判断所有审批已经全了
关于这个,首先在f_spyj里面把所有'|bmbegin|部门|bmend|'中的部门取出来形成一个总的字符串,同时在tbnote_check_order里,把所有部门形成一行,两个字符串作比较,如果一致就表示已经全了,如何做?
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-10 00:18:01 | 显示全部楼层
一行可能有多個|linebegin|, |lineend| 是嗎?
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-10 02:18:02 | 显示全部楼层
这里的一行指的是一个部门的审批信息,字符数没有限制的,就是说一个部门的审批信息用linebegin和lineend括起来了,就把它理解成一对{}就行了
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-10 12:00:01 | 显示全部楼层
一行就是一对括号的意思,并不是一行文字,一对括号中可能是一行也可能是多行,一行中可能也有多对括号
回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-10 17:27:02 | 显示全部楼层
学习
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-16 15:45:02 | 显示全部楼层
create table tbnote_check_order
(
f_djlxbm  varchar(3)        Not Null,               --单据类型编码
f_xh  int               Not Null,               --序号
f_bmbm   varchar(15)      Not Null,               --部门编码
f_must  int               Not Null,               --必须(0否1是)
Constraint tbnote_check_order_key Primary Key(f_djlxbm,f_xh)
)
就是不同的单据有不同的审批业务流程,上面我只是要求一种单据的业务流程,难道这么难写吗?
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-16 17:00:01 | 显示全部楼层
表結構有間題
回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-16 18:45:01 | 显示全部楼层
/*
设计思路:先得到tbnote_check_order中全部必须审核的部门的数目,然后在对审批信息进行解码,遇到部门字符时进行判断是不是必须审核部门,
        如果条件成立,则表示所有的审核流程中的其中一个已经满足,循环结束可得知审批信息中所包含的必须审核部门数目是否等于tbnote_check_order
        中规定的数目
参数说明:
@vDjlxbm
  表示要进行审核的单据类型
@vSpInfo
  传入的审批信息字符串
返回参数:
@iIsOver
  0表示没有
  1表示全部通过
  2表示没有审批流程
*/
create procedure p_SpIsOver(@vDjlxbm varchar(3),@vSpInfo varchar(8000),@iIsOver int output)
as
begin
     declare @s as varchar(8000)
     declare @i as int
     declare @j as int
     declare @len as int
     declare @bm as varchar(30)
     select @i=count(f_bmbm) from tbnote_check_order where f_djlxbm=@vDjlxbm and f_must=1
     if @i>0
     begin      
       set @len=len(@vSpInfo)
       if @len=0  
       begin
         set @iIsOver=0
         return
       end
       else
       begin
         while @len>1
         begin
            if substring(right(@vSpInfo,@len),1,len('|bmbegin|'))='|bmbegin|'
            begin
              set @bm=substring(@vSpInfo,len(@vSpInfo)-@len+len('|bmbegin|')+1,charindex('|bmend|',right(@vSpInfo,@len))-len('|bmbegin|')-1)
              select @j=count(f_bmbm) from tbnote_check_order where f_djlxbm=@vDjlxbm and f_must=1 and f_bmbm=@bm
              if @j=1 set @i=@i-1
            end
            set @len=@len-1  
         end
         if @i=0 set @iIsOver=1
         else set @iIsOver=0
       end
     end
     else
     begin
       set @iIsOver=2
       return
     end     
end
回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-17 09:00:01 | 显示全部楼层
--测试环境

create table tbnote_check_order
(
f_djlxbm  varchar(3)        Not Null,               --单据类型编码
f_xh  int               Not Null,               --序号
f_bmbm   varchar(15)      Not Null,               --部门编码
f_must  int               Not Null,               --必须(0否1是)
Constraint tbnote_check_order_key Primary Key(f_djlxbm,f_xh)
)

insert into tbnote_check_order
select 'abc',1,'001',1 union all
select 'abc',2,'002',0 union all
select 'abc',3,'004',1

declare @c int
exec p_SpIsOver 'abc','|linebegin|haha2007-1-1|bmbegin|001|bmend|hehe123|ygbmbegin|001|ygbmend|sdjklsd|lineend|',@c out
select @c

--result
0

declare @c int
exec p_SpIsOver 'abc','|linebegin|haha2007-1-1|bmbegin|001|bmend|hehe123|ygbmbegin|001|ygbmend|sdjklsd|lineend|
|linebegin|haha2007-2-1|bmbegin|004|bmend|hehe123|ygbmbegin|001|ygbmend|sdjkfddfdfssfdlsd|lineend|
',@c out
select @c
--result
1

declare @c int
exec p_SpIsOver 'abc','|linebegin|haha2007-1-1|bmbegin|001|bmend|hehe123|ygbmbegin|001|ygbmend|sdjklsd|lineend|
|linebegin|haha2007-2-1|bmbegin|002|bmend|hehe123|ygbmbegin|001|ygbmend|sdjkfddfdfssfdlsd|lineend|
',@c out
select @c
--result
0

declare @c int
exec p_SpIsOver 'abc','|linebegin|haha2007-1-1|bmbegin|001|bmend|hehe123|ygbmbegin|001|ygbmend|sdjklsd|lineend|
|linebegin|haha2007-2-1|bmbegin|002|bmend|hehe123|ygbmbegin|001|ygbmend|sdjkfddfdfssfdlsd|lineend|
|linebegin|haha2007-2-1|bmbegin|004|bmend|hehe123|ygbmbegin|001|ygbmend|sdjkfddfdfssfdlsd|lineend|
',@c out
select @c
--result
1
回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-17 12:09:01 | 显示全部楼层
declare @c int
exec p_SpIsOver 'aaa','|linebegin|haha2007-1-1|bmbegin|001|bmend|hehe123|ygbmbegin|001|ygbmend|sdjklsd|lineend|',@c out
select @c
--result
2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表