一、单据基础模板
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过多,不易整理。而且对于同一字段在不同条件下的不同计算公式,必须在程序中作特殊处理,造成控制不统一。