2.3.9 订餐汇总表计算设计
根据订餐汇总表的加工逻辑设计,使用功能构件表达式可以映射地如下表示,并做详细注解:
(1)清空本表原有数据(避免重复汇总)
删除命令:|Z
本表的行:{:,:}
删除原有的全部内容:{?,:}
公式:{?,:}=|Z{?,:};(或{?,:}=|Z{:,:};)
(2)获取当日考勤中餐信息(当天上午的考勤)
誊抄拼接记录(整表取)命令:|U
当日考勤大数据信息:QBKQ00[!,?,:]
预清空:|U…!OZ;
对应关系是:
订餐汇总表:员工编码,中餐补贴
考勤大数据:员工编码,1(常量,表示凡出勤者均补贴一顿中餐)
获取中餐信息:指定当天上午,即12点前,表达式为YEAR(CTOD(QBKQ00[?,12]))=_NYY.AND.MONTH(CTOD(QBKQ00[?,12]))=_NMM.AND.DAY(CTOD(QBKQ00[?,12]))=_NMD.AND.RIGHT(QBKQ00[?,12],2)='AM',指定中餐,即餐别为2,表达式为QBKQ00[?,5]=2
公式:{?,:}=|UQBKQ00[?,:]!FYEAR(CTOD(QBKQ00[?,12]))=_NYY.AND.MONTH(CTOD(QBKQ00[?,12]))=_NMM.AND.DAY(CTOD(QBKQ00[?,12]))=_NMD.AND.RIGHT(QBKQ00[?,12],2)='AM'.AND.QBKQ00[?,5]=2!OZ;
条件中的对应关系是:
{?,3},{?,5}=
[?,2],1
(3)获取当日考勤晚餐信息
誊抄拼接记录(整表取)命令:|U
当日考勤大数据信息:QBKQ00[!,?,:]
与前合并:|U…!OA;
对应关系是:
订餐汇总表:员工编码,晚餐补贴
考勤大数据:员工编码,1(常量,表示凡夜班出勤者均补贴一顿晚餐)
获取晚餐信息:指定当天,表达式为YEAR(CTOD(QBKQ00[?,12]))=_NYY.AND.MONTH(CTOD(QBKQ00[?,12]))=_NMM.AND.DAY(CTOD(QBKQ00[?,12]))=_NMD,指定晚餐,即餐别为3,表达式为QBKQ00[?,5]=3
公式:{?,:}=|UQBKQ00[?,:]!FYEAR(CTOD(QBKQ00[?,12]))=_NYY.AND.MONTH(CTOD(QBKQ00[?,12]))=_NMM.AND.DAY(CTOD(QBKQ00[?,12]))=_NMD.AND.QBKQ00[?,5]=3!OA;
条件中的对应关系是:
{?,3},{?,6}=
[?,2],1
(4)13:00之前消费的为中餐
誊抄拼接记录(整表取)命令:|U
当日消费大数据信息:XFXX00[!,?,:]
与前合并:|U…!OA;
对应关系是:
订餐汇总表:员工编码,中餐消费情况
消费大数据:员工编码,1(常量,表示凡有记录者均为消费了中餐)
获取中餐消费信息:指定当天13点前,表达式为YEAR(CTOD(XFXX00[?,15]))=_NYY.AND.MONTH(CTOD(XFXX00[?,15]))=_NMM.AND.DAY(CTOD(XFXX00[?,15]))=_NMD.AND.SUBSTR(XFXX00[?,15],12,2)<13
公式:{?,:}=|UXFXX00[?,:]!FYEAR(CTOD(XFXX00[?,15]))=_NYY.AND.MONTH(CTOD(XFXX00[?,15]))=_NMM.AND.DAY(CTOD(XFXX00[?,15]))=_NMD.AND.SUBSTR(XFXX00[?,15],12,2)<13!OA;
条件中的对应关系是:
{?,3},{?,8}=
[?,2],1
(5)13:00之后消费的为晚餐
誊抄拼接记录(整表取)命令:|U
当日消费大数据信息:XFXX00[!,?,:]
与前合并:|U…!OA;
对应关系是:
订餐汇总表:员工编码,晚餐消费情况
消费大数据:员工编码,1(常量,表示凡有记录者均为消费了晚餐)
获取晚餐消费信息:指定当天13点(含)后,表达式为YEAR(CTOD(XFXX00[?,15]))=_NYY.AND.MONTH(CTOD(XFXX00[?,15]))=_NMM.AND.DAY(CTOD(XFXX00[?,15]))=_NMD.AND.SUBSTR(XFXX00[?,15],12,2)>=13
公式:{?,:}=|UXFXX00[?,:]!FYEAR(CTOD(XFXX00[?,15]))=_NYY.AND.MONTH(CTOD(XFXX00[?,15]))=_NMM.AND.DAY(CTOD(XFXX00[?,15]))=_NMD.AND.SUBSTR(XFXX00[?,15],12,2)>=13
条件中的对应关系是:
{?,3},{?,9}=
[?,2],1
(6)消除考勤消费打卡机中的重复记录
消除重复:个别物联网记录有重复“抖动”现象,应当排除,用|P,|P...!OS;
关键栏目:员工编码+中餐补贴+晚餐补贴+中餐消费情况+晚餐消费情况,即{?,3}+STR({?,5},2)+'-'+STR({?,6},2)+'-'+STR({?,8},2)+'-'+STR({?,9},2),STR函数实现数值与字符的转换
公式:{?,:}=|P{?,3}+STR({?,5},2)+'-'+STR({?,6},2)+'-'+STR({?,8},2)+'-'+STR({?,9},2)!OS;
(7)分员工编码进行分类汇总
按员工合并合计:按员工编码分类合计,|P...!F...!OS;
需要合计的栏目:中晚餐补贴和中晚餐消费,分别是{?,5},{?,6},{?,8},{?,9}
公式:{?,:}=|P{?,3}!F{?,5},{?,6},{?,8},{?,9}!OS;
(8)获取员工信息
跨表对应取数:|B
员工信息:YGKP00[?,:]
对应条件:员工编码相同,即本表员工编码=人员信息及充值卡片上的员工编码,也即{?,3}=YGKP00[?,7],或者YGKP00[?,7]={?,3}
姓名与部门对应关系:本表姓名、部门=人员信息及充值卡片上的姓名、部门,也即{?,2},{?,1}=[?,6],[?,10]
公式:{?,2}({?,2},{?,1}=[?,6],[?,10])=|BYGKP00[?,6]!FYGKP00[?,7]={?,3};
(9)删除空卡等异常记录
删除命令:|Z
本表的行:{:,:}
删除卡等异常记录:EMPTY({?,3})
公式:{?,:}=|Z{?,:}!FEMPTY({?,3});(或{?,:}=|Z{:,:}!FEMPTY({?,3});)
(10)按部门员工排序
排序(一般取键值从小到大):|P
排序关键栏目:(本表)部门+姓名,即{?,1}+{?,2}
公式:{?,:}=|P{?,1}+{?,2};
(11)插入合计
新增一行:|I...!OA;
标记合计:|I...!O第3栏标记“合计”A;
公式:{?,:}=|I{:,:}!O{?,3}='合计'A;
(12)计算合计
合计:|S
所有的栏目(字符型除外)都要计算:{:,:}
合计结果在最后行:{E?,:}
公式:{E?,:}=|S{:,:};
将上述公式整理,便形成表2-10的加工逻辑数据字典。在录入修改界面中点击“计算”按钮,可打开计算公式的编辑设计菜单进行设计,如图2-48所示。
表2-10 加工逻辑字典:DCXX_JSS,订餐汇总表,日报


图2-48 订餐汇总表计算公式的编辑界面
以第2行公式为例,一个计算公式的编辑(含添加、修改、插入)页面如图2-49所示,公式名称表示该公式的提示信息,可供开发维护人员协作共享,等式左边是被赋值的表变量,等式右边是包含常数、函数、表变量、中间件自带谓词演算命令等在内的混合算法结果,公式条件是指赋值给等式左边时需要满足的条件,有时用来表示等式左右两表的栏目对应关系,计算精度是指计算结果需要保留的小数精度,公式注释是指公式的计算、校验特性,提示信息是指校验出现等式左右不相等或者公式条件校验不满足时的提示信息。

图2-49 订餐汇总表公式编辑示例