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

news2024/11/24 18:26:01

文章目录

    • @[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 *,
DATEDIFF(MINUTE, MIN(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号),
MAX(节点操作时间) OVER (PARTITION BY 单据类型, 单据编号)) 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='0' THEN '未提交'
				 WHEN D.iverifystate='1' THEN '已提交'
				 WHEN D.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 		
			--VoucherType=0305关联形态转换单AssemVouch
		WHEN dbo.WFAudit.VoucherType='0305' THEN
			CASE WHEN E.iverifystate='-1' THEN '终审不同意'
				 WHEN E.iverifystate='0' THEN '未提交'
				 WHEN E.iverifystate='1' THEN '已提交'
				 WHEN E.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 	
			--VoucherType=0324关联调拨申请单ST_AppTransVouch 
		WHEN dbo.WFAudit.VoucherType='0324' THEN 
			CASE WHEN F.iverifystate='-1' THEN '终审不同意'
				 WHEN F.iverifystate='0' THEN '未提交'
				 WHEN F.iverifystate='1' THEN '已提交'
				 WHEN F.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 	
			--VoucherType=0412关联材料出库单rdrecord11 
		WHEN dbo.WFAudit.VoucherType='0412' THEN 
			CASE WHEN G.iverifystate='-1' THEN '终审不同意'
				 WHEN G.iverifystate='0' THEN '未提交'
				 WHEN G.iverifystate='1' THEN '已提交'
				 WHEN G.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 	
			--VoucherType=17关联销售订单SO_SOMain 
		WHEN dbo.WFAudit.VoucherType='17' THEN 
			CASE WHEN H.iverifystate='-1' THEN '终审不同意'
				 WHEN H.iverifystate='0' THEN '未提交'
				 WHEN H.iverifystate='1' THEN '已提交'
				 WHEN H.iverifystate='2' THEN '终审结束'
				 ELSE 'NULL'
				 END 	
		--VoucherType=24关联采购入库单RdRecord01
		

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法每日一练]-动态规划 (保姆级教程 篇15) #纸带 #围栏木桩 #四柱河内塔

目录 今日知识点&#xff1a; 计算最长子序列的方案个数&#xff0c;类似最短路径个数问题 四柱河内塔问题&#xff1a;dp[i]min{ (p[i-k]f[k])dp[i-k] } 纸带 围栏木桩 四柱河内塔 纸带 思路&#xff1a; 我们先设置dp[i]表示从i到n的方案数。 那么减法操作中&#xff…

TensorRt(5)动态尺寸输入的分割模型测试

文章目录 1、固定输入尺寸逻辑2、动态输入尺寸2.1、模型导出2.2、推理测试2.3、显存分配问题2.4、完整代码 这里主要说明使用TensorRT进行加载编译优化后的模型engine进行推理测试&#xff0c;与前面进行目标识别、目标分类的模型的网络输入是固定大小不同&#xff0c;导致输入…

Docker中镜像的相关操作

1.辅助操作 docker version&#xff1a;用查看docker客户端引擎和server端引擎版本信息。 docker info&#xff1a;用来查看docker引擎的详细信息。 docker --help&#xff1a;用来查看帮助信息。 2.镜像Image docker images&#xff1a;查看当前本地仓库中存在哪些镜像。 …

Mysql是怎样运行的--下

文章目录 Mysql是怎样运行的--下查询优化explainoptimizer_trace InnoDB的Buffer Pool&#xff08;缓冲池&#xff09;Buffer Pool的存储结构空闲页存储--free链表脏页&#xff08;修改后的数据&#xff09;存储--flush链表 使用Buffer PoolLRU链表的管理 事务ACID事务的状态事…

在CentOS环境下编译GreatSQL RPM包

本文介绍如何在CentOS环境下编译GreatSQL RPM包。 运行环境是docker中的CentOS 8 x86_64&#xff1a; $ docker -v Docker version 20.10.10, build b485636$ docker run -itd --hostname c8 --name c8 centos bash a0a2128591335ef41e6faf46b7e79953c097500e9f033733c3ab37f…

使用curl命令在Linux中进行HTTP请求

在Linux中&#xff0c;curl是一个非常强大的命令行工具&#xff0c;用于发送HTTP请求。它允许用户发送各种类型的HTTP请求&#xff0c;如GET、POST、PUT、DELETE等&#xff0c;并能够处理响应数据。 首先&#xff0c;确保您的Linux系统已经安装了curl。如果未安装&#xff0c;…

Android 13 移除下拉栏中的设置入口

介绍 因为当前项目的设置已被加密&#xff0c;客户不希望通过下拉窗口的设置图标进入设置&#xff0c;决定去掉该图标。 效果展示 分析 这里首先想到在SystemUI寻找这个图标的资源文件&#xff0c;找到资源文件后寻找对应控件调用的地方&#xff0c;根据id寻找控件代码即可。…

2024年Google Ads新手指南——广告运作与类型、工具

谷歌广告投放是出海企业的必备运营动作&#xff0c;但你需要先了解他的运作逻辑、广告类型、投放必备的工具类型&#xff0c;之后可以为你的投放的高速转化做好万全准备&#xff0c;毕竟每一分钱都要花在刀刃上&#xff01;废话不多说&#xff0c;下面开始为新手准备了基础指南…

【LLM】vLLM部署与int8量化

Acceleration & Quantization vLLM vLLM是一个开源的大型语言模型&#xff08;LLM&#xff09;推理和服务库&#xff0c;它通过一个名为PagedAttention的新型注意力算法来解决传统LLM在生产环境中部署时所遇到的高内存消耗和计算成本的挑战。PagedAttention算法能有效管理…

重置 Docker 中 Gitlab 的账号密码

1、首先进入Docker容器 docker exec -it gitlab bash 2、连接到 gitlab 的数据库 需要谨慎操作 gitlab-rails console -e production 等待加载完后会进入控制台 ------------------------------------------------------------------------------------------------------…

Page 251~254 Win32 GUI项目

win32_gui 源代码&#xff1a; #if defined(UNICODE) && !defined(_UNICODE)#define _UNICODE #elif defined(_UNICODE) && !defined(UNICODE)#define UNICODE #endif#include <tchar.h> #include <windows.h>/* Declare Windows procedure */…

知名开发者社区Stack Overflow发布《2023 年开发者调查报告》

Stack Overflow成立于2008年&#xff0c;最知名的是它的公共问答平台&#xff0c;每月有超过 1 亿人访问该平台来提问、学习和分享技术知识。是世界上最受欢迎的开发者社区之一。每年都会发布一份关于开发者的调查报告&#xff0c;来了解不断变化的开发人员现状、正在兴起或衰落…

[机缘参悟-122] :IT人如何认识自己的?自省、面试、考核、咨询?

目录 一、为什么要认识自己 二、认识自己的哪些方面&#xff1f; 三、如何认识自己 3.1 通过自省认识自己 3.2 通过面试认识自己 3.3 通过咨询认识自己 3.4 通过相亲认识自己 3.5 通过一段感情关系认识自己 一、为什么要认识自己 认识自己在人类的成长和心灵发展过程中…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…

Linux网络配置与抓包工具介绍

目录 一、配置命令 1. ifconfig 1.1 概述信息解析 1.2 常用格式 2. ip 2.1 ip link 数据链路层 2.2 ip addr 网络层 2.3 路由 3. hostname 3.1 临时修改主机名 3.2 永久修改主机名 4. route 5. netstat 6. ss 7. ping 8. traceroute 9. nslookup 10. 永久修…

vivado图形化设计篇

一.看懂波形 二.由波形可得真值表 三.可得逻辑表达式 YA(BC) 四. 逻辑框图 五.vivado图形化设计 &#xff08;1&#xff09;创建文件 1.create block desige 2.文件命名&#xff0c;设置文件放置地址 &#xff08;2&#xff09; 添加IP核 1.打开desige&#xff0c;右键&#…

UniRepLKNet实战:使用UniRepLKNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集一些问题 摘要 大核卷积神经网络&#xff08;ConvNets&#xff09;近年来受到广泛关注&#xff0c;但仍存在两个关键问题需要进一步研究。首先&#xff0c;目前的大型卷积神经网络架构大…

如何在企业中实施自适应人工智能?

人工智能不再是企业的选择。很快&#xff0c;它也将不再是一个区分因素。商业中的适应性人工智能正在改变格局。根据最近的统计数据&#xff0c;95%的企业以上都在追求人工智能。 因此&#xff0c;为了确保你拥有竞争优势&#xff0c;你必须期待先进的人工智能选项。适应性就是…

CH341 SPI方式烧录BK7231U

CH341是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 BK7231U Wi-Fi SOC芯片&#xff0c;内嵌处理器。1. 符合802.11b/g/n 1x1协议 2. 17dBm 输出功率3. 支持20/40 MHz带宽和STBC 4. 支持Wi-Fi STA、AP、…

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-LSTM蛇群算法优化…