业务背景
EAS8.5 启用费用报销模块,同时使用了发票云的影像系统。在使用过程中如果发生归档模版更换,或者员工在某组织第一次进行报销时,需要设置默认打印封面。因为EAS产品或者是浏览器的原因,导致员工设置默认打印封面有的时候会存在不生效的情形,或者还需要维护人员远程去协助进行设置,非常的麻烦。
处理思路
经过咨询总部数据老师,了解到标准产品的用户默认套打封面是由数据表(T_RPT_deftemplate)进行存储,并且相互之间的逻辑关系也存在。那就可以通过执行sql语句的方式进行功能实现。
具体思路如下:
将分配了职员报销角色的用户过滤 形成新的临时表 xx; 关键数据表:T_PM_USERROLEORG(用户角色权限) 这里因为我这边是用户都是通过角色进行授权的。
把没有设置默认套打模版的数据行插入到数据表T_RPT_deftemplate
具体步骤
步骤1:编写sql语句
SQL1: 过滤用户和角色语句
因为涉及到 差旅报销单、费用报销单和对公报销单
--步骤一: 将分配了职员报销角色的用户过滤 形成新的临时表 xx ---- //***** insert into XX SELECT * FROM (SELECT distinct JUESEQUANXIAN.FORGID || ' ' || YONGHU.FNAME_L2 FORGUSER, '/EAS_Note.kdrs/FI/CPBC/BizAccountOutBill/image' FTEMPPATH, '/归档封面-对公报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID // 职员 LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID where JUESEQUANXIAN.FROLEID='Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0 AND YONGHU.FTYPE = 20 AND YONGHU.FISDELETE = 0 UNION SELECT distinct JUESEQUANXIAN.FORGID || ' ' || YONGHU.FNAME_L2 FORGUSER, '/EAS_Note.kdrs/FI/CPBC/tra/image' FTEMPPATH, '/归档封面-差旅报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID // 职员 LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID where JUESEQUANXIAN.FROLEID='Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0 AND YONGHU.FTYPE = 20 AND YONGHU.FISDELETE = 0 UNION SELECT distinct JUESEQUANXIAN.FORGID || ' ' || YONGHU.FNAME_L2 FORGUSER, '/EAS_Note.kdrs/FI/CPBC/bizaccount/image' FTEMPPATH, '/归档封面-费用报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID // 职员 LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID where JUESEQUANXIAN.FROLEID='Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0 AND YONGHU.FTYPE = 20 AND YONGHU.FISDELETE = 0)
SQL2: 通过 T_RPT_deftemplate 中的 FORGUSER + FTEMPPATH 字段 与临时表 TT_QLGY_DefaultCoverPage 的 FORGUSER + FTEMPPATH 进行比对,删除重复项
DELETE FROM TT_QLGY_DefaultCoverPage WHERE FORGUSER in (SELECT distinct FORGUSER FROM T_RPT_deftemplate) AND FTEMPPATH in (SELECT distinct FTEMPPATH FROM T_RPT_deftemplate)
SQL3:将临时表 XX中的结果 插入到 T_RPT_deftemplate 表中
insert into T_RPT_deftemplate select distinct * from TT_QLGY_DefaultCoverPage
SQL4:清空临时表
DELETE FROM TT_QLGY_DefaultCoverPage
步骤2:dep扩展实现功能
因为没有找到对用户列表界面的扩展路径,我选择用 物料档案的列表界面进行扩展。
新建扩展方案,新建功能、新建按钮。(这些步骤就省略了)
对扩展方案的扩展定义自定义的工具进行扩展
完整代码如下:
//**** 根据用户和用户分配的角色 (普通员工) 和 角色 分配的业务组织,设置 费用报销的 默认套打封面 //--- 这里的套打封面是指 启用了电子档案 需要同步至影像系统的套打封面 //--- 其他的业务单据,如无特殊要求,尽量不设置套打封面,用户自定义维护 //--- 这个功能主要是为了解决 员工在web端 设置默认套打封面的时,不会设置或者设置无效,另外在修改了 归档封面的模版名称之后,这里的语句中的套打模版值夜要同步修改 //--- 正常是 如果员工自己修改了,会自动同步修改表 T_RPT_deftemplate,修改了 套打别名的话 是不需要修改这里的脚本 var sql_chaxun="INSERT INTO TT_QLGY_DefaultCoverPage SELECT * FROM (SELECT DISTINCT ((JUESEQUANXIAN.FORGID || ' ') || YONGHU.FNAME_L2) FORGUSER, '/EAS_Note.kdrs/FI/CPBC/BizAccountOutBill/image' FTEMPPATH, '/归档封面-对公报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID WHERE (((JUESEQUANXIAN.FROLEID = 'Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0) AND YONGHU.FTYPE = 20) AND YONGHU.FISDELETE = 0) UNION SELECT DISTINCT ((JUESEQUANXIAN.FORGID || ' ') || YONGHU.FNAME_L2) FORGUSER, '/EAS_Note.kdrs/FI/CPBC/tra/image' FTEMPPATH, '/归档封面-差旅报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID WHERE (((JUESEQUANXIAN.FROLEID = 'Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0) AND YONGHU.FTYPE = 20) AND YONGHU.FISDELETE = 0) UNION SELECT DISTINCT ((JUESEQUANXIAN.FORGID || ' ') || YONGHU.FNAME_L2) FORGUSER, '/EAS_Note.kdrs/FI/CPBC/bizaccount/image' FTEMPPATH, '/归档封面-费用报销-A4横版.r1-print' FDEFTEMPLATE FROM T_PM_USERROLEORG JUESEQUANXIAN LEFT OUTER JOIN T_PM_USER YONGHU ON YONGHU.FID = JUESEQUANXIAN.FUSERID LEFT OUTER JOIN T_ORG_ADMIN ZUZHIDANYUAN ON JUESEQUANXIAN.FORGID = ZUZHIDANYUAN.FID WHERE (((JUESEQUANXIAN.FROLEID = 'Y/AAAADGoGkTtnMq' AND YONGHU.FFORBIDDEN = 0) AND YONGHU.FTYPE = 20) AND YONGHU.FISDELETE = 0))";// 将分配了职员报销角色的用户过滤 插入临时表 xx var sql_jianyan="DELETE FROM TT_QLGY_DefaultCoverPage WHERE FORGUSER in (SELECT distinct FORGUSER FROM T_RPT_deftemplate) AND FTEMPPATH in (SELECT distinct FTEMPPATH FROM T_RPT_deftemplate)"; // 通过 T_RPT_deftemplate 中的 FORGUSER + FTEMPPATH 字段 与临时表 TT_QLGY_DefaultCoverPage 的 FORGUSER + FTEMPPATH 进行比对,删除重复项 var sql_update ="insert into T_RPT_deftemplate select distinct * from TT_QLGY_DefaultCoverPage "; // 将临时表 TT_QLGY_DefaultCoverPage 中的结果 插入到 T_RPT_deftemplate 表中 var sql_delete ="DELETE FROM TT_QLGY_DefaultCoverPage"; // 将临时表 XX中的结果 插入到 T_RPT_deftemplate 表中 com.kingdee.eas.csinterface.syncdatabase.SQLFacadeFactory.getRemoteInstance().exeSQL(sql_chaxun); com.kingdee.eas.csinterface.syncdatabase.SQLFacadeFactory.getRemoteInstance().exeSQL(sql_jianyan); com.kingdee.eas.csinterface.syncdatabase.SQLFacadeFactory.getRemoteInstance().exeSQL(sql_update); com.kingdee.eas.csinterface.syncdatabase.SQLFacadeFactory.getRemoteInstance().exeSQL(sql_delete); //com.kingdee.eas.util.client.MsgBox.showInfo(sql); com.kingdee.eas.util.client.MsgBox.showInfo("用户默认套打封面已更新 ");
说明
1、因为不是专门做开发的,所以上面的功能是个人自学设置,部分方法、语句写法可能不合乎标准规范,方法仅供参考,
2、因为涉及到数据库操作,在数据库操作时,请首先联系总部老师了解标准产量数据逻辑,然后在测试环境备份数据后验证SQL语句,验证无误后再去生产环境部署使用
推荐阅读