1. 表:人事档案 Hrgeneral
CREATE TABLE [dbo].[Hrgeneral]( [hrcode] [varchar](50) NOT NULL, --员工工号 [hrname] [varchar](16) NULL, --员工姓名 [oldName] [varchar](50) NULL, --曾用名 [CardNo] [varchar](50) NULL, --考虑对应的IC卡号码 [ID] [varchar](22) NULL, --身份证号码 [birthday] [datetime] NULL, --出生日期 [Age] AS (round(datediff(month,[birthday],getdate()),0) / 12), --根据出生日期取年龄 [gender] [varchar](8) NULL, --性别 1为男 2为女 [folk] [varchar](16) NULL, --民族ID 引用表 [folkname] [varchar](50) NULL, --民族名称 引用表 [nativeplace] [varchar](40) NULL, --籍贯ID 引用表 [nativeplacename] [varchar](50) NULL, --籍贯ID 引用表 [politicalview] [varchar](8) NULL, --政治面貌,引用表 [politicalviewname] [varchar](50) NULL, --政治面貌,引用表 [marriage] [varchar](8) NULL, --婚姻情况 引用表 [health] [varchar](500) NULL, --身体情况 引用表 [bodylength] [money] NULL, --身高 [bodyweight] [money] NULL, --体重 [mobile] [varchar](20) NULL, --手机号码 [email] [varchar](100) NULL, --电子邮箱 [homeaddress] [varchar](100) NULL, --家庭地址 [homephone] [varchar](20) NULL, --家庭电话 [curaddress] [varchar](100) NULL, --暂住地址 [telephone] [varchar](20) NULL, [tekTitle] [varchar](16) NULL, [tekTitlename] [varchar](50) NULL, [education] [varchar](20) NULL, --学历 [educationcode] [varchar](50) NULL, [school] [varchar](255) NULL, [special] [varchar](50) NULL, [secondspecial] [varchar](50) NULL, [computer] [varchar](16) NULL, [languagetype] [varchar](16) NULL, [languagelevel] [varchar](16) NULL, [otherspecial] [varchar](50) NULL, [companyid] [dbo].[orgcode] NULL, --公司代码 引用表 [companyname] [varchar](50) NULL, --公司名称 引用表 [cccode] [dbo].[orgcode] NULL, --部门ID 引用表 [ccname] [varchar](50) NULL, --部门名称 引用表 [positionid] [varchar](20) NULL, --岗位定级 引用表 [positionname] [varchar](50) NULL, --岗位定级 引用表 [jobtime] [datetime] NULL, --入职时间 [TrialTime] [int] NULL, [workyears] [int] NULL, [joinfundtime] [datetime] NULL, [jobstate] AS (case when (isnull([Leavedate],convert(datetime,'1900-01-01',120)) < '1902-01-01') then '在职' else '离职' end), --工作状态 [jobtype] [varchar](20) NULL, [leavedate] [datetime] NULL, [leavetype] [varchar](20) NULL, [LeaveName] [varchar](50) NULL, [MedicareCode] [varchar](50) NULL, [MedicareLevel] [int] NULL, [positionlevel] [varchar](20) NULL, [positionlevelname] [varchar](50) NULL, [positionsubsidy] [money] NULL, [employeeType] [varchar](50) NULL, [EmployeetypeName] [varchar](50) NULL, [hrtypecode] [varchar](50) NULL, --薪资类型 引用表 [hrtypename] [varchar](50) NULL, --薪资类型 引用表 [PhotoDir] [varchar](30) NULL, [enterdate] [datetime] NULL, --修改时间 [isvoucher] [varchar](20) NULL, [memo] [varchar](200) NULL, [cv1] [varchar](50) NULL, [cv1name] [varchar](50) NULL, [cv2] [varchar](50) NULL, [cv2name] [varchar](50) NULL, [cv3] [varchar](50) NULL, [cv3name] [varchar](50) NULL, [CompMark] [varchar](50) NULL, [CompMarkName] [varchar](200) NULL, [AgentMan] [varchar](50) NULL, [ActiveAgent] [int] NULL, [Notesid] [varchar](50) NULL, [birthmonth] AS (substring(convert(varchar(10),[birthday],121),6,2)), [AuditusrYN] [int] NULL, [deduction] [varchar](50) NULL, [deductionName] [varchar](50) NULL, [entercode] [varchar](50) NULL, [TrainDebitDate] [datetime] NULL, [ReplFlgDelYN] [int] NULL, [shorthrcode] [varchar](50) NULL, [password] [varchar](15) NULL, [password2] [varchar](50) NULL, [crewcode] [varchar](30) NULL, [crewname] [varchar](30) NULL) --设置主键 ALTER TABLE Hrgeneral ADD CONSTRAINT PK_Hrgeneral primary key(hrcode) --设置约束 ALTER TABLE [dbo].[Hrgeneral] ADD CONSTRAINT [DF_hrgeneral_bodylength] DEFAULT (0) FOR [bodylength] ALTER TABLE [dbo].[Hrgeneral] ADD CONSTRAINT [DF_hrgeneral_bodyweight] DEFAULT (0) FOR [bodyweight] ALTER TABLE [dbo].[Hrgeneral] ADD CONSTRAINT [DF_hrgeneral_positionsubsidy] DEFAULT (0) FOR [positionsubsidy] --创建非聚集索引 CREATE NONCLUSTERED INDEX [IX_Hrgeneral] ON [dbo].[Hrgeneral] ( [CardNo] ASC, [hrcode] ASC )
2. 功能:新员工入职
2.1 表:入职表
CREATE TABLE [dbo].[hrOfferCome_h]( [DocCode] [varchar](20) NOT NULL, --单号 自动生成 [FormID] [int] NULL, --表类型ID 引用 [DocDate] [datetime] NULL, --单据日期 [DocType] [varchar](20) NULL, --单据类型 引用formid [refcode] [varchar](50) NULL, --关联单据 [DocStatus] [int] NULL, --单据状态 0-未保存 50-保存 100-确定 [periodid] [varchar](20) NULL, -- [EnterName] [varchar](100) NULL, [EnterDate] [datetime] NULL, [ModifyName] [varchar](100) NULL, [ModifyDate] [datetime] NULL, [PostName] [varchar](100) NULL, [PostDate] [datetime] NULL, [hrcode] [varchar](50) NULL, --工号 自动生成 [hrname] [varchar](16) NULL, --姓名 [oldName] [varchar](16) NULL, [birthday] [datetime] NULL, [CardNo] [varchar](50) NULL, [ID] [varchar](22) NULL, [gender] [varchar](8) NULL, [folk] [varchar](16) NULL, [folkname] [varchar](50) NULL, [nativeplace] [varchar](40) NULL, [nativeplacename] [varchar](50) NULL, [politicalview] [varchar](8) NULL, [politicalviewname] [varchar](50) NULL, [marriage] [varchar](8) NULL, [health] [varchar](500) NULL, [jobtime] [datetime] NULL, [TrialTime] [int] NULL, [bodylength] [money] NULL, [bodyweight] [money] NULL, [mobile] [varchar](20) NULL, [homeaddress] [varchar](100) NULL, [homephone] [varchar](20) NULL, [tekTitle] [varchar](16) NULL, [tekTitlename] [varchar](50) NULL, [education] [varchar](20) NULL, [educationcode] [varchar](50) NULL, [school] [varchar](255) NULL, [special] [varchar](50) NULL, [companyid] [dbo].[orgcode] NULL, [companyname] [varchar](50) NULL, [origcompanyid] [dbo].[orgcode] NULL, [cccode] [dbo].[orgcode] NULL, [ccname] [varchar](50) NULL, [positionid] [varchar](20) NULL, [positionname] [varchar](50) NULL, [positionlevel] [varchar](20) NULL, [positionlevelname] [varchar](50) NULL, [positionsubsidy] [money] NULL, [employeeType] [varchar](50) NULL, [EmployeetypeName] [varchar](50) NULL, [hrtypecode] [varchar](50) NULL, [hrtypename] [varchar](50) NULL, [isvoucher] [varchar](20) NULL, [memo] [varchar](200) NULL, [cv1] [varchar](50) NULL, [cv1name] [varchar](50) NULL, [curaddress] [varchar](100) NULL, [blClosed] [int] NULL, [BankNo] [varchar](20) NULL, [BankName] [varchar](60) NULL, [BankAcct] [varchar](30) NULL, [entercode] [varchar](50) NULL, [PhotoDir] [varchar](30) NULL, [ClearDoccode] [varchar](50) NULL, [shorthrcode] [varchar](50) NULL) --主键 ALTER TABLE hrOfferCome_h ADD CONSTRAINT PK_hrOfferCome_h PRIMARY KEY(DOCCODE) --约束 ALTER TABLE [dbo].[hrOfferCome_h] ADD CONSTRAINT [DF__hrinput_h__bodyl__54DA7ABA] DEFAULT (0) FOR [bodylength] ALTER TABLE [dbo].[hrOfferCome_h] ADD CONSTRAINT [DF__hrinput_h__bodyw__55CE9EF3] DEFAULT (0) FOR [bodyweight] ALTER TABLE [dbo].[hrOfferCome_h] ADD CONSTRAINT [DF__hrinput_h__posit__56C2C32C] DEFAULT (0) FOR [positionsubsidy]
可以添加一个明细表,用来记录员工的工作经历
2.2 存储过程:p_hrCreateHrcod --产生新工号,并更新到表头
CREATE PROCEDURE [dbo].[p_hrCreateHrcode] ( @doccode VARCHAR(20) ) AS BEGIN DECLARE @newHrcode VARCHAR(10) , @companyid VARCHAR(10), @hrcode Varchar(10) SELECT @companyid = companyid,@hrcode=hrcode FROM hrOfferCome_h WHERE doccode = @doccode /* SELECT @newHrcode = MAX(hrcode) + 1 FROM hrgeneral a JOIN Ms_HrCodeByCompany b ON a.companyid = b.companyid WHERE a.hrcode BETWEEN b.hrbeginno AND b.hrendno AND a.companyid = @companyid */ --已有工号(取消确认的情况)不再产生 IF EXISTS ( SELECT 1 FROM dbo.hrOfferCome_h WHERE ISNULL(hrcode, '') <> '' AND ISNULL(companyid,'')=ISNULL(origcompanyid,'') AND DocCode = @doccode ) and not Exists(select hrcode from hrgeneral where hrcode=@hrcode) RETURN --生成新工号 SELECT @newHrcode = newhrid FROM f_hrNextHrcode(@companyid) IF EXISTS ( SELECT * FROM Ms_HrCodeByCompany WHERE companyid = @companyid AND HrEndNo < @newHrcode ) BEGIN RAISERROR('产生的工号已经超出范围,请联系管理员',16,1) --检查(Ms_HrCodeByCompany) RETURN END ELSE BEGIN UPDATE hrOfferCome_h SET Hrcode = @newHrcode ,shorthrcode=substring(@newHrcode,1,1)+substring(@newHrcode,3,4) WHERE doccode = @doccode UPDATE Ms_HrCodeByCompany SET cuHrcode = @newHrcode WHERE companyid = @companyid END END
2.3 插入到hrgeneral(根据录入的单据,将数据插入到人事主表hrgeneral之中)
2.4 根据实际情况,根据录入表单数据,更新数据到:员工生命周期表(日志表),工作经历表,银行账号表,工号跟考勤卡号对应起来。考勤卡号的生成可以参考工号的生成。
3. 功能:员工资料修正
可以另外设置一个表,录入数据之后修改人事主表,或者引用之前表的数据。银行账号表之类的,如果数据修改,也需同步更新。
4. 功能:人员岗位调动
4.1:表:hrdochd
CREATE TABLE [dbo].[hrDocHD]( [Doccode] [varchar](50) NOT NULL primary key , [Formid] [int] NULL, [Docdate] [datetime] NULL, [Periodid] [varchar](50) NULL, [ChargesPeriodid] [varchar](50) NULL, [Doctype] [varchar](50) NULL, [Companyid] [varchar](50) NULL, [CompanyName] [varchar](50) NULL, [ccCode] [varchar](50) NULL, [ccName] [varchar](50) NULL, [hrCode] [varchar](50) NULL, [hrName] [varchar](50) NULL, [effbeginday] [datetime] NULL, [effEndday] [datetime] NULL, [Amnt] [money] NULL, [organizor] [varchar](50) NULL, [organizorname] [varchar](50) NULL, [Applyer] [varchar](50) NULL, [ApplyName] [varchar](50) NULL, [applydate] [datetime] NULL, [blclosed] [int] NULL, [blscrap] [int] NULL, [ClearDocCode] [varchar](50) NULL, [Refcode] [varchar](50) NULL, [refformid] [int] NULL, [docstatus] [int] NULL, [Matcode] [varchar](50) NULL, [MatName] [varchar](50) NULL, [Linkdoccode] [varchar](50) NULL, [Linkformid] [varchar](50) NULL, [EnterName] [varchar](50) NULL, [EnterDate] [datetime] NULL, [ModifyName] [varchar](50) NULL, [Modifydate] [datetime] NULL, [PostName] [varchar](50) NULL, [Postdate] [datetime] NULL, [remarks1] [varchar](200) NULL, [remarks2] [varchar](50) NULL, [remarks3] [varchar](50) NULL, [ReplFlgDelYN] [int] NULL)
4.2 插入员工生命周期(日志表),更新人事主表。
5. 转正登记
人事主表中,有一个参数,是否是正式员工。确认转正表之后,修改人事主表员工状态,转正日期等。插入到日志表。
6. 培训记录
插入到日志表中即可
7. 离职办理
7.1 主表: hrdochd
7.2 明细表: HrDocdetail
CREATE TABLE [dbo].[HrDocdetail]( [Doccode] [varchar](50) NOT NULL, [docitem] [int] NULL, [Rowid] [varchar](10) NOT NULL primary key , [Hrcode] [varchar](50) NULL, [HrName] [varchar](50) NULL, [effBeginday] [datetime] NULL, [effEndday] [datetime] NULL, [Content] [varchar](500) NULL, [Amt] [money] NULL, [ApplyDate] [datetime] NULL, [Confirmdate] [datetime] NULL, [HandleDate] [datetime] NULL, [OrigPosition] [varchar](50) NULL, [OrigPositionname] [varchar](50) NULL, [OrigCccode] [varchar](50) NULL, [OrigCcname] [varchar](50) NULL, [NewPosition] [varchar](50) NULL, [NewPositionname] [varchar](50) NULL, [NewCccode] [varchar](50) NULL, [NewCcname] [varchar](50) NULL, [Matcode] [varchar](50) NULL, [MatName] [varchar](50) NULL, [Memo] [varchar](200) NULL, [refdoccode] [varchar](50) NULL, [refformid] [varchar](50) NULL, [refrowid] [varchar](50) NULL, [Linkdoccode] [varchar](50) NULL, [Linkformid] [varchar](50) NULL)
7.3 更新人事主表信息:离职日期,最新录入日期等;插入日志表
7.4 存储过程:p_hrhrDocCreation--更新辞职记录
CREATE procedure p_hrhrDocCreation @doccode varchar(20), @fag int -- 1,培训记录 2,辞职记录 3,岗位 4,奖励,5,领用 as set nocount on if @fag not in (1,2,3,4,5) begin raiserror('参数出错!',16,1); return end if @fag=1 begin if exists( select 1 from Hrpsm_train where doccode =@doccode) begin raiserror('培训记录已存在!',16,1); return end insert into Hrpsm_train ( Doccode,Rowid, hrcode ,hrname ,amt , organizor ,matcode,matname, start_date ,end_date ,RegDate , remark ,EnterName ,EnterDate , Formid ) select Doccode ,Rowid ,Hrcode ,HrName ,Amt , Organizor ,matcode,matname, effBeginday ,effEndday , EnterDate, Memo,EnterName ,EnterDate , Formid from vHrDocDetail where doccode=@doccode end if @fag=2 begin select * from Hrpsm_leave where formid='27203' if exists( select 1 from Hrpsm_leave where doccode =@doccode) begin raiserror('辞职记录已存在!',16,1); return end --sp_help vhrDocDetail insert into Hrpsm_leave ( Doccode,hrcode ,hrname ,cccode,ccname, regdate ,applydate ,leavedate, remark ,EnterName ,EnterDate , Formid ) select Doccode ,Hrcode ,HrName ,cccode,ccname, ApplyDate ,EnterDate , effbeginday, remarks1,EnterName ,EnterDate , Formid from hrDocHD where doccode=@doccode end if @fag=3 begin /* 2720302微更新员工生命周期管理 已插入Hrpsm_relocation modi by liangweijian if exists( select 1 from Hrpsm_relocation where doccode =@doccode) begin raiserror('岗位记录已存在!',16,1); return end insert into Hrpsm_relocation ( hrcode ,hrname ,rowid , RegDate , orgposition ,orgpositionname ,orgdepartment ,orgdepartmentname , NewPosition ,NewPositionname ,Newdepartment ,Newdepartmentname , remark , EnterDate ,EnterName , Doccode , Formid ) select Hrcode ,HrName ,Rowid , ApplyDate, OrigPosition ,OrigPositionname ,cccode ,ccname , ---OrigCccode ,OrigCcname , NewPosition ,NewPositionname ,NewCccode ,NewCcname , Memo , EnterDate ,EnterName , Doccode , Formid from vHrDocDetail where doccode=@doccode */ IF @@ROWCOUNT > 0 begin --更新当前员工资料表 declare @Hrcode varchar(20), @NewPosition varchar(20), @NewPositionname varchar(200), @NewCccode varchar(20), @NewCcname varchar(200) declare mycur CURSOR FOR select Hrcode , NewPosition ,NewPositionname ,NewCccode ,NewCcname from vHrDocDetail where doccode=@doccode open mycur fetch next from mycur into @Hrcode, @NewPosition,@NewPositionname,@NewCccode,@NewCcname while @@FETCH_STATUS = 0 begin update hrgeneral set positionid=@NewPosition,positionname=@NewPositionname, cccode=@NewCccode,ccname=@NewCcname where hrcode=@hrcode fetch next from mycur into @Hrcode, @NewPosition,@NewPositionname,@NewCccode,@NewCcname end close mycur deallocate mycur end--更新人事资料 end if @fag=4 begin if exists( select 1 from hrpsm_rewardspunish where doccode =@doccode) begin raiserror('奖惩记录已存在!',16,1); return end insert into hrpsm_rewardspunish ( hrcode ,hrname ,rowid , RegDate , matcode,matname, remark , EnterDate ,EnterName , Doccode , Formid ) select Hrcode ,HrName ,Rowid , ApplyDate, matcode,matname, Memo , EnterDate ,EnterName , Doccode , Formid from vHrDocDetail where doccode=@doccode end if @fag=5 begin if exists( select 1 from Hrpsm_takegoods where doccode =@doccode) begin raiserror('领用记录已存在!',16,1); return end insert into Hrpsm_takegoods ( hrcode ,hrname ,rowid , RegDate , matcode,matname, remark , EnterDate ,EnterName , Doccode , Formid ) select Hrcode ,HrName ,Rowid , ApplyDate, matcode,matname, Memo , EnterDate ,EnterName , Doccode , Formid from vhrDocDetail where doccode=@doccode end