在Ragic中如果您有自行制作的薪资单,可以利用程序帮助你获取费用报支(可于应用商店 > 行政安装)内的员工代垫款。
请先确保有薪资单跟费用报支两张表单,再透过此功能在薪资单点选单击钮去找费用报支单里该月份该员工代垫且公司已付还(所以才会出现于薪资单中)的款项,程序识别的依据为对应两张表单的员工email,找到与薪资单相同月份的代垫款项,将这些已付还的代垫款相加总,并生成费用于薪资单中。
举个例子来说,如果员工小明本月有:
1.出国出差,花机票钱来回共6万
2.影印店打印文档,花350块
3.邮寄,花25块
他在费用报支单就会有三笔数据,三笔数据的总金额字段的字段值分别为$60000、$350以及$25。
薪资单的单击钮就会找到这三笔数据并加总显示代垫款总金额为:$60000+$350+$25=$60375
注意事项:
1.另外加上程序前请确保两张表单都有纪录email以及年月份的字段,并提醒填单人一定要填(或将这些字段设为必填),然后两边的年月份格式要相同,薪资单的月份为"2020/07",费用报支的月份(默认为意见栏字段)也要为"2020/07",不可为其他格式,如果只有月份的话会将历年同月份的费用加总,算出来就不对了。
2.单击钮是只会加总[已付还?]字段有勾选"Yes"的数据,所以发薪人员记得先到费用报支单勾选有付还的费用。
另外也要确保[已付还?]的字段型态为打勾选项。
再来请依如下步骤设置:
在找到薪资表单,对该表单单击下右键,并选择“ JavaScript 工作流程”:
如果你的薪资单将加减项以及金额设计在子表格的话:
请贴上以下程序代码:
function generateReimburse(recordId) { var employeePayrollSheet = db.getAPIQuery("薪资单表单路径"); //括号里换成薪资单sheet path var expenseSheet = db.getAPIQuery("费用报支单表单路径"); //括号里换成费用报支sheet path var thisEntry = employeePayrollSheet.getAPIEntry(recordId); var thisEmployeeEmail = thisEntry.getFieldValue([员工email]字段ID); //括号里换成薪资单[员工email]字段ID var thisMonth = thisEntry.getFieldValue([该月份]字段ID); //括号里换成薪资单[该月份]字段ID expenseSheet.addFilter(3000338, '=', thisEmployeeEmail); //括号中第一个参数换成费用报支[员工email]字段ID,如未修改我们模板这里不需修改。 expenseSheet.addFilter(费用报支[该月份]字段ID, '=', thisMonth); //括号中第一个参数换成费用报支[该月份]字段ID expenseSheet.addFilter(3000335, '=', 'Yes'); //括号中第一个参数换成费用报支[已付还]字段ID,如未修改我们模板这里不需修改。 var results = expenseSheet.getAPIResultList(); var thisMonthEmployPay = 0; for (var i = 0; i < results.length; i++) { var entry = results[i]; thisMonthEmployPay = thisMonthEmployPay + Number(entry.getFieldValue(3000352)); //括号中字段ID换成费用报支[总金额]字段ID,如未修改我们模板这里不需修改。 }; thisEntry.setSubtableFieldValue(子表格中[金额]字段ID, -100, thisMonthEmployPay); //括号中第一个参数换成薪资单子表格中[金额]字段ID。 thisEntry.setSubtableFieldValue(子表格中[加项项目名称]字段ID, -100, '代垫款'); //括号中第一个参数换成薪资单子表格中[加项项目名称]字段ID。 //括号中第三个参数单引号中的字可以自行修改,可以改成 '员工该月代垫款' 之类的。 thisEntry.recalculateAllFormulas(); thisEntry.save(); response.setMessage('已生成该员工该月代垫款'); //括号中单引号中的字可以自行修改,可以改成 '运行完成' 之类的。 response.setStatus('SUCCESS'); }
如果你的薪资单将代垫款设为独立字段的话:
请贴上以下程序代码:
function generateReimburse(recordId) { var employeePayrollSheet = db.getAPIQuery("薪资单表单路径"); //括号里换成薪资单sheet path var expenseSheet = db.getAPIQuery("费用报支单表单路径"); //括号里换成费用报支sheet path var thisEntry = employeePayrollSheet.getAPIEntry(recordId); var thisEmployeeEmail = thisEntry.getFieldValue([员工email]字段ID); //括号里换成薪资单[员工email]字段ID var thisMonth = thisEntry.getFieldValue([该月份]字段ID); //括号里换成薪资单[该月份]字段ID expenseSheet.addFilter(3000338, '=', thisEmployeeEmail); //括号中第一个参数换成费用报支[员工email]字段ID,如未修改我们模板这里不需修改 expenseSheet.addFilter(费用报支[该月份]字段ID, '=', thisMonth); //括号中第一个参数换成费用报支[该月份]字段ID expenseSheet.addFilter(3000335, '=', 'Yes'); //括号中第一个参数换成费用报支[已付还]字段ID,如未修改我们模板这里不需修改 var results = expenseSheet.getAPIResultList(); var thisMonthEmployPay = 0; for (var i = 0; i < results.length; i++) { var entry = results[i]; thisMonthEmployPay = thisMonthEmployPay + Number(entry.getFieldValue(3000352)); //括号中字段ID换成费用报支[总金额]字段ID,如未修改我们模板这里不需修改 }; thisEntry.setFieldValue([代垫款]字段ID, thisMonthEmployPay); //括号中第一个参数换成薪资单中的[代垫款]字段ID。 thisEntry.recalculateAllFormulas(); thisEntry.save(); response.setMessage('已生成该员工该月代垫款'); //括号中单引号中的字可以自行修改,可以改成 '运行完成' 之类的。 response.setStatus('SUCCESS'); }
若薪资单表单路径为
https://www.ragic.com/accountname/ragicadministration/1
那么请将这行改成:
var employeePayrollSheet = db.getAPIQuery("/ragicadministration/1");
若费用报支单表单路径为
https://www.ragic.com/accountname/ragicadministration/25
那么请将下一行改成:
var expenseSheet = db.getAPIQuery("/ragicadministration/20005");
找到以下程序代码:
var thisEmployeeEmail = thisEntry.getFieldValue([员工email]字段ID);
将薪资单[员工email]字段ID改成真的字段ID,如员工email字段ID为1013791:
请将这行改成:
var thisEmployeeEmail = thisEntry.getFieldValue(1013791);
承上一点做法,将下一行薪资单[该月份]字段ID改成真的字段ID,例:
var thisMonth = thisEntry.getFieldValue(1013790);
找到以下三行:
expenseSheet.addFilter(3000338, '=', thisEmployeeEmail); expenseSheet.addFilter(费用报支[该月份]字段ID, '=', thisMonth); expenseSheet.addFilter(3000335, '=', 'Yes');
第一行的3000338为费用报支单模块的[电邮]字段ID,如果没有删除该字段的话可以直接保留这行不用做修改,如果删除或是想用其他电邮字段的话请改成其他电邮字段的字段ID,例如其他电邮字段的字段ID为1000234的话可以改成:
expenseSheet.addFilter(1000234, '=', thisEmployeeEmail);
第三行的3000335为费用报支单模块的[已付还?]字段ID,修改逻辑同第一行。
第二行比较特别,设计逻辑上是希望薪资单的年月份会抓到该月份的代垫款,所以费用报支单也需要有记录年月份的字段,完全不改模块不额外新增字段的话,可以选择[商业用途]或是[意见栏]字段,
选择[商业用途]的话就可以改成:
expenseSheet.addFilter(3000355, '=', thisMonth);
也可以自行新增年月份字段,并填上年月份字段ID。
承上一点,找到以下这行,3000352为费用报支[总金额]字段ID,有改表单设计再修改即可:
thisMonthEmployPay = thisMonthEmployPay + Number(entry.getFieldValue(3000352));
如果你的薪资单将加减项以及金额设计在子表格的话请找到以下这两行:
thisEntry.setSubtableFieldValue(子表格中[金额]字段ID, -100, thisMonthEmployPay); thisEntry.setSubtableFieldValue(子表格中[加项项目名称]字段ID, -100, '代垫款');
并找到子表格中的对应字段替换上去,替换完会像是这样:
thisEntry.setSubtableFieldValue(1013786, -100, thisMonthEmployPay); thisEntry.setSubtableFieldValue(1013785, -100, '代垫款');
如果你的薪资单将代垫款设为独立字段的话,请找到以下这行:
thisEntry.setFieldValue([代垫款]字段ID, thisMonthEmployPay);
并找到对应代垫款字段替换上去,替换完会像是这样:
thisEntry.setFieldValue(1013793, thisMonthEmployPay);
这个功能的设计为单击完单击钮会显示信息:
而图中的信息是可以修改的,也可以选择不修改,要修改的话请找到以下这行:
response.setMessage('已生成该员工该月代垫款');
将单引号中的字改成想要的字即可,例如:
response.setMessage('已生成本月代垫款');
同样道理,如果你的薪资单将加减项以及金额设计在子表格的话填入的项目名称也可以做修改,欲修改的话可以找到以下这行:
thisEntry.setSubtableFieldValue(子表格中[加项项目名称]字段ID, -100, '代垫款');
将单引号中的:代垫款,改成其他字,例如:
thisEntry.setSubtableFieldValue(子表格中[加项项目名称]字段ID, -100, '本月员工代垫款');
最后编辑完成后请务必点选左上角"保存"程序修改才会生效喔。
进到薪资单表单页修改设计,找到左侧的 "表单设置" > "动作单击钮",单击钮名称可以自取,单击钮类型选:JS Workflow,然后在动作贴上:
generateReimburse({id})
最后点选:新增单击钮 即可。
修改完记得也要保存设计喔。