凭证反作废必须和作废是同一人问题的二开解决办法原创
8人赞赏了该文章
599次浏览
编辑于2023年06月13日 11:25:51
出于安全考虑,总账要求凭证反作废时,操作员必须和作废人是同一人。但是,在企业实践上,有时会遇到一些实际问题,例如:原来凭证作废的操作人离职了,其用户账号被禁用,其他同事就无法反作废相关凭证,企业正常业务受到影响。虽然可以通过反禁用该操作人账号的方法来解决,但有些企业流程管理严格,这样操作耗时费力。今天介绍一种通过二开插件来绕开“凭证反作废操作员必须和作废人是同一人”的限制的方法。
以在凭证查询界面二开为例,主要思路是:在菜单上添加一个“新反作废”菜单,点击该菜单时,调用官方系统提供的凭证反作废服务,同时将参数中的“反作废人ID”参数的值指定为从要反作废的凭证上查到的作废人的ID。这样,就使得“反作废人”和作废人同一人了,从而绕开系统判断,达到其他同事也可反作废凭证的效果。
首先,通过BOS IDE为【凭证】添加一个列表菜单项“新反作废”,ID为“tbNewAntiInvalid”。
接着,新建一个二开插件类,继承AbstractListPlugIn类,并实现其中的BarItemClick方法,即菜单项点击事件,示例代码如下(忽略了权限,严谨性等校验):
public override void BarItemClick(BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e) { //点击的是“新反作废”菜单项 if(e.BarItemKey.EqualsIgnoreCase("tbNewAntiInvalid")) { //获得选中行的数据 var selectRows = this.ListView.SelectedRowsInfo; //获取要反作废的凭证的内码 string[] vchIDS = selectRows.GetPrimaryKeyValues(); var lstVchs = vchIDS.ToList<long>(); //获得凭证作废人ID(这里假设选中的凭证都是同一人作废,具体实现由开发自己完成) long InvaliderId = GetInvaliderId(selectRows ); //执行反作废,参数反作废人指定为作废人ID var result = VoucherInvalidServiceHelper.VoucherAntiInvalid(this.Context, InvaliderId, lstVchs ); this.View.ShowOperateResult(result .OperateResult); //刷新列表 this.View.Refresh(); } }
然后,保存上述代码,检查编译无误后,生成dll组件。
之后,再回到BOS IDE为【凭证】追加一个新列表插件,指定新插件为刚生成的dll组件。保存成功后,可以通过附加进程的方式对上述代码进行功能调试。