根据单据类型校验创建人和审核人要求不一致原创
金蝶云社区-邱育华
邱育华
5人赞赏了该文章 708次浏览 未经作者许可,禁止转载编辑于2022年06月30日 14:26:42

一、【业务需求】

直接调拨单想要根据单据类型设置创建人跟审核人不为同一人。


二、【功能分析】

当前系统参数只能按整个单据进行设置,无法按单据类型设置

administrator角色登录,【基础管理】→【公共设置】→【单据参数设置】

image.png


二、【实现】

import clr
clr.AddReference("mscorlib")
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')

from System import *
from Kingdee.BOS.ServiceHelper import * 
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Metadata.EntityElement import *
from Kingdee.BOS.Core.Validation import *
from Kingdee.BOS.Log import Logger

def OnPreparePropertys(e):
    e.FieldKeys.Add("FBillTypeID");
    e.FieldKeys.Add("FCreatorId");
    
def OnAddValidators(e):
    validator = ValidateAuditUserByBillType()
    validator.EntityKey = "FBillHead"
    validator.AlwaysValidate = True
    e.Validators.Add(validator)
    
class ValidateAuditUserByBillType(AbstractValidator):
    def Validate(self, dataEntities, validateContext,ctx):
        for bill in dataEntities:
            billId = Convert.ToString(bill["Id"])
            billType = bill.DataEntity["BillTypeID"]
            billTypeNumber = Convert.ToString(billType["Number"]) # 单据类型编码
            billTypeName = Convert.ToString(billType["Name"]) # 单据类型名称
            creatorId = Convert.ToInt64(bill.DataEntity["CreatorId_Id"])
            userId = this.Context.UserId
            if creatorId == userId and billTypeNumber == "ZJDB01_SYS": 
                msg = '''当前用户与创建人相同,单据类型为【{0}-{1}】的直接调拨单,审核校验不通过'''.format(billTypeNumber, billTypeName)
                info = ValidationErrorInfo("AuditUserByBillType",billId, bill.DataEntityIndex,bill.RowIndex,billId, msg, "单据创建人与审核人校验", ErrorLevel.Error)
                validateContext.AddError(None,info)


image.png


image.png

赞 5