OA电子表单设计-年假申请单-数据验证

OA从年初上线到现在已经过去半年了,时光飞逝。
上月底,行政文员找到我,说最近有新来的部门文员填《年假申请单》时,有乱填的情况,让我想办法处理。
我一查还真是,这文员是个男的,同一天给同一个人居然填了7张单据。被主管×回了4张,还√了3张。
于是,我给行政文员出主意,要不流程第一关设置成你审批,单据填写正常,才到各自主管审批,否则你就×回去重填,行政文员当时同意了,反正纸质也是她审批。
第二天,情况发生了变化,行政经理不同意第一关由文员审批这样的做法,啥原因也没说,好吧,听官大的,只能从程序的角度想办法去避免这样的错误发生了。
于是,有了下面的SQL代码:
declare @date char(8), -- 入职日期
@today char(8),-- 服务器当天日期
@year_yn int, -- 初始年限(不判断是否满年)
@year int, -- 实际年假年限
@start_date char(8), -- 年假起始日期
@end_date char(8), -- 年假终止日期
@day int -- 年假天数
set @date='20111212'
set @today = convert(char(8),getdate(),112)
set @year_yn = convert(int,left (@today,4)) - convert(int,left(@date,4))
set @year = (select case when right (@today,4) >= right(@date,4) then @year_yn else @year_yn-1 end)
set @start_date = convert(char(4),(convert(int, left(@date,4)) + @year -1)) + right(@date,4)
set @end_date = convert(char(4),(convert(int, left(@date,4)) + @year)) + right(@date,4)
--年假说明,5年以下5天,5-9年 7天,10年以上10天
set @day = (select case when @year<=4 then 5 when @year >4 and @year <10 then 7 when @year >=10 then 10 end )
print @date
print @year
print @start_date
print @end_date
print @day
--result
20111212 → 入职日期
2 → 初始年限
20121212 → 年假起始日期
20131212 → 年假结束日期
5 → 年假天数
由于OA开窗取数据MIMJ程序不支持以上的T-SQL语句,于是第一反应是写个SQL表值函数,于是有了下面的函数代码:
CREATE function InTime (@workTime Varchar(20),@serverToday char(8))
returns @temptable table(date1 char(8),date2 char(8),dayCount int)
as
begin
declare @date Varchar(20), -- 入职日期
@today char(8),-- 服务器当天日期
@year_yn int, -- 初始年限(不判断是否满年)
@year int, -- 实际年假年限
@start_date char(8), -- 年假起始日期
@end_date char(8), -- 年假终止日期
@day int -- 年假天数
set @date=@workTime
set @today = @serverToday
set @year_yn = convert(int,left (@today,4)) - convert(int,left(@date,4))
set @year = (select case when right (@today,4) >= right(@date,4) then @year_yn else @year_yn-1 end)
set @start_date = convert(char(4),(convert(int, left(@date,4)) + @year)) + right(@date,4)
set @end_date = convert(char(4),(convert(int, left(@date,4)) + @year -1)) + right(@date,4)
--年假说明,5年以下5天,5-9年 7天,10年以上10天
set @day = (select case when @year<=4 then 5 when @year >4 and @year <10 then 7 when @year >=10 then 10 end )
insert into @temptable select @start_date,@end_date,@day
return
end
注:为什么函数要加2个参数,一个【入职日期】参数不就可以了么,因为SQL表值函数不支持动态数据。
觉得这个函数有2个参数还是不好使,算了,还是换存储过程吧,于是有了下面的存储过程代码:
create proc worktime
@workTime Varchar(20)
as
declare @date Varchar(20), -- 入职日期
@today char(8),-- 服务器当天日期
@year_yn int, -- 初始年限(不判断是否满年)
@year int, -- 实际年假年限
@start_date char(8), -- 年假起始日期
@end_date char(8), -- 年假终止日期
@day int -- 年假天数
set @date=@workTime
set @today = convert(char(8),getdate(),112)
set @year_yn = convert(int,left (@today,4)) - convert(int,left(@date,4))
set @year = (select case when right (@today,4) >= right(@date,4) then @year_yn else @year_yn-1 end)
set @start_date = convert(char(4),(convert(int, left(@date,4)) + @year)) + right(@date,4)
set @end_date = convert(char(4),(convert(int, left(@date,4)) + @year -1)) + right(@date,4)
--年假说明,5年以下5天,5-9年 7天,10年以上10天
set @day = (select case when @year<=4 then 5 when @year >4 and @year <10 then 7 when @year >=10 then 10 end )
select @start_date 起始日期,@end_date 终止日期,@day 年假天数
想了想存储过程也不好使,如果领导要看所有人的年假明细表,那么岂不是又要折腾,于是,有了下面视图代码:
create view userworktime
as
select 工号 a,姓名 b,入职日 c,起始日 d,结束日 e,case when 实际年限>0 then 年假天数 else 0 end f,
isnull(天数汇总,0) g,case when 实际年限>0 then 年假天数 else 0 end -isnull(天数汇总,0) h
from
(
select * ,convert(char(4),(convert(int, left(入职日,4)) + 实际年限 -1)) + right(入职日,4) 起始日,
convert(char(4),(convert(int, left(入职日,4)) + 实际年限)) + right(入职日,4) 结束日,
case when 实际年限<=4 then 5 when 实际年限 >4 and 实际年限 <10 then 7 when 实际年限 >=10 then 10 end 年假天数
from
(
select *,case when right (系统日,4) >= right(入职日,4) then 初始年限 else 初始年限-1 end 实际年限
from
(
select *,convert(int,left (系统日,4)) - convert(int,left(入职日,4)) 初始年限
from
(
select EmpNO 工号,EmpName 姓名,convert(char(8),WorkTime,112) 入职日,convert(char(8),getdate(),112) 系统日
from DoorSV.IMSDB.dbo.Employee
WHERE WorkTime <>''
) aaa
) bbb
) ccc
) ddd
left join (
select 编号,年假起始日期,年假终止日期,sum(本次天数) 天数汇总
from
(
select newopenquery1 编号,newopenquery1C 姓名,datetime1 入职日期,text4 年假天数,text1 已请天数,datetime5 请假起,datetime6 请假止,text6 本次天数,datetime2 年假起始日期,
datetime3 年假终止日期,CASE WHEN resda021='1' THEN '未完成' WHEN resda021='2' THEN '同意' WHEN resda021='3' THEN '不同意' WHEN resda021='4' THEN '已抽单' END 签核结果
from hr07
join resda on resda002=hr07002 and resda001='HR07'
where resda021='2' and text6<>0
) xxx
group by 编号,年假起始日期,年假终止日期
) yyy on 编号=工号 COLLATE Chinese_PRC_CI_AS and 起始日 = 年假起始日期 COLLATE Chinese_PRC_CI_AS and 结束日 = 年假终止日期 COLLATE Chinese_PRC_CI_AS
最终结果:

SQL代码确认好之后,修改MIMJ开窗和HR07_MIMJ.aspx 取值关联,再加入JavaScript验证代码,大功告成。


总结:设计电子表单原则——数据管控(只读,数值范围)和历史数据交互是非常重要的,应遵循ERP流程和程序设计思路,“严谨、规范、科学、效率”。
OA电子表单设计-年假申请单-数据验证的更多相关文章
- [oldboy-django][2深入django]form表单clean_xx, clean完成数据验证+ form错误信息
form后台生成form里面的Input标签,以及设置Input的属性 # 需求 后台生成form里面的input标签,并设置input标签的属性, class RegisterForm(Form): ...
- MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...
- SpreadJS V13.0发布,聚焦表单设计与数据交互,让您的工作效率突飞猛进!
纯前端表格控件SpreadJS,是一款成功应用于华为.招商银行.天弘基金.苏宁易购等国内外知名企业的前端开发工具,其带来的价值不仅体现在帮助开发人员在其Web应用程序中快速构建 Web Excel . ...
- 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...
- Python菜鸟之路:Django 数据验证之钩子和Form表单验证
一.钩子功能提供的数据验证 对于数据验证,django会执行 full_clean()方法进行验证.full_clean验证会经历几个步骤,首先,对于model的每个字段进行正则验证,正则验证通过后, ...
- .NET开源工作流RoadFlow-表单设计-新建表单(属性设置)
点击表单设计工具栏上的 新建表单 按钮会弹出新表单属性设置框: 表单名称:新表单表名称. 数据连接:表单对应的数据库连接(此连接在 系统管理-->数据库连接 中维护). 数据表:表单对应的数据库 ...
- spring(7)--注解式控制器的数据验证、类型转换及格式化
7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...
- MVC数据验证使用小结
原文:MVC数据验证使用小结 描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近 ...
- UX设计秘诀之注册表单设计,细节决定成败
以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 说实话,现实生活中,又有多少人会真正喜欢填写表格?显然,并不多.因为填写表单这样的网页或App服务,并非 ...
随机推荐
- 自己写的第一个Schema文件
<Schema name="FinSchema" description="财务模式" measuresCaption="财务模式"& ...
- pymysql 各种坑总结
pymysql各种坑只针对自己的项目1.关于关闭连接,报错为:pymysql.err.InterfaceError: (0, '') 这个错误原因:对已经关闭的链接再次进行操作,参考MySQL.err ...
- PIE SDK与OpenCV结合说明文档
1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 ...
- 3-----Docker实例-安装MySQL
Docker 安装 MySQL 方法一.docker pull mysql 查找Docker Hub上的mysql镜像 runoob@runoob:/mysql$ docker search mysq ...
- 整理的最全 python常见面试题
整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...
- cordova 更改app的图标
写在前面:cordova 使一个前端开发者成为一个“假”的android开发人员,不得不说提供给我们巨大的方便~,cordova打包生成的apk的默认样式和启动的名字真的是需要我们字更改的:本文将记录 ...
- 文献综述十五:基于b/s中小型超市进销存管理系统的研究与设计
一.基本信息 标题:基于b/s中小型超市进销存管理系统的研究与设计 时间:2015 出版源:湘西财经大学 文件分类:对超市管理系统的研究 二.研究背景 在竞争日益激烈的行业中,尽可能降低运营成本,逐步 ...
- link 标签中“rel=stylesheet”的作用
最近在复习我的培训项目学子商城项目的时候在引入外部css的时候忘记加上了rel=stylesheet(因为以前看别人给的模板有所以就加了上去,所以并没有太大印象) 那rel=stylesheet到底起 ...
- 性能测试工具Jmeter12-Jmeter连接配置带跳板机(SSH)的mysql服务器
准备工作: 1.下载mysql-connector-java-5.1.13-bin.jar包,然后放在jmeter安装目录lib下 2.重新打开jmeter即可 要完成以上两步才能进行后续操作 要点: ...
- electron --- 构建桌面应用
最近无意间看到了electron和nw的相关信息,感到很惊讶,因为学习前端也有一段时间了,竟然发现js还有这么强大的功能,因为js不仅可以写网页.写webapp.写hybrid,以及前不久出现的小程序 ...