ERP万服网

 找回密码
 立即注册

QQ登录

查看: 6389|回复: 17

K3二次开发技术系列之二:核算项目

  [复制链接]
发表于 2015-5-10 21:52:46 | 显示全部楼层 |阅读模式
  核算项目是K3的重要基础资料,顾名思义是指可以作为会计核算对象的基础资料。K3对核算项目的数据结构设计很巧妙,具有非常灵活的扩展性,极大方便了业务财务一体化的深度应用,这点上是优于众多其他ERP的。K3核算项目的数据结构如下图所示,其中包括三类数据表:
  

  第一类是核算项目系统定义表
  t_ItemClass核算项目类型定义表。其中FItemClassID字段值表示核算项目类型的内码,其他数据表以此内码值来引用相应的核算项目类型;FSQLTableName字段值表示用以存储核算项目类型相应具体业务数据所用的实体表(或视图)名称,此值为空表示核算项目类型只有基本业务数据(内码、代码和名称),没有具体业务数据。
  
  t_ItemPropDesc核算项目属性(字段)定义表。其中FSQLColumnName字段值表示用以存储核算项目属性实际业务数据所用的实体表(或视图)字段名称;FSearch字段值不为0,表示核算项目属性所关联引用其他K3基础资料(包括一般基础资料和BOS基础资料)的类型内码;FSrcTableFSrcFieldFDisplayField字段值表示核算项目属性值关联显示时所需连接的数据表(或视图)名称、连接字段和具体显示字段名称。
  
  K3的数据字典t_TableDescriptiont_FieldDescription表的内容不够完善,通过上述两个表更能准确了解核算项目的数据结构。

  第二类是核算项目业务数据表
  t_Item所有核算项目类型的基本业务数据表,既存储核算项目上级组数据,也存储核算项目明细数据。其中FItemClassID字段值表示核算项目的类型内码;FItemID字段值表示核算项目的内码;FDetail字段值为1表示为明细核算项目;FParentID字段值表示明细核算项目所属的上级组内码;FLevel字段值表示核算项目所处的树形层次数;FDeleted字段值为1表示核算项目已禁用。
  
  核算项目实体表(或视图)存储某一核算项目的具体业务数据,比如:存储“部门”类型核算项目的实体表是t_Department表,存储“物料”类型的实体表是t_ICItem视图……其中各字段的含义由上述t_ItemPropDesc表中记录所定义。
  K3的会计科目设置中,一个科目可以下挂多个核算项目类型的组合,上述t_Item表和核算项目实体表(或视图)只是存储各个独立的核算项目数据,因此另外使用t_ItemDetailt_ItemDetailV表对核算项目的组合情况进行的记录。
  t_ItemDetail核算项目组合表。其中FDetailID字段值表示组合的内码;FDetailCount字段值表示参与组合的核算项目个数(注意:单个核算项目也算是一种组合);F1F2F3……这些字段名称由“F”加上核算项目类型内码构成,表示存储相应类型的核算项目内码。这个表中有些由“-1”构成的特殊组合,仅表示有哪些类型的核算项目参与组合,叫做“占位组合”,被会计科目表t_AccountFDetailID字段引用,用来表示相应的会计科目下挂的核算项目组合定义。
  
  t_ItemDetailV核算项目组合纵表。是为方便一些场合的系统编程,将t_ItemDetail进行纵向变换的存储表。其中直接用FItemClassID字段来表示参与组合的核算项目类型,用FItemID字段来记录参与组合的核算项目值。
  

  第三类是核算项目权限定义表,包括:功能权限对象定义表t_ObjectType、功能权限对象操作定义表t_ObjectAccessType、功能权限组成员项表t_ObjectAccess、数据权限定义表t_AccessRowData和具体的数据权限实体表(表名称以“Access_”开头)。

  二次开发时,需要给现有的核算项目类型增加新属性(字段),或者需要增加全新的核算项目类型,可以直接进入K3主控台系统设置模块中的“核算项目管理”功能手工定义。系统自动根据自定义的顺序产生所需业务数据字段名(“F_”开头加上从101起算的流水号)或具体业务数据表名(“t_Item_”开头加上从3001起算的流水号),不过这种方法不便于程序移植,因为在另一账套手工重建同样的新核算项目属性(字段)或新核算项目类型,系统自动根据流水号产生的新字段名或表名可能与原来开发环境账套的不相同,从而导致引用到这些字段名的二次开发SQL脚本或插件代码需要修改调整,所以针对复杂的、或商业化的二次开发,建议使用SQL代码编程的方式增加新核算项目类型或字段。

  使用SQL代码进行核算项目方面的二次开发,通常有三种场景:
  第一种是增加核算项目数据。要对t_Item表、核算项目实体表或视图(例如物料的t_ICItem)、数据权限实体表(表名称以“Access_”开头,K3主控台自定义核算项目的表名为Access_t_ItemDefine)插入数据。建议让系统自动生成核算项目内码,先插入t_Item表,给FItemID的插入值为-1,插入成功后读出实际值再进行其他表插入。如果要自己生成核算项目内码,注意内码维护与内码管理表t_IdentityICMaxNum中所登记的一致性。
  如果是新增会计科目、凭证等资料所要引用的核算项目数据,注意还要在t_ItemDetailt_ItemDetailV表插入数据,哪怕不是多个核算项目组合(即:单个核算项目)也要做。建议让系统自动生成核算项目组合值内码,先插入t_ItemDetail表,给FDetailID的插入值为-1,插入成功后读出实际值再插入t_ItemDetailV表。如果要自己生成组合值内码,注意组合值内码维护与内码管理表t_Identity中所登记的一致性。
  另外如果要让K3可以查询到核算项目新增的操作用户和时间信息,还需要对基础资料操作信息表t_BaseProperty和系统操作日志表t_Log插入数据。
  当然,这种场景的开发也可以通过调用K3组件或WebService服务来实现,避免直接对表操作。

  第二种是现有的核算项目类型增加属性(字段)。首先要在核算项目实体表增加相应的物理字段,然后在t_ItemPropDesc表中插入相应的属性定义。建议物理字段名以开发者自己有标志性的字母代码开头,不要以“F”(K3约定的原生字段前缀)开头。这样定义的属性字段不会被K3主控台的“核算项目管理”功能删除,也避免与K3未来新的原生字段名出现重复冲突。如果现有的核算项目类型不存在实体表,则需先创建新的实体表(同样建议以开发者自己有标志性的字母代码开头),并更新t_ItemClass表中相应的FSQLTableName字段值。
  K3的核算项目“物料”比较特别,是以视图t_ICItem来存储具体业务数据的,新增物理字段只能放在其多个基表中的一个上。因此新增好物理字段、插入好t_ItemPropDesc记录后,必须执行存储过程SP_CREATE_ICItem_VIEW来重建t_ICItem视图、执行存储过程SP_CREATE_ICItem_TRIGGER来重建t_ICItem视图的触发器,否则物料新增的字段在K3中不能正确显示和保存数据。另外建议插入t_ItemPropDesc表的FPropID字段值取101499之间,这样新增的物料属性(字段)可被K3仓存管理模块的固定报表以自定义字段的方式识别显示出来。

  第三种是新增的核算项目类型。这个二次开发就比较复杂了,需要以下步骤:
  1、在t_ItemClass表中插入新类型定义,其中FItemClassID取值参考建议在15002000、或者25003000之间(K3要求所有基础资料的类型内码不重复,这两个建议内码区间避开了K3自有的内码区间和K3主控台自定义核算项目类型内码区间)。这样定义的核算项目类型不会被K3主控台的“核算项目管理”功能删除,也避免与K3未来新的原生核算项目类型出现冲突。
  2、除基本业务数据(内码、代码和名称信息)外,如果存在具体业务数据字段的,则需创建核算项目实体表(建议以开发者自己有标志性的字母代码开头),并在t_ItemPropDesc表中插入属性(字段)定义,否则此步骤忽略。
  3、给t_ItemDetail表增加新字段,字段名为“F”加上FItemClassID值。
  4、在功能权限对象定义表t_ObjectType、功能权限对象操作定义表t_ObjectAccessType、功能权限组成员项表t_ObjectAccess插入相应的定义信息。
  5、在t_AccessRowData表插入数据权限定义,并创建具体的数据权限实体表,表名为t_AccessRowData表中的相应FAccessTable字段值(建议为“Access_”加上第2步的核算项目实体表名,或“Access_t_Item”加上FItemClassID值)。

  根据上述知识,在此示例增加一个新的核算项目类型“研发项目”,并在“物料”中创建“研发项目”属性字段来引用它,详细的SQL代码见附件。


  浏览此系列帖子总目录:K3二次开发技术系列之一:概述


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2015-5-27 08:24:54 | 显示全部楼层
感谢楼主!!!顶!!!!!
发表于 2015-6-2 16:16:16 | 显示全部楼层
感谢!!!!
发表于 2015-6-3 17:11:26 | 显示全部楼层
顶!!!!!!
发表于 2015-6-7 21:37:19 | 显示全部楼层
看帖子的要发表下看法
发表于 2015-6-10 10:49:32 | 显示全部楼层
感谢楼主,分享的人最可爱
发表于 2015-8-6 08:12:04 | 显示全部楼层
专业!!!!!!
发表于 2015-9-8 10:47:33 | 显示全部楼层
不怎么看的懂啊
发表于 2015-10-16 09:22:21 | 显示全部楼层

感谢!!!!
发表于 2015-11-3 08:26:13 | 显示全部楼层
感谢!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信关注
公众号erpmate

帮助|ERP万服网 ( 深圳市源诠信息科技有限公司·粤ICP备12089836号-3

GMT+8, 2019-6-20 02:10 , Processed in 0.093334 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表