用友U8流程审批效率-SQLServer+SSRS

文章目录

    • @[TOC]
    • 1、 需求及效果
      • 1.1 需求
      • 1.2 效果
    • 2、 思路及SQL语句
    • 3、实现折叠明细表
    • 4、结语

1、 需求及效果

1.1 需求

想要查看U8的审批流程,查看流程在哪个节点或人停留的时间,这个单据整个流程走下来需要的时间。可以更加直观方便的查看审批效率

1.2 效果

采用了SSRS上面的明细表折叠,点击+可以进行展开


在这里插入图片描述

2、 思路及SQL语句

1、在U8数据库中审批相关的表有WFAudit和Table_Task。根据这两张表中的内容观察,可以从Table_Task中取待审批的消息,从WFAudit中取其他的内容


2、VoucherType的含义: 01为销售发货单、0301为其他入库单、0302为其他出库单、0304为调拨单、0305为形态转换单、0324为调拨申请单、0412为材料出库单、17为销售订单、24为采购入库单、26为采购到货单、27为请购单、88为采购订单、AP40为应付付款申请单、BO11为物料清单、BO19为委外商物料清单、MO21为生产订单、om01为委外订单、OM26为委外到货单、PU01为供应商资格审批表、pu03为供应商存货调价单、SA19为客户调价单、SR01为服务单、U870_0003为存货申请


3、Action审批动作的意义:0为提交,1为批准,3为转签,5为撤销,6为不同意(可以退回给任何人),7为弃审,8为重新提交,11为会签给谁、12为会签同意、13为会签不同意


4、有MessageId代表的是在提交人节点
5、Table_Task表中creatime和endtime相同为待操作
6、流程状态、制单人、制单时间、当前审批人需要关联以上23种单据类型(通过单据编号进行关联)
7、VoucherCode一样代表是一个完整的审批过程


/*
U8审批效率
VoucherCode是工单
1.VoucherType的含义: 01为销售发货单、0301为其他入库单、0302为其他出库单、0304为调拨单、0305为形态转换单、0324为调拨申请单
0412为材料出库单、17为销售订单、24为采购入库单、26为采购到货单、27为请购单、88为采购订单、AP40为应付付款申请单
BO11为物料清单、BO19为委外商物料清单、MO21为生产订单、om01为委外订单、OM26为委外到货单、PU01为供应商资格审批表
pu03为供应商存货调价单、SA19为客户调价单、SR01为服务单、U870_0003为存货申请
2.Action审批动作0、1、3、5、6、7、8、11、12、13
0为提交,1为批准,3为转签,5为撤销,6为不同意(可以退回给任何人),7为弃审,8为重新提交,11为会签给谁、12为会签同意、13为会签不同意
会签给别人,是需要会签的人同意才能进入下一步,转签和会签有来源和来自哪里
有MessageId代表的是在提交人节点
关联各个单子对应的iverifystateex:-1是终审不同意,0是未提交,1是已提交,2是终审同意(终审同意就是归档)
3.VoucherCode一样代表是一个完整的审批过程,order by时间则为具体的时间
4.table_task中creatime和endtime相同为待操作
5.cMaker制单人.dcreatesytime制单时间,cCurrentAuditor当前审批人
*/
SELECT * FROM (
SELECT *,
DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号)) AS 流程总耗时,
		CASE 
 WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 0 AND 1440 THEN '1天之内'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 1441 AND 4320 THEN '2-3天'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 4321 AND 10080 THEN '4-7天'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 10081 AND 20160 THEN '8-14天'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 20161 AND 43200 THEN '15-30天'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 43201 AND 86400 THEN '31-60天'  
    WHEN DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号))  BETWEEN 86401 AND 129600 THEN '61-90天'  
    ELSE '90天以上'
	END AS 总耗时标识
 FROM(
SELECT DISTINCT * FROM(
	SELECT 
	CASE WHEN VoucherType='01' THEN '销售发货单'
	  WHEN VoucherType='0301' THEN '其他入库单'
	  WHEN VoucherType='0302' THEN '其他出库单'
	  WHEN VoucherType='0304' THEN '调拨单'
	  WHEN VoucherType='0305' THEN '形态转换单'
	  WHEN VoucherType='0324' THEN '调拨申请单'
	  WHEN VoucherType='0412' THEN '材料出库单'
	  WHEN VoucherType='17' THEN '销售订单'
	  WHEN VoucherType='24' THEN '采购入库单'
	  WHEN VoucherType='26' THEN '采购到货单'
	  WHEN VoucherType='27' THEN '请购单'
	  WHEN VoucherType='88' THEN '采购订单'
	  WHEN VoucherType='AP40' THEN '应付付款申请单'
	  WHEN VoucherType='BO11' THEN '物料清单'
	  WHEN VoucherType='BO19' THEN '委外商物料清单'
	  WHEN VoucherType='MO21' THEN '生产订单'
	  WHEN VoucherType='om01' THEN '委外订单'
	  WHEN VoucherType='OM26' THEN '委外到货单'
	  WHEN VoucherType='PU01' THEN '供应商资格审批表'
	  WHEN VoucherType='pu03' THEN '供应商存货调价单'
	  WHEN VoucherType='SA19' THEN '客户调价单'
	  WHEN VoucherType='SR01' THEN '服务单'
	  WHEN VoucherType='U870_0003' THEN '存货申请'
	  END AS 单据类型,
	 Vouchercode AS 单据编号,
	 OperatorName AS 节点操作人,
	--操作类型
	--0为提交,1为批准,3为转签,5为撤销,6为不同意(可以退回给任何人),7为弃审,8为重新提交,11为会签给谁、12为会签同意、13为会签不同意
	CASE WHEN Action='0' THEN '提交'
		 WHEN Action='1' THEN '同意'
		 WHEN Action='3' THEN '转签'
		 WHEN Action='5' THEN '撤销'
		 WHEN Action='6' THEN '不同意'
		 WHEN Action='7' THEN '弃审'
		 WHEN Action='8' THEN '重新提交'
		 WHEN Action='11' THEN '会签'
		 WHEN Action='12' THEN '会签同意'
		 WHEN Action='13' THEN '会签不同意'
		 END AS 操作类型,
	-- 使用LAG函数获取同一张单子的上一个审批操作时间
    LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS 接收时间,   
	OperationDate AS 节点操作时间,
	DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) AS 节点耗时,
	dbo.CONCAT_ALL_6(
		(CONVERT(NVARCHAR(10),(DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(COALESCE(OperationDate, GETDATE()) AS DATETIME) ))) / 1440), '天',
		(CONVERT(NVARCHAR(10),((DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(COALESCE(OperationDate, GETDATE()) AS DATETIME) ))) % 1440) / 60),'小时',
		(CONVERT(NVARCHAR(10),((DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(COALESCE(OperationDate, GETDATE()) AS DATETIME) ))))% 60) ,'分钟') AS 操作时长,

	CASE 
		WHEN Action<>'0' THEN 
		CASE 
		 WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 0 AND 1440 THEN '1天之内'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 1441 AND 4320 THEN '2-3天'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 4321 AND 10080 THEN '4-7天'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 10081 AND 20160 THEN '8-14天'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 20161 AND 43200 THEN '15-30天'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 43201 AND 86400 THEN '31-60天'  
    WHEN DATEDIFF(MINUTE, CAST(LAG(OperationDate) OVER (PARTITION BY VoucherType, VoucherCode ORDER BY OperationDate) AS DATETIME), 
	CAST(OperationDate AS DATETIME) ) BETWEEN 86401 AND 129600 THEN '61-90天'  
    ELSE '90天以上'
	END 
	END AS 标识,
		--是否归档,需要关联所有的表
	--iverifystat:-1是终审不同意,0是未提交,1是已提交,2是终审结束
	CASE 
			--A为销售发货单
		WHEN dbo.WFAudit.VoucherType ='01' THEN 
			CASE WHEN A.iverifystate='-1' THEN '终审不同意'
				 WHEN A.iverifystate='0' THEN '未提交'
				 WHEN A.iverifystate='1' THEN '已提交'
				 WHEN A.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 
			--B为其他入库单
		WHEN dbo.WFAudit.VoucherType='0301' THEN 
			CASE WHEN B.iverifystate='-1' THEN '终审不同意'
				 WHEN B.iverifystate='0' THEN '未提交'
				 WHEN B.iverifystate='1' THEN '已提交'
				 WHEN B.iverifystate='2' THEN '终审结束'
			   ELSE 'NULL'
				 END 
			--C为其他出库单
		WHEN WFAudit.VoucherType='0302' THEN 
			CASE WHEN C.iverifystate='-1' THEN '终审不同意'
				 WHEN C.iverifystate='0' THEN '未提交'
				 WHEN C.iverifystate='1' THEN '已提交'
				 WHEN C.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 
			--VoucherType=0304关联调拨单TransVouch 作为D
		WHEN WFAudit.VoucherType='0304' THEN 
			CASE WHEN D.iverifystate='-1' THEN '终审不同意'
				 WHEN D.iverifystate=

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/311645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NLP论文阅读记录 - wos | 01 使用深度学习对资源匮乏的语言进行抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive text summarization of lowresourced languages usi…

企业级进销存管理系统

框架&#xff1a; 进销存管理系统&#xff0c;采用SpringBootShiroMyBatisEasyUI 项目采用Maven构建&#xff0c;数据库文件存放在 sql/jxc.sql 截图 运行项目部分截图&#xff0c; 登录界面&#xff0c;用户名admin&#xff0c;密码admin123 当前库存查询&#xff0c; 进…

C/C++ 堆排序

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;数据结构_仍有未知等待探索的博客-CSDN博客 欢迎大家来指教&#xff01; 一、前言 今天要介绍的是堆排序。 首先什么是堆&#xff1f;简而言之&#xff0c;堆就是二叉树的数组形式&#xff0c;用数组来存…

c++最值查找

目录 min和max函数 min_element和max_element 例 nth_element函数 例 例题 题目描述 输入描述 输出描述 解 min和max函数 只能传入两个值或一个列表 时间复杂度为O(1),数组O(n)&#xff0c;n为元素个数 min_element和max_element min_element(st,ed)返回地址[st,…

企业泛域名SSL证书

SSL数字证书是一种电子证书&#xff0c;它由CA认证机构颁发&#xff0c;提供了加密连接和身份验证的功能。SSL数字证书广泛应用于各种在线服务&#xff0c;如网页浏览、电子邮件、在线银行等。它能够提供安全的连接&#xff0c;保护用户的个人信息和交易数据不被窃取或篡改。企…

如果你还忍受校园网,那么一定要看它!随身WiFi哪个品牌最靠谱 ?高人气随身WiFi第一名

很多学生党反映校园网价格太贵&#xff0c;贵就算了&#xff0c;还非常不好用&#xff0c;真的很泪崩。 对于学生党来说&#xff0c;一个性价比极高的随身WiFi才是正正好。 但是很多学生党对随身WiFi并不了解&#xff0c;那么下面我就回答几个学生党最关心的问题。一、价格合…

JVM类加载器打破双亲委派机制

欢迎大家关注我的微信公众号&#xff1a; 传送门&#xff1a;从JDK源码级别剖析JVM类加载器 目录 打破双亲委派机制 Tomcat打破双亲委派机制 Tomcat自定义加载器详解 模拟实现Tomcat打破双亲委派 上一篇文章讲到了jvm类加载器的双亲委派机制&#xff0c;本文就来讲…

探索 hasOwnProperty:处理对象属性的关键(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

IntelliJ IDEA Java 连接 mysql 配置(附完整 demo)

下载 MySQL 驱动 从MySQL官网下载JDBC驱动的步骤如下&#xff1a; 1&#xff09;访问MySQL的官方网站&#xff1a;MySQL 2&#xff09;点击页面上方的"DOWNLOADS"菜单&#xff1b; 3&#xff09;在下载页面&#xff0c;找到"MySQL Community (GPL) Downloads…

人工智能推动供应链革命的成功

人工智能推动供应链革命的成功 目录 人工智能推动供应链革命的成功一、供应链管理不断变化的面貌二、拥挤的解决方案景观三、踏上人工智能驱动的转型1. 价值创造识别、战略和路线图2. 目标解决方案设计和供应商选择3. 实施与系统集成4. 变革管理、能力建设和全面价值获取 新技术…

MySQL-索引回顾

索引是面试高频问答题&#xff0c;参考百度/CSDN/尚硅谷/黑马程序员/阿里云开发者社区&#xff0c;决定将索引知识回顾一下&#xff0c;忘记时&#xff0c;点开即可&#xff0c;时刻保持更新&#xff0c;事不宜迟&#xff0c;即刻享用。 索引概述 索引&#xff08;index&#…

Python算法例35 丑数Ⅰ

1. 问题描述 丑数的定义是&#xff0c;只包含质因子2、3、5的正整数&#xff0c;例如6、8就是丑数&#xff0c;但14不是丑数&#xff0c;因为它包含了质因子7&#xff0c;本例将检测一个整数是不是丑数。 2. 问题示例 给出num8&#xff0c;返回True&#xff1b;给出num14&am…

【LeetCode】第二高的薪水(数据库)

目录 题目&#xff1a; 方法一 验证一&#xff1a; 验证二&#xff1a; 方法二 验证一&#xff1a; 验证二&#xff1a; 方法三 验证一&#xff1a; 验证二&#xff1a; 题目&#xff1a; 方法一 SELECT DISTINCT Salary AS SecondHighestSalary FROM Employee O…

图片双线性插值原理解析与代码 Python

一、原理解析 图片插值是图片操作中最常用的操作之一。为了详细解析其原理&#xff0c;本文以 33 图片插值到 55 图片为例进行解析。如上图左边蓝色方框是 55 的目标图片&#xff0c;右边红色方框是 33 的源图片。上图中&#xff0c;蓝/红色方框是图片&#xff0c;图片中的蓝/红…

20个很棒的SEO博客和网站

搜索引擎优化 &#xff08;SEO&#xff09; 标准在不断变化。与社交媒体、电子邮件营销和人工智能 &#xff08;AI&#xff09; 等新兴技术一样&#xff0c;搜索引擎正在改进它们每天向用户提供结果的方式。 为此&#xff0c;他们专注于本地化、页面权限、点击率&#xff0c;甚…

k8s中top指令使用前提:正确安装metrics-server

参考引用项目&#xff1a;https://www.cnblogs.com/lfl17718347843/p/14283796.html Kubernetes Metrics Server 是 Cluster 的核心监控数据的聚合器&#xff0c;kubeadm 默认是不部署的。 确认metrics-server能否被使用的三个前提&#xff08;验证以及修改方法https://cnblogs…

peropure·AI:开创智能助手新纪元

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正迅速发展&#xff0c;并深刻地改变着我们的生活方式。在这个背景下&#xff0c;peropureAI崭露头角&#xff0c;作为一款基于先进AI大模型的对话式个人助理工具&#xff0c;它在多个场景中展现出卓越的实…

机器学习之心荣获2023博客之星TOP50 | 感谢CSDN

机器学习之心荣获2023博客之星TOP50 | 感谢CSDN 2023年&#xff0c;是极其不平凡的一年&#xff01;感谢CSDN平台&#xff01;感谢所有支持我的前辈、朋友和同学&#xff01;2024年&#xff0c;新的一年&#xff0c;继续努力&#xff0c;持续写作&#xff01;

MongoDB调优

三大导致 MongoDB 性能不佳的原因 1&#xff09;慢查询2&#xff09;阻塞等待3&#xff09;硬件资源不足1,2通常是因为模型/索引设计不佳导致的。排查思路&#xff1a;按1-2-3依次排查。 影响 MongoDB 性能的因素 MongoDB 性能监控工具 Free Monitoring 从版本 4.0 开始&am…

离散数学3

补变元 解释&#xff1a;它是以反^作为一组一组的&#xff0c;因此&#xff0c;对于P反^Q来说&#xff0c;P是一组&#xff0c;Q是一组&#xff0c;又有以下&#xff1a;对缺少变元的项要补齐&#xff0c;P缺少Q&#xff0c;Q缺少P。因此&#xff0c;补齐。 用分配律展开 解释&…