K3数据库表项关系
作者:互联网
一、单据基础模板
1、ICTransactionType:该表反映了供需链所有单据的总体情况。
ICTransactionType | |
FBrNo | 保持兼容,未用 |
FID | 单据事务类型内部ID |
FRob | 红蓝字标记 :1表示该单据区分红 蓝字 ,0表示没有红蓝字之分 |
FName | 单据名称 |
FType | 单据类别 |
FTempalteID | 单据模版ID (与 ICTemplate,ICTemplateEntry 表中的FID对应 |
FVchTempalteID | (未用) |
FHeadTable | 单据表头对应的数据库表名 |
FEntryTable | 单据表体对应的数据库表名 |
FCheckPro | 二次开发组件 |
FFormWidth | 单据录入时的缺省宽度 |
FFormHeight | 单据录入时的缺省高度 |
FFixCols | 单据的固定列数目(从左到右的锁定) |
2、ICTemplate:该表反映了所有单据的表头的详细情况。
ICTemplate | |
FID | 单据模版ID |
FCtlIndex | 表头控件编号,连续且唯一(作为控件数组的Index,所以必须连续且唯一) |
FTabIndex | 控件的Tab跳动次序 |
FCaption | 控件标题 |
FCtltype | 控件类型 0文本,1日期,2查找,3数量 ,4 编号,5 选单 ,6 单据标题,7 单据分录,8 审核,9 制单,10 批号,11 金额,12 单价,13 税率,14 会计科目 ,15 生产订单状态,16 生产订单来源,17 要求缺省为空的日期,18 记账 ,20 汇率,21 含税价 30 自定义单据使用的字符串类型,31自定义单据使用的数字类型,32 自定义单据使用的日期类型,33自定义单据使用的整数类型 40本位币金额类型 |
FLookUpCls | 如为查找类型 则与表t_ItemClass(核算项目表)中的FItemClassID对应,或者为辅助资料的ID (t_SubMesType 中FtypeID,t_SubMessage中FTypeID) 还有几种不属于以上类型的自定义的类型: 18:批号 13:科目 12:币别 -8:分录审核人 -15:仓位 -17:单据类型 -18:质检方案 -20:部门(车间特殊处理,现已无用) -24:对应代码 -100:工艺路线 -101:BOM调用 -102:生产类型 -103:生产线 -110:BOM单组别 -108:虚仓批号 |
FNeedSave | 是否需要保存到数据库中 |
FValueType | 值的类型 0 字符串,1 数字,2 日期,3 整数 |
FSaveValue | 保存值的类型 0 名称,1 内部ID,2 代码 前期版本存在类型3,已经没有使用了,应该可以去掉。 |
FFieldName | 该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。
|
FLeft |
该单据头控件的位置 |
FTop | |
FWidth | |
FHeight | |
FEnable | 控件在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。 如:48(110000)表示该字段在新增、修改状态下可以录入,其他状态下不可 |
FPrint | 是否打印 |
FFontName | 字体类型 |
FFontSize | 字体大小 |
FSelBill | 如果该控件可以选择其它单据作为数据的输入来源,则该值对应为被选择单据的叙事簿ID (ICListTemplate表中的FID) |
FMustInput | 是否必须录入 |
FFilter | 过滤条件。一般用于选单或查找某类基础资料时过滤掉一些不符合选择条件的单据或基础资料。 |
FRelationID | 表示哪一个字段的改变会导致当前控件值的 改变。它的值为对应字段的数据库字段名。 如有多个这样的字段可以用逗号隔开。
|
FAction | 为前面FRelationid定义的字段的改变时该执行什么样的操作。 例如汇率这个字段,它的FRelationID为FCurrencyID ,FAction为“.,FExchangeRate” 表示当改变币别时,把对应币别的默认汇率 填入汇率栏中。
|
FLockA | 为1表示选单过来的数据不能再添加删除分录
|
FROB | 1 只在蓝字单据中可见,2只在红字单据中可见 3 在红蓝字单据中都可见
|
FDefaultCtl | 系统自带控件为1,自定义的为0 |
FVisForBillType | 控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。
|
FVBACtlType | 自定义单据用来区分是什么类型的控件 有Frame,Label,Kdtext三种
|
FRelateOutTbl | 如果该控件为其它选择类型的属性则为1 表示该字段在当前表中不存在,是属于关联的其他表 例如:销售发票有个客户开户银行账号就是此类
|
FSystemMustInputItem | 如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。
|
FInEntryForSPrint | 连续打印时打印在分录里 |
3、ICTemplateEntry:该表反映了所有单据的分录的详细情况。
ICTemplateEntry | |
FID | 单据模版ID |
FCtlOrder | 分录列的排列前后顺序 |
FCtlIndex | 分录列编号,连续且唯一 |
FCtlType | 分录列类型 0文本,1日期,2查找,3数量 ,4 编号,5 选单 ,6 单据标题,7 单据分录,8 审核,9 制单,10 批号,11 金额,12 单价,13 税率,14 会计科目 ,15 生产订单状态,16 生产订单来源,17 要求缺省为空的日期,18 记账 ,20 汇率,21 含税价, 30 自定义单据使用的字符串类型,31自定义单据使用的数字类型,32自定义单据使用的日期类型,33自定义单据使用的整数类型,40本位币金额类型 |
FLookUpCls | 如为查找类型 则与表t_ItemClass(核算项目表)中的FItemClassID对应,或者为辅助资料的ID (t_SubMesType 中FtypeID,t_SubMessage中FTypeID) 还有几种不属于以上类型的自定义的类型: 18:批号 13:科目 12:币别 -8:分录审核人 -15:仓位 -17:单据类型 -18:质检方案 -20:部门(车间特殊处理,现已无用) -24:对应代码 -100:工艺路线 -101:BOM调用 -102:生产类型 -103:生产线 -110:BOM单组别 -108:虚仓批号 |
FNeedSave | 是否需要保存到数据库中 |
FValueType | 值的类型 0 字符串,1 数字,2 日期,3 整数 |
FSaveValue | 保存值的类型 0 名称,1 内部ID,2 代码 |
FFieldName | 该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。
|
FEnable | 该分录列在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:0、48、49。
|
FPrint | 是否打印该列 |
FHeadCaption | 该分录列的表头标题 |
FWidth | 该分录列的宽度 |
FNeedCount | 该分录列是否需要合计,1:需要 0:不需要。应用于单据界面的合计显示。 |
FRelationID | 表示哪一个字段的改变会导致当前列值的 改变。它的值为对应字段的数据库字段名。 如有多个这样的字段可以用逗号隔开。
|
FAction | 为前面Frelationid定义的字段的改变时该执行什么样的操作。 例如金额这个字段,它的FrelationID为“FauxQty,FAuxPrice” ,Faction为“(),FAuxQty,*,FAuxPrice” 表示当数量或单价改变时,计算数量与单价的乘积,并填入金额列中。 FAction详细说明 |
FMustInput | 是否必须录入 |
FFilter | 过滤条件。一般用于查找某类基础资料时过滤掉一些不符合选择条件的基础资料。 |
FSaveRule | 该列值的保存规则,例如“U:0”表示该列的值不能为0。 FSaveRule详细说明 |
FDefaultCtl | 系统自带分录列为1,自定义的为0 |
FVisForBillType | 该列在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。 |
FRelateOutTbl | 如果该分录列为其它选择类型的属性则为1 例如:销售发票有个客户开户银行账号就是此类 |
FSystemMustInputItem | 如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。 |
FStatCount | 是否汇总类字段(与FNeedCount类似,但使用于程序内部的拆分、打印、合并打印等处理) |
二、单据选单模板
1、ICSelbills:记录选单关系的表。选单要取得哪些值,这些值是如何而来的,以及需回填到哪个对应的控件里。
ICSelbills | |
FID | 单据的模版ID |
FFieldName | 单据上可以选单的字段的字段名 |
FDstCtlField | 回填的目标字段名 |
FselType | 目标字段的类型:0 表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时薄的过滤条件。 几种特殊处理: -200、-100、-50表示排序字段 -1表示不必显示但必须使用的字段 |
FDK | 用于表头控件,表示对于同一个目标字段,该回填值是作为FID或Fname或Fnumber。 0:FID 1:Fname 2:Fnumber |
FcolName | 源字段的别名 |
Fname | 源字段名 |
FtableName | 源表名 |
FtableAlias | 源表别名 |
Faction | 用于处理一些需对字段值进行判断,或需要在字段之间进行一些运算的情况。 |
注意事项:
单据头的字段如果有选单数据来源,则必须有三行,分别填入对应的ID,名称,代码。如果没有ID,代码,则随便传入一个数。而且这个顺序不能改变。主要处理过程参见:K3Bills.Bill的SetRelateCtl函数。
2、ICTableRelation:选单中涉及的所有表之间的连接关系。
ICTableRelation | |
FTypeID | 用于序时薄模版(对应于ICListTemplate中的FTemplateID,表示一种序时簿模板) |
FInterID | 用于序时薄模版,表示唯一的标识 |
FTableName | 表1名 |
FTableNameAlias | 表1的别名 |
FFieldName | 表1的字段名 |
FTablename11 | 表2名 |
FTableNameAlias11 | 表2的别名 |
FFieldName11 | 表2的字段名 |
FLogic | 表1和表2的两个字段之间的关系 |
FBillID | 选单模版号,与ICSelbills中的FID相对应 |
FFieldID | 选单字段名,与ICSelbills中的FFieldName相对应 |
FMode | V9.0时,暂时增加快速模式,标识应用于快速模式的字段,现在已不再使用。 |
三、单据控制
1、ICBillNo
ICBillNo | |
FBillID | 单据ID,对应于ICTransactiontype中的FID |
FBillName | 单据名称 |
FPreLetter | 前缀名 |
FSufLetter | 后缀名 |
FCurNo | 当前单据序号 |
FFormat | 当前序号的格式 |
FPos |
|
2、ICMaxNum
ICMaxNum | |
FTableName | 表名 |
FMaxNum | 当前最大的FInterID |
四、单据套打
1、GLNoteType:单据套打表,记录单据与套打编号的关系。
GLNoteType | |
FTemplateID | 单据ID,对应于ICTransactiontype中的FTemplateID |
FnoteType | 单据套打名称 |
FnoteTypeID | 单据套打ID |
2、GLNoteCitation:单据套打关系表,记录单据套打字段的属性。
GLNoteCitation | |
FTemplateID | 单据ID,对应于ICTransactiontype中的FTemplateID |
FID | 在同一单据套打模板中,作为唯一的序列号 |
FNoteTypeID | 套打ID,对应于GLNoteType中的FNoteTypeID |
Fcode | 数据来源字段名 |
FCitationName | 套打模板取数名称 |
FIsEntry | 当前字段是否是分录 |
FIsMoney | 当前字段是否是金额 |
FCtlIndex | 当前字段在单据中的位置(已经没用) |
FIsSum | 当前字段是否要合计 |
FKeyFieldName | 扩展字段。表示要取FtableName表中的FextFieldName字段,通过FkeyFieldName字段与当前字段关联 |
FExtFieldName | |
FTableName | |
FRelationID | 当前字段的属性标识 1:表头 2:表体 3:汇总 4:扩展表头 5:主计量单位 6:主计量单位数量 7:主计量单位单价 8:扩展分录 |
相关说明:FRelationID与FIsEntry不同,FIsEntry是用来在套打定义中区分表头、表体(如:在表头栏里只显示表头字段、表体栏里只显示表体字段),FRelationID是套打在填充数值时,判断字段属性用的。
五、问题分析
单据现有模板存在两个比较大的问题有待改进:
1、模板数据冗余:
当前单据模板的模板数据是对应每一张单存在的,所以有许多相同类型的单据的共有数据被重复使用,如:库存单据的收料仓库、日期、审核、制单、验收、多级审核、记账、保管等等。
由此导致的另一问题就是,用户无法针对每一类型的单据自定义一个字段,例如:用户要自定义一个A字段,应用于所有库存单据,他必须在每一种库存单据上进行自定义才能实现,这也造成的数据表在物理结构上的冗余。
2、选单结构不灵活:
当前单据的选单实现,是一个字段对应一种选单关系,也就是说:一张单如果可以由十张单关联生成,则必须在该单据的物理表上增加十个记录关联关系的字段。无法实现灵活的控制,同时也导致自定义业务流程的无法实现。
3、ICTemplate表、ICTemplateEntry表的问题
FCtlIndex字段的用途:lFCtlIndex字段用来标识模板各字段的内部顺序(如:单据中Action的执行顺序)和控件索引,由于此关系存在,导致它的值在同一模板中必须唯一且连续,由此造成维护复杂、繁琐、易出错。
Flookupcls字段的统一:lFlookupcls的来源为t_ItemClass、t_SubMessage、t_SubMesType,但存在一些没有规范处理的FLookupCls,对程序的统一处理带来问题,也影响了自定义的规范处理
FAction字段的使用:Action的定义和使用,是单据中的核心问题之一,单据界面上的大部分信息处理,都要通过该功能实现。该功能现有的优点是灵活、易维护。但同时也存在一些严重的缺陷:l、执行顺序不易控制,计算容易造成混乱(如:字段在不同情况下的计算问题)。2、公式不够灵活,每有一种处理(特别是计算公式),就要新增一种Action,造成Action过多,不易整理。而且对于同一字段在不同条件下的不同计算公式,必须在程序中作特殊处理,造成控制不统一。
4、单据选单的关联关系由于是通过程序解析生成,整个生成的SQL语句的执行效率很低,并且有些还使用了非标准的语法(如:*=、=*)。
标签:控件,表项,分录,自定义,数据库,选单,K3,单据,ID 来源: https://blog.csdn.net/mamengna/article/details/111902425