凭证反作废必须和作废是同一人问题的二开解决办法原创
金蝶云社区-战斗的凯文
战斗的凯文
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组件。保存成功后,可以通过附加进程的方式对上述代码进行功能调试。

赞 8