2.3.12 月度考勤表计算设计

2.3.12 月度考勤表计算设计

根据订餐汇总表的加工逻辑设计,使用功能构件表达式可以映射地如下表示,并做详细注解:

(1)清除原有内容

删除命令:|Z

本表的行:{:,:}

删除原有的全部内容:{?,:}

公式:{?,:}=|Z{?,:};(或{?,:}=|Z{:,:};)

(2)获取原始考勤大数据

誊抄拼接记录(整表取)命令:|U

当月考勤大数据信息:QBKQ00[?,:]

预清空:|U…!OZ;

对应关系是:

月度考勤表:员工编码,日期

考勤大数据:员工编码,考勤时间

获取当月信息:指定月份为当年当月,表达式为VAL(LEFT(QBKQ00[?,12],2))=_NMM.AND.VAL(SUBSTR(QBKQ00[?,12],7,4))=_NYY

公式:{?,:}=|UQBKQ00[?,:]!FVAL(LEFT(QBKQ00[?,12],2))=_NMM.AND.VAL(SUBSTR(QBKQ00[?,12],7,4))=_NYY!OZ;

条件中的对应关系是:

{?,3},{?,4}=

[?,2],[?,12]

(3)按员工和考勤时间排序(并排除重复)

排序(一般取键值从小到大):|P...!OS;

排序关键栏目:(本表)员工+考勤时间,即{?,3}+DTOC(CTOD({?,4}))

公式:{?,:}=|P{?,3}+DTOC(CTOD({?,4}))!OS;

(4)获取下班时间(同一天内最晚)

排序(倒排时取键值从大到小):|P...!OFS;

排序关键栏目:(本表)员工+考勤时间,即{?,3}+LEFT({?,4},10),一般理解,一天中考勤两次的,前一次为上班,后一次为下班,倒排序后,下班的时间便排在了最前面。此时倘排除重复,只取第一个,相当于获得了下班时间

下班时间需要在草稿上暂存,草稿可为与本表同格式的上月表:KQB101[?,:]

公式:KQB101[?,:]=|P{?,3}+LEFT({?,4},10)!OFS;

注释:*,表示为暂存草稿表

(5)获取上班时间(同一天内最早)

排序(一般取键值从小到大):|P...!OS;

排序关键栏目:(本表)员工+考勤时间,即{?,3}+LEFT({?,4},10),一般理解,一天中考勤两次的,前一次为上班,后一次为下班,上班的时间排在最前面,通过排除重复,只取第一个,相当于获得了上班时间

公式:{?,:}=|P{?,3}+LEFT({?,4},10)!OS;

(6)整理上班时间

赋值:将第四栏{?,4}日期上取得的上班时间,赋值到第五栏“上班时间” 栏目{?,5}

公式:{?,5}={?,4}

(7)整理下班时间

跨表对应取数:|B

本表下班时间:{?,6}

草稿表上的下班时间:KQB101[?,4]

对应条件:员工编码相同,日期相同,即{?,3}+LEFT({?,4},10)=KQB101[?,3]+LEFT(KQB101[?,4],10)

公式:{?,6}=|BKQB101[?,4]!F{?,3}+LEFT({?,4},10)=KQB101[?,3]+LEFT(KQB101[?,4],10);

(8)整理下班时间为空白(漏勤)

本表下班时间:{?,6}

判定条件:上下班时间相同的,应为没有考勤,下班时间定义为空白,为区别于缺勤,此种情况定义为漏勤

公式:{?,6}=''

公式条件:{?,5}={?,6}

(9)获取部门姓名

跨表对应取数:|B

员工信息:YGKP00[?,:]

对应条件:员工编码相同,即本表员工编码=人员信息及充值卡片上的员工编码,也即{?,3}=YGKP00[?,7],或者YGKP00[?,7]={?,3}

姓名与部门对应关系:本表姓名、部门=人员信息及充值卡片上的姓名、部门,也即{?,2},{?,1}=[?,6],[?,10]

公式:{?,2}({?,2},{?,1}=[?,6],[?,10])=|BYGKP00[?,6]!FYGKP00[?,7]={?,3};

(10)考勤情况

出勤情况:上班时间晚于8:30,为迟到,缺下班考勤(只有一次考勤),为漏勤,下班时间早于16:15,为早退,其余为正常出勤

公式:{?,7}=IIF(DTOC(CTOD({?,5}))>LEFT(DTOC(CTOD({?,4})),10)+'08'+CHR(58)+'30'+CHR(58)+'00','迟到','')++''+IIF({?,6}='','漏勤',IIF(DTOC(CTOD({?,6}))<LEFT(DTOC(CTOD({?,4})),10)+'16'+CHR(58)+'15'+CHR(58)+'00','早退',''))

(11)整理日期为中文习惯表达

中文表达:指某年某月某日格式

公式:{?,4}=RIGHT(LEFT({?,4},10),4)+'年'+LEFT({?,4},2)+'月'+SUBSTR({?,4},4,2)+'日'

(12)按部门员工排序

排序(一般取键值从小到大):|P;

排序关键栏目:(本表)部门+员工,即{?,1}+{?,2}

公式:{?,:}=|P{?,1}+{?,2};

将上述公式整理,便形成表2-12的加工逻辑数据字典。在录入修改界面中单击“计算”按钮,可打开计算公式的编辑设计菜单进行设计,如图2-54所示。

严格来讲,上述计算公式还存在一个重大缺陷,因为所有的考勤分析均来自考勤消费打卡机的上下班考勤,一旦某位员工当天没有来考勤,意味着考勤大数据中缺乏该员工的记录信息,因此,就不会有他的“缺勤”信息,这是不符合人事管理规定的。因此还需要在之前12步计算公式的基础上,继续依据人员信息及充值卡片上的全员信息做进一步的分析与计算。

表2-12 加工逻辑字典:DCXX_JSS,订餐汇总表,日报

续表

图2-54 月度考勤表计算公式的编辑界面

(13)获取本月的上班日清单(草稿)

排序(一般取键值从小到大):|P...!OS;

排序关键栏目:(本表)日期,即{?,4}

上班日:由之前12步形成的上班日记录,排除重复

草稿:KQB101[?,:],备注带*

公式:KQB101[?,:]=|P{?,4}!OS;

(14)预备按上班日获取全员名单(草稿)

誊抄拼接记录(整表取)命令:|U…!OZ;

当月考勤日期信息:{?,4}

人员信息及充值卡片对应日期暂存:YGKP10[?,9],草稿,备注带*

对应关系是:

人员信息及充值卡片:日期(暂存)

本表考勤大数据:日期

公式:YGKP10[?,:]=|UKQB101[?,:]!OZ;

条件中的对应关系是:

[?,9]=

{?,4}

(15)根据上班日获取全员名单(草稿)

誊抄拼接记录(整表取)命令:|U…!OZ;

按考勤日期获取全员信息:!OK(9),即以上一步的第9栏日期为依据,每一个日期匹配全员名单,形成一个日期总数*员工总数的新列表

对应关系是:

人员卡片草稿:员工编码,部门,姓名,日期(作为关键栏目保留,倍增全员信息)

人员卡片:员工编码,部门,姓名,日期

公式:YGKP10[?,:]=|UYGKP00[?,:]!OK(9)Z;

条件中的对应关系是:

[?,7],[?,10],[?,6],[?,9]=

[?,7],[?,10],[?,6],[?,9]

备注:草稿,带*

(16)整理全员全月的完整考勤花名册

誊抄拼接记录(整表取)命令:|U…!OZ;

月度考勤表草稿:KQB101[?,:]

按日期全员花名册:YGKP10[?,:]

对应关系是:

月度考勤表草稿:部门,姓名,员工编码,日期

人员卡片草稿:部门,姓名,员工编码,日期

公式:KQB101[?,:]=|UYGKP10[?,:]!OZ;

条件中的对应关系是:

[?,1],[?,2],[?,3],[?,4]=

[?,10],[?,6],[?,7],[?,9]

备注:草稿,带*

(17)判断是否已经考勤

跨表对应取数:|B

本表员工考勤信息:姓名+日期

月度考勤表草稿员工花名册信息:姓名+日期

对应条件:本表的姓名+日期=月度考勤表草稿员工花名册的姓名+日期,也即{?,2}+{?,4}=KQB101[?,2]+KQB101[?,4]

判断信息:暂存于月度考勤表草稿的考勤状况栏

公式:KQB101[?,7]=|B{?,2}!F{?,2}+{?,4}=KQB101[?,2]+KQB101[?,4];

备注:草稿,带*

(18)删除已经考勤的记录

删除命令:|Z

月度考勤表草稿:KQB101[:,:]

删除在本表中已有考勤的员工记录:月度考勤表草稿考勤状况栏不为空白

公式:KQB101[?,:]=|ZKQB101[:,:]!F.NOT.EMPTY(KQB101[?,7]);

备注:草稿,带*

(19)剩余未有考勤记录的即为缺勤(休息)

月度考勤表草稿考勤状况栏:KQB101[?,7]

剩余的月度考勤表草稿考勤状况值:缺勤(休息)

公式:KQB101[?,7]='缺勤(休息)'

备注:草稿,带*

(20)与之前的考勤分析结果合并

誊抄拼接记录(整表取)命令:|U…!OA;

月度考勤表草稿:KQB101[?,:]

本表月度考勤表:{?,:}

对应关系是:完全对应

公式:{?,:}=|UKQB101[?,:]!OA;

(21)按部门员工日期重新排序

排序(一般取键值从小到大):|P

排序关键栏目:(本表)部门+员工+考勤日期

公式:{?,:}=|P{?,1}+{?,2}+{?,4};

至此,月度考勤分析才能获得较为满意的结果。这种精益求精的精神,是每一个职业岗位的人都应该遵守并落实到行动的。