K3数据库表项关系

来源:互联网 发布:ipad怎么在淘宝找微淘 编辑:程序博客网 时间:2024/05/22 14:19

单据模板说明

 

一、单据基础模板

1ICTransactionType:该表反映了供需链所有单据的总体情况。

 

ICTransactionType

FBrNo

保持兼容,未用

FID

单据事务类型内部ID

FRob

红蓝字标记 1表示该单据区分红                                               蓝字 0表示没有红蓝字之分

FName

单据名称

FType

单据类别

FTempalteID

单据模版ID (                              ICTemplate,ICTemplateEntry 表中的FID对应

FVchTempalteID

(未用)

FHeadTable

单据表头对应的数据库表名

FEntryTable

单据表体对应的数据库表名

FCheckPro

二次开发组件

FFormWidth

单据录入时的缺省宽度

FFormHeight

单据录入时的缺省高度

FFixCols

单据的固定列数目(从左到右的锁定)


2ICTemplate:该表反映了所有单据的表头的详细情况。

      

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 FtypeIDt_SubMessageFTypeID)

还有几种不属于以上类型的自定义的类型:

18:批号

13:科目

12:币别

-8:分录审核人

-15:仓位

-17:单据类型

-18:质检方案

-20:部门(车间特殊处理,现已无用)

-24:对应代码

-100:工艺路线

-101BOM调用

-102:生产类型

-103:生产线

-110BOM单组别

-108:虚仓批号

FNeedSave

是否需要保存到数据库中

FValueType

值的类型 0 字符串,1 数字,2 日期,3 整数

FSaveValue

保存值的类型 0 名称,1 内部ID2 代码

前期版本存在类型3,已经没有使用了,应该可以去掉

FFieldName

该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。

 

FLeft

 

该单据头控件的位置

FTop

FWidth

FHeight

FEnable

控件在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0

如:48110000)表示该字段在新增、修改状态下可以录入,其他状态下不可

FPrint

是否打印

FFontName

字体类型

FFontSize

字体大小

FSelBill

如果该控件可以选择其它单据作为数据的输入来源,则该值对应为被选择单据的叙事簿ID

ICListTemplate表中的FID

FMustInput

是否必须录入

FFilter

过滤条件。一般用于选单或查找某类基础资料时过滤掉一些不符合选择条件的单据或基础资料。

FRelationID

表示哪一个字段的改变会导致当前控件值的

改变。它的值为对应字段的数据库字段名。

如有多个这样的字段可以用逗号隔开。

 

FAction

为前面FRelationid定义的字段的改变时该执行什么样的操作。

例如汇率这个字段,它的FRelationIDFCurrencyID FAction.,FExchangeRate

表示当改变币别时,把对应币别的默认汇率

填入汇率栏中。

 

FLockA

1表示选单过来的数据不能再添加删除分录

 

FROB

1 只在蓝字单据中可见,2只在红字单据中可见

3 在红蓝字单据中都可见

 

FDefaultCtl

系统自带控件为1,自定义的为0

FVisForBillType

控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:031

 

FVBACtlType

自定义单据用来区分是什么类型的控件

Frame,Label,Kdtext三种

 

FRelateOutTbl

如果该控件为其它选择类型的属性则为1

表示该字段在当前表中不存在,是属于关联的其他表

例如:销售发票有个客户开户银行账号就是此类

 

FSystemMustInputItem

如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。

 

 

FInEntryForSPrint

连续打印时打印在分录里

 

3ICTemplateEntry:该表反映了所有单据的分录的详细情况。

      

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 FtypeIDt_SubMessageFTypeID)

还有几种不属于以上类型的自定义的类型:

18:批号

13:科目

12:币别

-8:分录审核人

-15:仓位

-17:单据类型

-18:质检方案

-20:部门(车间特殊处理,现已无用)

-24:对应代码

-100:工艺路线

-101BOM调用

-102:生产类型

-103:生产线

-110BOM单组别

-108:虚仓批号

FNeedSave

是否需要保存到数据库中

FValueType

值的类型 0 字符串,1 数字,2 日期,3 整数

FSaveValue

保存值的类型 0 名称,1 内部ID2 代码

FFieldName

该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。

 

FEnable

该分录列在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:04849

 

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。常用值:031

FRelateOutTbl

如果该分录列为其它选择类型的属性则为1

例如:销售发票有个客户开户银行账号就是此类

FSystemMustInputItem

如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。

FStatCount

是否汇总类字段(与FNeedCount类似,但使用于程序内部的拆分、打印、合并打印等处理)

 

 

二、单据选单模板

       1ICSelbills:记录选单关系的表。选单要取得哪些值,这些值是如何而来的,以及需回填到哪个对应的控件里。

      

ICSelbills

FID

单据的模版ID

FFieldName

单据上可以选单的字段的字段名

FDstCtlField

回填的目标字段名

FselType

目标字段的类型:0 表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时薄的过滤条件。

几种特殊处理:

-200-100-50表示排序字段

-1表示不必显示但必须使用的字段

FDK

用于表头控件,表示对于同一个目标字段,该回填值是作为FIDFnameFnumber

0FID   1Fname   2Fnumber

FcolName

源字段的别名

Fname

源字段名

FtableName

源表名

FtableAlias

源表别名

Faction

用于处理一些需对字段值进行判断,或需要在字段之间进行一些运算的情况。

 

注意事项:

单据头的字段如果有选单数据来源,则必须有三行,分别填入对应的ID,名称,代码。如果没有ID,代码,则随便传入一个数。而且这个顺序不能改变。主要处理过程参见:K3Bills.BillSetRelateCtl函数。

 

2ICTableRelation:选单中涉及的所有表之间的连接关系。

 

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时,暂时增加快速模式,标识应用于快速模式的字段,现在已不再使用。

 

三、单据控制

       1ICBillNo

      

ICBillNo

FBillID

单据ID,对应于ICTransactiontype中的FID

FBillName

单据名称

FPreLetter

前缀名

FSufLetter

后缀名

FCurNo

当前单据序号

FFormat

当前序号的格式

FPos

 

 

       2ICMaxNum

      

ICMaxNum

FTableName

表名

FMaxNum

当前最大的FInterID

 

四、单据套打

       1GLNoteType:单据套打表,记录单据与套打编号的关系。

 

GLNoteType

FTemplateID

单据ID,对应于ICTransactiontype中的FTemplateID

FnoteType

单据套打名称

FnoteTypeID

单据套打ID

 

       2GLNoteCitation:单据套打关系表,记录单据套打字段的属性。

 

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:扩展分录

 

       相关说明:FRelationIDFIsEntry不同,FIsEntry是用来在套打定义中区分表头、表体(如:在表头栏里只显示表头字段、表体栏里只显示表体字段),FRelationID是套打在填充数值时,判断字段属性用的。

 

五、问题分析

       单据现有模板存在两个比较大的问题有待改进:

 

       1、模板数据冗余:

当前单据模板的模板数据是对应每一张单存在的,所以有许多相同类型的单据的共有数据被重复使用,如:库存单据的收料仓库、日期、审核、制单、验收、多级审核、记账、保管等等。

由此导致的另一问题就是,用户无法针对每一类型的单据自定义一个字段,例如:用户要自定义一个A字段,应用于所有库存单据,他必须在每一种库存单据上进行自定义才能实现,这也造成的数据表在物理结构上的冗余。

 

       2、选单结构不灵活:

当前单据的选单实现,是一个字段对应一种选单关系,也就是说:一张单如果可以由十张单关联生成,则必须在该单据的物理表上增加十个记录关联关系的字段。无法实现灵活的控制,同时也导致自定义业务流程的无法实现。

 

       3ICTemplate表、ICTemplateEntry表的问题

FCtlIndex字段的用途:lFCtlIndex字段用来标识模板各字段的内部顺序(如:单据中Action的执行顺序)和控件索引,由于此关系存在,导致它的值在同一模板中必须唯一且连续,由此造成维护复杂、繁琐、易出错。

Flookupcls字段的统一:lFlookupcls的来源为t_ItemClasst_SubMessaget_SubMesType,但存在一些没有规范处理的FLookupCls,对程序的统一处理带来问题,也影响了自定义的规范处理

FAction字段的使用:Action的定义和使用,是单据中的核心问题之一,单据界面上的大部分信息处理,都要通过该功能实现。该功能现有的优点是灵活、易维护。但同时也存在一些严重的缺陷:l、执行顺序不易控制,计算容易造成混乱(如:字段在不同情况下的计算问题)。2、公式不够灵活,每有一种处理(特别是计算公式),就要新增一种Action,造成Action过多,不易整理。而且对于同一字段在不同条件下的不同计算公式,必须在程序中作特殊处理,造成控制不统一。

 

             

4、单据选单的关联关系由于是通过程序解析生成,整个生成的SQL语句的执行效率很低,并且有些还使用了非标准的语法(如:*==*)。