编码规则交接文档胡桓1月5日一、编码规则几个重点业务的流程图1、编码规则整体流程图2、查找规则的流程图3、根据定义的规则产生编码的流程图4、产生顺序号的流程图二、编码规则重点业务的序列图1、产生编码的过程2、顺序号产生的过程三、编码规则几个常用的表T_bas_codingrule存储定义的编码规则信息的表T_bas_codingruleentry存储定义的编码规则分录信息的表,通过fcodingruleid与T_bas_codingrule关联T_bas_maxserial存储编码规则最大号值的表,通过fcodingruleentryid与T_bas_codingruleentry表中分录属性为sn的fid关联T_bas_intermitno存储编码规则断号的表,通过fcodingruleentryid与T_bas_codingruleentry表中分录属性为sn的fid关联常用的sql一般是通过编码规则的编码查询当前规则的断号和最大号(1)查询当前规则的断号select*fromt_bas_intermitnowherefcodingruleentryidin(selectfidfromt_bas_codingruleentrywherefcodeattribute='sn'andfcodingruleidin(selectfidfromt_bas_codingrulewherefnumber='GL-00000003'))(2)查询当前规则的最大号select*fromt_bas_maxserialwherefcodingruleentryidin(selectfidfromt_bas_codingruleentrywherefcodeattribute='sn'andfcodingruleidin(selectfidfromt_bas_codingrulewherefnumber='GL-00000003'))常见的断号或者重号问题一般查这两个表就能够定位出问题。四、常见的支持问题1、我想在单据中应用编码规则怎么处理?让单据应用编码规则,可以在单据对应的实体中加扩展属性codingruleenable,并将该值设置为true。2、我想让实体的属性参与编码该怎么处理?让实体的属性参与编码可以在实体属性的扩展属性中加入isincode,并加该属性的值设置为true。3、我想让为定义的编码规则设置应用条件该做哪些设置?让实体的扩展属性参与到适用条件可以在该属性的扩展属性中加入isBindingProperty,并将这个属性的值设置为true。4、规则定义的时候勾选了不允许断号,新增单据的时候不能出现编码?这个问题首先要区分新增显示和不允许断号,新增显示且不允许断号的区别新增显示的时候调用的是getnumber方法,这样在单据新增的时候就去抢号了。不允许断号是不能在单据新增的调用getnumber的,因为会出现这样一个场景,但用户新增一个单据时,调用了getnumber方法,抢号动作发生了,但是这时用户不保存这条单据,那么就造成断号了。如果要在不允许断号的时候能够显示出编码可以调用编码规则的readnumber方法生成一个临时的编码,真正保存的时候(在bean方法里)调用的是getnumber。新增显示且不允许断号的实现就是要在单据新增的时候调用readnumber生成一个临时的编码,然后在单据保存的时候再调用getnumber方法。5、勾选了不允许断号的时候出现了断号现象?这个要先确认在单据删除的时候是不是调用了编码规则的recyclenumber方法,如果没有调用这个方法是肯定会出现断号的,因为如果调用了recyclenumber方法,我们就会把回收到的断号放到一个断号表里,这样下次再新增一个单据的时候我们会从断号表中去取断号,这样就避免了出现断号。6、编码规则怎样才能支持修改?支持修改的时候要注意哪些问题要让生成的编码支持修改必须在单据的实体的扩展属性中加入CRNumberEdit,并加该属性设置为true。这样在规则定义的时候再去勾选支持修改,这样在新增单据的时候就会让用户可以修改了。在单据支持修改的时候要注意:保存时候会调用编码规则的checkModifiedNumber方法,调用这个方法时把修改后的编码传进来,如果修改后的编码的顺序号超过了当前的编码规则生成的最大号,这个时候就会抛出最大值超过范围的提示。7、我想让设置的编码规则应用到除编码外的其他字段该怎么处理?如果想让设置的编码规则应用到除编码外的其他字段,可以继承我们提供的接口ICodingRuleAdapt,并且实现ICodingRuleAdapt类的getAdaptItemList方法,将要参与编码的其他属性以AdaptItem的方式放到list中。并且将要改单据的bostype和实现类放到CodingRuleAdapt.properties这个文件中。格式如下:FF66566A=com.kingdee.eas.ma.budget.NameCodeRuleAdapt并且在规则定义的时候把要应用该编码规则的字段加进来,如图:8、我想在编码规则的适用条件里设置文本类型如果想在适用条件里应用文本类型,可以实现编码规则提供的接口IbindingProperty,并实现里面的方法,将要参与适用条件的文本类型数据的值传过来。同时将单据的bostype和属性值以及实现类放到property.xml中,格式如下:
9、单据保存的时候报编码重复错误是怎么回事?报编码重复的重复可能有三种:⑴编码规则中没有设置将顺序号参与编码,这样每次生成的编码都是一样的。⑵有些单据会有一些导入的功能,而导入是从excel文件导入的,但是导入的数据没有编码,这是人工加入一些编码肯定会与后续编码规则生成的编码产生重复⑶几个不同的单据分别定义了各自的编码规则,但是编码规则定义的的一模一样,这样在生成编码时候肯定会出现重复。10、我明明将该属性在规则定义的时候参与编码怎么编码生成的时候没有这个属性值?这个要确定你调用编码规则的getnumber或者readnumber的时候传进来的info里面这个属性是否有值,通常情况下,如果info里面有这个值,是肯定会显示出来的。11、编码规则序时薄里左侧的树中没有出现我的单据是怎么回事?首先要确认单据的实体是否设置了codingruleenable这个扩展属性,如果设置了还是没有显示应该是本地环境的问题,重新生成一下子系统树再试试。12、按属性分类排序出现的重号或者未按照属性分类排序的问题(1)重号现象主要是分类排序项没有可视造成的,比如用户定义的编码规则是组织.编码+顺序号,按照组织的编码来分类排序,但是组织.编码是不可视的,这样在不同组织下新增单据就会出现重号的情形(2)未按照分类排序项来分类排序这个问题也是因为分类排序项不可视造成的,跟重号现象类似,只是业务那边做了一个判断,发现重号就又获取了一次编码,这样就造成没有按照分类排序项来排序的假象,目前知道的有采购部门单据和供应商、客户单据