金蝶 K3 供应链单据开发手册

更新时间:2024-05-31 06:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

供应链开发帮助手册

?金蝶软件(中国)有限公司研发中心K/3供应开发组解释

目录

? K/3老单单据平台开发手册 ......................................... 5

?

整体框架和设计思路 ....................................................................................................... 5

一、 设计思路 ........................................................................................................... 5 二、 UML图 ................................................................................................................ 5 模版 ................................................................................................................................... 6 一,单据构造模版: ....................................................................................................... 7 二、选单模版 ................................................................................................................. 11 三,单据控制 ................................................................................................................. 12 四,单据套打 ................................................................................................................. 13 单据调用接口 ................................................................................................................. 14 一、 客户端调用接口 ............................................................................................. 14 二、 中间层调用接口 ............................................................................................. 16 单据流程 ......................................................................................................................... 17 一、 新建单据流程 ................................................................................................. 17 二、 查看或修改单据流程: ................................................................................. 18 三、 录单流程: ..................................................................................................... 20 四、 单据的保存流程 ............................................................................................. 25 五、 对下一版本的一些建议 ................................................................................. 27 单据选单的实现说明 ..................................................................................................... 28 一,实现思路: ............................................................................................................. 28 二,实现方式: ............................................................................................................. 28 单据模板Action说明文档 ........................................................................................... 30 一、 概述 ................................................................................................................. 30 二、 关键词 ............................................................................................................. 30 三、 分类 ................................................................................................................. 30 四、 功能标准定义 ................................................................................................. 30 五、 标准过程指南 ................................................................................................. 34 单据打印、连续打印、合并打印实现说明 ................................................................. 34 一、 GUI上单据打印的实现方式: ...................................................................... 34 常见问题分析 ................................................................................................................. 35 一、 对于KDInputTool.DLL组件的日期控件的日期格式 ................................. 35

?

?

?

?

?

? ?

二、 三、 四、 五、 六、 ? ? ? ? ? ? ?

对于Spread控件的取值赋值 ....................................................................... 35 模板数据冗余: ............................................................................................. 36 选单结构不灵活: ......................................................................................... 36 ICTemplate表、ICTemplateEntry表的问题 ............................................. 36 单据选单的关联关系: ................................................................................. 36

? 单据二次开发手册 ............................................... 37

属性 ................................................................................................................................. 37

方法 ................................................................................................................................. 38 用户可实现自己功能的事件 ......................................................................................... 39 中间层事件 ..................................................................................................................... 42 应用示例 ......................................................................................................................... 43 整体框架和设计思路 ..................................................................................................... 47 模版 ................................................................................................................................. 47 一、 ICListTemplate:该表反映了供需链所有序时簿的总体情况。 ............. 47 二、 ICChatbilltitle:该表反映了所有序时簿的显示的字段详细情况。 ... 48 三、 ICListToolbar:该表反映了序时簿菜单和工具栏详细情况。 ............... 49 四、 ICTableRelation:选单中涉及的所有表之间的连接关系。 ................... 49 接口函数描述 ................................................................................................................. 50 一、 相关组件 ......................................................................................................... 50 序时簿二次开发 ............................................................................................................. 50 一、 创建一个中间层组件,实现一个接口 ......................................................... 50 二、 注册组件 ......................................................................................................... 51 常见问题分析 ................................................................................................................. 52 一、 模板数据冗余: ............................................................................................. 53 二、 序时簿几种状态 ............................................................................................. 53 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。 流程 ................................................................................................................................. 98 表结构 ............................................................................................................................. 98 代码结构 ....................................................................................................................... 118 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。 盘点作业 ....................................................................................................................... 121

? K/3序时簿开发手册 .............................................. 47

? ?

?

? 采购价格管理开发手册 ........................................... 53

? ? ? ? ? ? ? ? ? ? ? ? ?

? 销售价格/折扣管理开发手册 ...................................... 56

? 进出口开发手册 ................................................. 98

? 发票钩稽开发手册 .............................................. 118

? 盘点开发手册 .................................................. 121

? ? ? ? ? ? ? ? ?

盘点方案查询 ............................................................................................................... 122 盘点方案新建 ............................................................................................................... 123 盘点方案删除 ............................................................................................................... 123 备份盘点数据 ............................................................................................................... 124 盘点数据引入/引出 ..................................................................................................... 126 盘点选单 ....................................................................................................................... 126 生成盘点单据 ............................................................................................................... 126 流程 ............................................................................................................................... 128 表结构 ........................................................................................................................... 128 一、 序列号流转表ICSerialFlow表结构: ..................................................... 128 二、 序列号表ICSerial ...................................................................................... 129 三、 ICSerial_FXXX ............................................................................................. 130 基本操作 ....................................................................................................................... 130 一、 新增单据 ....................................................................................................... 130 二、 审核单据: ................................................................................................... 131 三、 删除单据: ................................................................................................... 131 四、 作废单据: ................................................................................................... 131 五、 更新库存后序列号状态单据类型对应表: ............................................... 132 代码结构 ....................................................................................................................... 132 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。 表说明 ........................................................................................................................... 147 算法说明 ....................................................................................................................... 147 代码结构 ....................................................................................................................... 148 一,所有计价方法的入口函数: ............................................................................... 148 二,每一种计价方法的处理逻辑: ........................................................................... 148 核算常见问题汇总 ....................................................................................................... 151 出库核算核算报错问题 ............................................................................................... 152 表说明 ........................................................................................................................... 154 凭证模版 ....................................................................................................................... 158 代码结构 ......................................................................................... 错误!未定义书签。 凭证常见问题说明 ....................................................................................................... 178 流程 ............................................................................................................................... 182 表结构 ........................................................................................................................... 187

? 序列号开发手册 ................................................ 128

?

? ? ? ? ? ? ? ? ? ?

? 入库核算开发手册 .............................................. 132

? 委外核销开发手册 .............................................. 141

? 出库核算开发手册 .............................................. 147

?

? ? ? ? ? ? ?

? 凭证开发手册 .................................................. 154

? 分销开发手册 .................................................. 182

? ? ? ? ? ? ? ? ? ? ? ? ?

代码结构 ....................................................................................................................... 192 流程 ............................................................................................................................... 197 表结构 ........................................................................................................................... 197 代码结构 ....................................................................................................................... 197 流程 ............................................................................................................................... 197 表结构 ........................................................................................................................... 197 简介: ........................................................................................................................... 202 主要函数: ................................................................................................................... 202 处理过程顺序图: ....................................................................................................... 203 代码结构 ....................................................................................................................... 204 流程 ................................................................................................. 错误!未定义书签。 表结构 ............................................................................................. 错误!未定义书签。 代码结构 ......................................................................................... 错误!未定义书签。

? 门店开发手册 .................................................. 197

? 销售前台开发手册 .............................................. 197

? 工业报表开发手册 .............................................. 202

? 门户报表开发手册 .............................................. 204

? VB编程经验总结开发手册 ........................................ 207

? VB中精确数据的四舍五入处理 .................................................................................. 207 ? 假设VB中有如下的变量声明: ................................................................................. 208 ? VB中的对象是自动回收的,类似java ..................................................................... 208 ? 对对象变量赋值应该用 set obj = AnOtherObj 这种方式 ................................... 209 ? VB中字符串的内部存储格式是Unicode,它可以自动转化为ANSI字符(单字节字符)或者 DBCS 字符(双字节字符) ............................................................................... 209 ? 字符串的比较应该是用 strCmp 函数,而不是简单的用 = 号 ............................. 209 ? VB中字符串处理的函数有三种版本: ...................................................................... 210 ? VB程序代码中的以下标识符不能含有双字节字符: .............................................. 211

? K/3老单单据平台开发手册

? 整体框架和设计思路

一、 设计思路 二、 UML图

主控台 : KdMain : 操作员单据K3Bills : .Bill单据显示 : .frmBill中间层模版K3MBillsPack...中间层单据保存BillDataAcces...中间层KMCheckBill : CheckNow1: CallBill( )2: Show( )用户新增单据显示单据界面3: Show( )4: BuildBill( )创建单据头和体5: GetBillTemplatePackage( )读取模版数据6: 用户录入单据数据7: DoAction( )触发相关Action8: mnuFileSave_Click( )用户保存单据9: CheckMustInput( )数据检查10: SaveBillEx( )调中间层保存单据11: mnuViewCheck_Click( )用户审核单据12: CheckBill( )13: CheckBill( )调用中间层审...

? 模版

单据主要是在模版的基础上实现的。单据的模版有以下几张表:ICTransactionType,ICTemplate,ICTemplateEntry,ICSelBills,ICTableRelation。前三张表用于构造显示单据,后两张表用于选单。

一,单据构造模版:

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

ICTransactionType FbrNo FID FROB Fname Ftype FtempalteID FvchTempalteID FheadTable FentryTable FcheckPro FformWidth FformHeight FfixCols

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

ICTemplate FID FctlIndex FtabIndex Fcaption Fctltype 单据模版ID 表头控件编号,连续且唯一 控件的Tab跳动次序 控件标题 控件类型 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自定义单据使用的整数类型 如为查找类型 则与表t_ItemClass(核算项目表)中的FItemClassID对应。或者为辅助资料的ID (t_submestype 中的FtypeID) 单据事务类型内部ID 红蓝字标记 :1表示该单据区分红 蓝字 ,0表示没有红蓝字之分 单据名称 单据类别 单据模版ID ICTemplate,ICTemplateEntry 表中的FID对应 (未用) 单据表头对应的数据库表名 单据表体对应的数据库表名 (未用) 单据录入时的缺省宽度 单据录入时的缺省高度 单据的固定列数目 (与

FlookUpCls FneedSave FvalueType FsaveValue FfieldName 是否需要保存到数据库中 值的类型 0 字符串,1 数字,2 日期,3 整数 保存值的类型 0 名称,1 内部ID,2 代码 该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。 该单据头控件的位置 Fleft Ftop Fwidth Fheight Fenable 控件在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:0、32、48。 是否打印(暂未用) 字体类型 字体大小 如果该控件可以选择其它单据作为数据的输入来源,则该值对应为被选择单据的叙事簿ID (ICListTemplate表中的FID) 是否必须录入 过滤条件。一般用于选单或查找某类基础资料时过滤掉一些不符合选择条件的单据或基础资料。 表示哪一个字段的改变会导致当前控件值的 改变。它的值为对应字段的数据库字段名。 如有多个这样的字段可以用逗号隔开。 为前面Frelationid定义的字段的改变时该执行什么样的操作。 例如汇率这个字段,它的FrelationID为FcurrencyID ,Faction为 “.,FExchangeRate” 表示当改变币别时,把对应币别的默认汇率 填入汇率栏中。 为1表示选单过来的数据不能再添加删除分录 1 只在蓝字单据中可见,2只在红字单据中可见 3 在红蓝字单据中都可见 系统自带控件为1,自定义的为0 控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。 Fprint Ffontname FfontSize FselBill FmustInput Ffilter FrelationID Faction FlockA FROB FdefaultCtl FvisForBillType FVBACtlType 自定义单据用来区分是什么类型的控件 有Frame,Label,Kdtext三种 如果该控件为其它选择类型的属性则为1 例如:销售发票有个客户开户银行账号就是此类 如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。 FrelateOutTbl FSystemMustInputItem

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

ICTemplateEntry FID FctlOrder FctlIndex Fctltype 单据模版ID 分录列的排列前后顺序 分录列编号,连续且唯一 分录列类型 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自定义单据使用的整数类型 FlookUpCls 如为查找类型 则与表t_ItemClass(核算项目表)中的FItemClassID对应。或者为辅助资料的ID (t_submestype 中的FtypeID) 是否需要保存到数据库中 值的类型 0 字符串,1 数字,2 日期,3 整数 保存值的类型 0 名称,1 内部ID,2 代码 该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。 该分录列在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:0、48、49。 FneedSave FvalueType FsaveValue FfieldName Fenable Fprint FheadCaption Fwidth FneedCount FrelationID 是否打印该列(暂未用) 该分录列的表头标题 该分录列的宽度 该分录列是否需要合计,1:需要 0:不需要 表示哪一个字段的改变会导致当前列值的 改变。它的值为对应字段的数据库字段名。 如有多个这样的字段可以用逗号隔开。 为前面Frelationid定义的字段的改变时该执行什么样的操作。 例如金额这个字段,它的FrelationID为“FauxQty,FAuxPrice” ,Faction为“(),FAuxQty,*,FAuxPrice” 表示当数量或单价改变时,计算数量与单价的乘积,并填入金额列中。 是否必须录入 过滤条件。一般用于查找某类基础资料时过滤掉一些不符合选择条件的基础资料。 该列值的保存规则,例如“U:0”表示该列的值不能为0。 系统自带分录列为1,自定义的为0 该列在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。 Faction FmustInput Ffilter FSaveRule FdefaultCtl FvisForBillType FRelateOutTbl 如果该分录列为其它选择类型的属性则为1 例如:销售发票有个客户开户银行账号就是此类 如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。 FSystemMustInputItem

单据构造模版的基本用途是:根据要显示哪一种单据,首先去ICTransactionType表中获取该种单据的总体信息,包括表头模版号、分录模版号、单据宽高等等。然后根据表头模版号去查表头模版ICTemplate,构造该种单据的表头,根据分录模版号去查分录模版ICTemplateEntry,构造单据的分录。

函数:Bills.SetPropDesc

FSaveRule说明: 操作符 功能 例子 备注

EshowType:单据的状态

Public Enum Enu_ShowBillType Showinput = 0 录入 Showedit = 1 修改 Showview = 2 查看 Showcheck = 3 审核 showconvey = 4 生产订单下达 End Enum

二、 中间层调用接口

? 组件

BillDataAccess.SaveData

? 方法

SaveBillEx(ByVal sDsn As String, ByVal BillVect As KFO.Vector) As Object

? 参数

sDsn:连接字符串

BillVect:KFO.Vector的对象,对象包含多少个元素可由Size()方法获得。第一个元素为KFO.Dictionary对象;第二个元素为KFO.Vector对象,保存二次开发组件传递的信息。

对于第一个元素,其中保存着单据的一些基本信息,相应的关键字见下面说明: TransType:单据类型,为long型

BillInterID:单据内码,新增单据时为0,为long型 IsROBBill:单据是否区分红蓝单,为boolean型 IsRedBill:单据是否为红单,为boolean型

TableHeadName:单据表头对应的物理表名,为string型 TableEntryName:单据表体对应的物理表名,为string型 AutoBillNO:系统自动生成的单据编码,为string型 BillNo:单据编码,为string型

BillNoFldName:单据编码对应的物理字段名,为string型

IsAppendItemBill:单据能否追加物料,为boolean型,默认值为False EntryKeyWord:分录关键字,为string型

UserID:操作者ID,为long型,默认值为16394 UserName:操作者名称,为string型

AppendItem:是否追加了物料,为boolean型 SplitBill:是否拆单,为boolean型 AcctName:帐套名称,为string型

CurBillUpStockWhenSave:保存库存单据时,是否更新库存,为long型,0表示否,从已有单据的FUpStockWhenSave字段获得,默认为0。。 IgnoreCredit:是否进行信用控制,为boolean型,默认值为True

EntrySQL:单据体数据的SQL语句的数组,记录单据保存时,提交的数据库更新SQL语句,为单据体SQL,为Variant型

HeadSQL:单据头数据的SQL语句,记录单据保存时,提交的数据库更新SQL语句,为单据头SQL,为string型

JustForAccInput:成本核算系统单据调用时的特殊控制参数,用来控制保存和界面处理。Boolean型

ReSave:重新保存单据时的状态,每个字位代表一个意思,为long型,中间层若取不到值,默认值为7。 1:表示忽略负库存、2:忽略库存警告、4:忽略锁库检查、8:忽略所有检查

? 返回值: 为KFO.Dictionary对象,相应的关键字见下面说明: Success:保存是否成功,为boolean型

RetCode:返回的代码值,为long型。3:信用提示、2:最高最低库存提示、1:负库存提示、-200:锁库物料为负库存、-201:库存数不足以锁库、-204:销售最低限价提示、-205:采购最高限价提示 ReturnMsg:返回的信息,为string型 BillInterID:单据内码,为long型 ReturnBillNo:单据编码,为string型 CheckItemInfo:超出最高最低安全库存时存储相应的物料,为KFO.Vector对象

? 单据流程

一、 新建单据流程

新建单据时,首先设置单据的属性值(包括RemoteCnn、LocalCnn、SetOpt、TheSaleMode、ShowForModeExt、NewBillTransType),然后再调用过程Public Sub Show( ByVal eBillCls As Enu_BillCls, ByVal eShowType As Enu_ShowBillType),显示想要新建的某种单据,对于新建单据,参数eShowType应传值为0。

过程Show通过激发窗体frmBill的Form_Load()事件,显示新建的单据样式。 Form_Load()事件主要完成以下操作: 1. 调用函数FillBillTypeCtl(ByVal ctl As Object, Optional ByVal transtype),从

表ICTransactionType中取出新建单据类(可能包括多种单据)的基本属性值,包括单据名称、单据模版号、单据对应的数据库表名、单据窗体宽高等等。将每种单据的属性值拼成一个字符串,作为cmbTransType(comboBox控件)的一个列表值,依次添加到cmbTransType中。

2. 激发cmbTransType的cmbTransType_Click ()事件,根据当前cmbTransType

的列表值,取出该种单据有关属性值,设置窗体的宽高及固定列,再由该属性列表值通过调用过程BuildBill(ByVal strTemplateID As String)建立整张单据(包括单据头及单据分录)。

3.

设置菜单及工具条的Visible以及Enabled属性。

4.

过程BuildBill(ByVal strTemplateID As String)是构建单据的关键。它完成以下操作:

1. 根据传过来参数strTemplateID取得单据模版号、单据表头对应的数据库表名、

单据分录对应的数据库表名、单据事务类型内部ID。

2. 根据单据模版号,从表ICTemplate中取得表头模版,从表ICTemplateEntry中取

得分录模版。

3. 根据分录模版,调用过程BuildEntryCtls()构造单据的分录。

4. 根据表头模版,调用过程BuildHeadCtls()构造单据的表头。

过程BuildEntryCtls(rsTmpEntry As ADODB.Recordset)完成单据分录的构造工作,参数rsTmpEntry是从ICTemplateEntry取出的一个记录集,它反映了该单据所有分录列的属性值,也就是该单据的分录模版。该过程主要是将分录模版信息存储在分录属性数组TentryCtl中,并根据这些模版信息去设置单据分录的列数、列宽、列标题、数据类型等属性。

过程BuildHeadCtls(Rstmp As ADODB.Recordset)完成单据头的构造工作,参数rsTmp是从ICTemplate取出的一个记录集,它反映了该单据所有表头的属性值,也就是该单据的表头模版。该过程主要是将表头模版信息存储在表头属性数组THeadCtl中,并根据这些模版信息去设置单据表头控件的大小、位置、标题、数据类型等属性。

设置套打的本地、远程的连接属性,以及套打模版号。

二、 查看或修改单据流程:

对于由报表或序时薄进入单据,首先设置单据的属性值(包括RemoteCnn、LocalCnn、SetOpt、TheSaleMode、ShowForModeExt、NewBillTransType,以及ListRecordset、ListRSFieldVect),然后再调用过程Public Sub Show( ByVal eBillCls As Enu_BillCls, ByVal eShowType As Enu_ShowBillType),显示想要修改的某种单据。如果是修改单据,参数eShowType传值为1;如果是查看单据,参数eShowType传值为2。

查看或修改单据的主要操作也是在窗体frmBill的Form_Load()事件中完成。流程如下:

调用过程MoveBill取得显示单据的事物类型和单据内码

调用函数FillBillTypeCtl新建一张同种事务类型的空白单据(其过程与新建单据一样)

函数Public Function FillBillData(ByVal InterID As Long, ByVal transtype As

Integer) As Integer完成将某张单据数据填入空白单据的操作,参数InterID指该张单据的内码,参数transtype指该张单据的事物类型。这两个参数可确定唯 一一张单据。FillBillData的流程如下: 根据单据内码以及单据表头对应的数据库表名,取得单据表头信息记 录集。

逐个读取该记录集,将其数据填入相应的表头控件中以及表头控件数组THeadCtl中 通过单据内码以及单据分录对应的数据库表名,取得单据分录信息记录集。 逐个读取该记录集,将其数据填入相应的分录列中以及分录控件数组TEntryCtl中

三、 录单流程:

在录单的过程中,表头控件及分录列都设置了一定的属性,即只能录入特定的数据。对于基础资料和选单,都有两种录入方式:按F7或F8选取或手工直接录入。其它的如数量、单价、单据号码等,就只能手工录入。

过程Private Sub LookUp(Optional ByVal bQuickView As Integer = 1)实现了按F7或F8键查看并选取某项基础资料数据的功能。参数bQuickView=0表示是查看基础资料详细的树状图,对应的是F7键;bQuickView=1表示是查看基础资料编码列表,对应的是F8键。LookUp的主要流程如下:

退出 当前活动控件查看类型 按F7或F8查看 选单 根据选单模版及当前控件的过滤条件构造选单序时薄过滤条件 基础资料 设置过滤条件,并根据基础资料查看类别显示相应的基础资料查看窗体 由选单序时薄模版号及过滤条件调用序时薄,显示选单序时薄 否 返回时选中某一条基础资料 在序时薄上选中了一条以上的记录 是 取得返回的InterID、Name、Number等信息,并将其值赋与当前活动控件 是 否 退出

或超出了也继续保存 是 否 对于有分录的单据,检查分录是否录入了数据 是 将表头模版数组TheadCtl、分录模版数组TentryCtl及分录数据、其它相关数据打成一个包 退出

将这个包传给中间层,由中间层根据模版及数据构造相应的SQL语句,执行后将该张单据保存到数据库对应的表中 否 是发票单据 保存完毕 是 将发票传递到应收应付系统 保存完毕

(2) 单据的审核、下达

在单据录入或修改完成以后,可在单据界面直接完成审核与反审核,下达与反下达,结案与反结案的操作(发票除外)。这些操作都是调用中间层K3McheckBill.DLL实现的,具体的操作可参看类K3MCheckBill.CheckNow中的函数CheckBill()的说明。

在单据审核或下达完毕以后,要调用过程InitMenuAndBar(),使某些菜单、控件锁定或解锁,以控制输入。

五、 对下一版本的一些建议

1. 在本版中,因为生产任务单没有分录,所以很多地方需要进行特殊处理。

在下一版中,所有单据都有分录,故可去掉对生产任务单的特殊判断。

2. 单据选单时,加入过滤条件及排序条件,便于快速查找。可考虑做成一个

通用过滤排序条件,对所有选单起作用(主要是日期过滤排序)。

3. 本版中,审核、下达两种单据显示状态都未用上,单据的修改界面上就可

进行审核或下达。下一版中可考虑去掉审核、下达两种单据状态。同时将ShowForModeExt和ShowBillType合并,单据显示类型有以下四种:

(1).Showinput = 0 录入 (2).Showedit = 1 修改 (3).Showview = 2 查看

(4).ShowForPriceCal=3 核算时单据的单价金额修改

4. 目前单据的DoAction较混乱,有的功能定义比较不通用,或功能不够强大

(如表头和分录之间的关联动作较欠缺)。下一版中可改造过程DoActions()和DoAction(),以及模版ICTemplate和ICTemplateEntry中的Action和RelationID字段,定义更具通用性的动作关联,以便于自定义。还可加入一个是否使用公式选项,以控制某些关联动作。

5. 目前单据较慢,一个主要原因是较多的调用了中间层。下版中应尽量减少

中间层的调用次数,或将调用合并。

6. 改造单据保存的逻辑控制。单据构造时,从中间层取得模版,保存单据时,

又将该模版传回中间层,显得有些冗余。对于数据的合法性校验,一般都是在客户端做的,中间层做的极少。可考虑加强中间层的数据校验功能。

7. 自定义单据中,应加入一个恢复功能,即当用户的自定义操作影响到现有

单据的正确性时,可快速恢复原单模版。这样用户也可放心使用。

? 单据选单的实现说明

选单生成是指从已有的一张单生成另一类型的新单的过程。

一,实现思路:

通过模板方式实现,模板记录源单的表、字段,和与新单之间的字段对应关系,以及其他要用到的信息。通过模板记录的源单的表字段信息,构建源单数据记录集;通过字段对应关系信息,可以确定源单数据记录集中的字段与新单字段的对应关系,并通过这种对应关系回填单据。

二,实现方式:

1) 建立选单关系模板 选单模板包括ICSelBills,ICTableRelation两张表。 1、ICSelBills:

记录源单和新单之间的字段对应关系和要使用的关键字段。一种选单关系可以根据单据模板(ICTemplate)的FID和FFieldName来确定:FID表示新单的模板号,FfieldName表示源单(具体表示是那种单由FselBill字段的内容确定,参见:单据模板说明文档)。选单关系的具体内容就由ICSelBills来记录,由ICSelBills的FID、FfiledName确定。对于一个新增的选单结构,以下几个字段是必须的:

FselType -200 -100 -1 -1 -1 -1 -1 FDK -1 -1 -1 -1 -1 -1 -1 FcolName FInterID FEntryID FQtyDecimal FPriceDecimal FTrack FItemID FBillNO FName FTableName FTableAlias

具体的FID,FfieldName,FName,FtableName等其他信息可根据实际情况填写。对于FtableAlias模板规定主表使用v1,从表使用u1,t_ICItem使用t4。单据头的字段如果有选单数据来源,则必须有三行,分别填入对应的ID,名称,代码。如果没有ID,代码,则随便传入一个数。而且这个顺序不能改变。对于表体的字段,如果是查找类型,也必须有三行,分别填入对应的ID,名称,代码。

2、ICTableRelation:

记录ICSelBills中某一选单关系中有关联关系的表的关联信息。具体内容由FbillID(与FID相同)、FfieldID(与FfieldName相同)确定。需要具体说明的是,表示关联方式的字段Flogic使用的是“=*”、“*=”来表示右连接、左连接。例如:发票选定单

的选单关系中,主表和从表是通过FInterID关联的,则可添加记录 FtableName POOrder 2)

FtableNameAlias V1

选单关系模板结构参见:单据模板说明文档

二、调用单据组件接口,生成新单据 调用接口如下:

LocalCnn属性(String):连接本地数据库的连接字符串,主要用于单据套打。 SystemName属性(String):当前调用单据的系统。 采购:\

销售:\计划:\

车间:\仓存:\核算:\

SetOpt(用户ID,用户名称)方法:设置当前的操作员,两个参数用户ID和用户名称。 BuildFromSelBill属性(Boolean):表明当前单据的生成方式。为真表明单据是选单生

FfieldName FtableName11 FtableNameAlias11 U1 FfieldName11 FLogic FBillID FFieldID FInterID POOrderEntry FInterID = I02 FOrderInterID 成 SelBillVect属性(KFO.Vector):当BuildFromSelBill为真时,传递单据的必要参数。该参数的结构如下:该Vector包括三个Item,第一个是字符型,为当前单据的模板号,即ICTransactionType中的FTemplateID;第二个是字符型,为当前单据的选单号,即上述关系模板中(ICSelBills表)中的FfieldName对应的值。第三个是一个Vector,是包含分录信息的集合:必须包含至少两个信息,FInterID、FentryID,该信息用kfo.Dictionary保存并打包到Vector中。 BillROB属性(长整型):表示当前单据是红单还是兰单,1表示兰单,-1表示红单,默认是兰单 NewBillTransType属性(字符型):为要生成单据的事物类型,即ICTransactionType中的FID。 Show(ByVal eBillCls As Long, ByVal eShowType As Long)方法:该方法根据上面的参数设置,调起单据界面。EBillCls为要生成的单据的类型ID,即ICTransactionType中的Ftype;EshowType为单据的显示方式,0 – 新增、1 – 修改、2 – 查看、3 – 审核、4 – 下达、5 – 作废、6 – 关闭。这里一般使用0。 BillValueChanged属性(Boolean型):在单据调用完成后,返回单据是否更新的标志,为true时,表示当前单据修改保存成功 BillInterID属性(长整型):单据完成之后,获取当前单据的数据的InterID。

3) 三、ICSelBills的特殊使用方式 参见“通过记录集直接调用单据接口生成单据”说明文档

4) 四、增加一套选单的模板例子

增加一套选单的例子.sql

5) 五、改进

v10增加了旧单据选单对新单据的支持,参看文档

E:\\物流系统部\\工业供需链项目组\\技

? 单据模板Action说明文档

一、 概述

介绍单据Action实现的方式以及各种Action的说明。

二、 关键词

单据、模板。

三、 分类

四、 功能标准定义

一、Action的实现方式 与Action的应用相关的字段FCtlIndex、FRelationID 由FCtlIndex定义了Action的执行顺序, 通过访问FRelationID确定需要执行Action的字段,然后调用DoAction函数执行相关字段的Action。 对于一些需要关联计算的字段,大致有两种情况:一、如供应商改变,要改变携带的单价,而单价的改变又要影响金额。二、如单价改变影响金额,而金额的改变又要影响税额。对于第一种情况,第一项(供应商)和第三项(金额)没有必然的联系,只有在携带单价后,再次调用DoActions,进行计算。对于第二种情况,可以使用变通的方法,如:将税额的计算公式改成由金额的计算公式所涉及到的字段来计算,而不是直接使用金额进行计算。 关于rsItem:rsItem属性是在对当前触发字段进行校验时(即GetData中)生成的

临时属性记录集,然后在随后的DoAction中使用,并在DoActions中(GetData结束前)清空。

二、Action介绍 类别 标准过程 ―.‖ 备注 携带一般附属信息,后面跟的是要携带信息在记录集rsItem中的字段名。 触发的条件是:触发字段的rsItem属性不为空。然后,读取该Action记录的值。如:当FItemID触发时,对于字段FItemName的值就是直接在记录集rsItem中取Faction对应字段的值。 设置仓位的信息,格式为“.A1,FDCStockID,FSPID,t_StockPlace,FSPID“ 处理物料默认仓位的携带。 FDCStockID:获取仓库信息,控制物料设置的默认仓库和单据录入的仓库是否一致。 FSPID:获取物料信息(t_ICItem)的默认仓位信息 t_StockPlace:当前FSPID取数的关联表 FSPID:当前关联表的关键字,用于FSPID的过滤 设置物料是否进行批次管理。格式为“=,Ftrack,80” 录入物料或仓库时若物料的仓存和默认仓库不一致时报警提示。格式为:“B*,FDCStockID” 当数据改变时,更改对应的基本数据。一般格式为:“A1,FAuxQty”,A1后面跟的就是改变的数据对应的字段名。 设置是否允许录入生产/采购日期 设置是否允许录入保质期 如果用户自定义的取数是核算项目的自定义字段或自定义核算项目的自定义字段,单据模版的Action要用.A3规则。规则:.A3,主表ID的值,关联表1,关联表1的Key,关联表1与关联表2的连接字段,关联表3,关联表3的关键字。 两种情况分别是:固定核算项目的自定义属性是取核算项目或辅助资料(从t_itempropdesc中可以查到他的取数的关联表);自定义核算项目的自定义字段。 .A1 = B* A1 KFDate KFPeriod .A3 三、举例说明: 1.表头仓库发生改变:(10.2中表头仓库移到表体) 顺序 Action 说明 1 2 3 4 1 2 3 B* .B,FEmpID,t_Emp .A1,FDCStockID,FSPID,t_StockPlace,FSPID .A,FStockPlaceID,t_stockplace,fspid 2.物料发生改变 检查仓库和物料默认仓库是否一致 将仓库的默认保管等填充到表尾的“仓管” 将仓库的默认仓位携带出 带关联附属信息 顺序 Action #,FDCStockID,FItemID,FBatchNo,FAuxQty,FUnitID . B*,FDCStockID P*,FSupplyID,FCurrencyID,FExchangeRate,FItemID,FUnitID,FAuxQty,FAuxPrice,FTaxRate .,Fname .,Fmodel .,FPlanPrice !,FAmount,/,FAuxQty =,Ftrack,80 .,FUnitName,FUnitID A1,FAuxQtyMust A1,FAuxQty,FQty P*,FSupplyID,FCurrencyID,FExchangeRate,FItemID,FUnitID,FAuxQty,FAuxPrice,FTaxRate .,FPlanprice (),FAuxQty,*,FAuxPlanPrice KFDate .,FKFDate KFPeriod .,FKFPeriod .A1,FDCStockID,FSPID,t_StockPlace,FSPID .A,FStockPlaceID,t_stockplace,fspid MI MI .,FMapName .,FIsSNManage .,FSecUnitName,FSecUnitID .,FSecCoefficient 说明 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

设置仓位信息 五、 标准过程指南

(1)需求分析

1.标准 2.范例 (2)设计编码

1.标准 2.范例 (3)测试

1.标准 2.范例

? 单据打印、连续打印、合并打印实现说明

一、 GUI上单据打印的实现方式:

1、标准打印:

使用Ledger控件的Printer实现。 实现思路:

1、设置Ledger控件的属性,直接设置表头的数据。 2、调用Ledger的预览功能,使用Ledger的FillRow事件填充数据。 实现:

1、调用PrintBills函数,该函数对当前单据上的表头数据,区分头数据(Header)和脚数据(Footer),按每一数据的Top,Left排序,分别赋值给Ledger.Printer.Header和Ledger.Printer.Footer,同时设置分录的数量(Ledger..Face.Rows)。

2、直接调用Ledger.Printer.Preview,或Ledger.Printer.PrintDirect进行打印预览或打印,控件将触发Ledger_FillRow事件,在该事件编写代码填充分录数据。 2、套打: 使用Note控件实现。 实现思路: 1、使用套打文件。 2、在预览或打印时,使用Note的QueryData事件填充数据。 实现: 1、在Form_Load事件中初始化Note控件,为其设置套打文件。

2、预览或打印时,执行Note.Action= KN_PrintPreview或Note.Action= KN_PrintDirect动作,显示或打印套打文件。此时将触发QueryData事件,根据该事件返回的参数,填充套打数据。 3、连续打印 4、合并打印

? 常见问题分析

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

一、 对于KDInputTool.DLL组件的日期控件的日期格式

\The one- or two-digit day. \The two-digit day. Single-digit day values are preceded by a zero. \\The full weekday name. \The one- or two-digit hour in 12-hour format. \The two-digit hour in 12-hour format. Single-digit values are preceded by a zero. \The one- or two-digit hour in 24-hour format. \The two-digit hour in 24-hour format. Single-digit values are preceded by a zero. \The one- or two-digit minute. \The two-digit minute. Single-digit values are preceded by a zero. \The one- or two-digit month number. \The two-digit month number. Single-digit values are preceded by a zero. \\The full month name. \The one-letter AM/PM abbreviation (that is, AM is displayed as \\The two-letter AM/PM abbreviation (that is, AM is displayed as \\The last two digits of the year (that is, 1996 would be displayed as \\The full year (that is, 1996 would be displayed as \

二、 对于Spread控件的取值赋值

1、取值:Spread取值必须使用Variant变量进行GetText读取 2、Spread的赋值,必须格式化成对应的数据类型,才能成功赋值 对于日期赋值,建议使用value,使用MMDDYYYY的格式进行赋值,这样就算系统改变了日期格式,Spread显示的会和系统一致。如果使用Text进行日期赋值,必须保证当前单元格的日期格式设置要和Text所赋值的日期格式一致,否则会错误。

Date \10/29/2001\\10292001\

When setting, provide date value as \

三、 模板数据冗余:

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

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

四、 选单结构不灵活:

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

五、 ICTemplate表、ICTemplateEntry表的问题

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

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

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

六、 单据选单的关联关系:

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

? 单据二次开发手册

概述

单据二次开发是针对现目前单据的一些功能无法满足一些客户的特殊要求,同时分公司又有能力进行二次开发而提出的,这样既可以在现有的系统不做变动的情况下面满足用户的需求,同时也增强了系统的稳定性。

注意:本篇所介绍所用到的动态连接库名为:K3BillTransfer.dll 通过该说明文档,你可以了解到

1. 如何通过K3BillTransfer组件在录单过程中对单据上各项目加以控制。 2. 如何通过K3BillTransfer组件实现自定义功能菜单。 3. 如何通过K3BillTransfer组件控制数据的保存。 4. 应用示例。

该文档阅读的适用对象

需要在K/3工业供需链系统单据上进行二次开发的开发者。

? 属性

1.Property Cnnstring As String

当前数据库的MMTS.PropsString连接串。 2.Property SystemName As String 当前系统名称。

3.Property LastInfo As String 最后一次系统返回的各种信息 4.Property BillForm As Object

整个单据窗体对象。可通过该对象访问单据上的任何一个对象,包括控件,菜单。 共有的方法有:InsertRow(),在Grid的当前行追加一行,它没有参数。 5.Property BillFunc as Object 代表单据对象。目前没什么用途。 6.Property Head As Object

单据表头控件,是一个KDText控件数组

7.Property Grid As Object

单据分录控件,为FpSpread控件

8.Property SumGrid As Object

单据分录合计控件, 为FpSpread控件 9.Property HeadCtl As Variant

对应表头控件数组,记录每个表头项目各属性的数组

如果要改变HeadCtl中的某个属性值,需先对HeadCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给HeadCtl。 10.Property EntryCtl As Variant

对应分录各列,记录每个分录列各属性的数组

如果要改变EntryCtl中的某个属性值,需先对EntryCtl做一个备份,然后修改此备份的相应属性值,再将此备份赋值给EntryCtl。 11.Property SaveVect As KFO.Vector

二次开发外部数据存取接口。在录单过程中,用户可将某些数据保存在此Vector中,在单据保存时,再通过二次开发中间层组件,将此Vector中的数据保存到指定位置。 SaveVect.Item(1) 为一个KFO.Dictionary对象 该对象包含以下四个系统数据

SaveVect.Item(1).Value(\:单据内码

SaveVect.Item(1).Value(\:单据事务类型 SaveVect.Item(1).Value(\:是否红字单据 SaveVect.Item(1).Value(\:是否审核。

? 方法

1.Function AddUserMenuItem(ByVal Caption As String, [ByVal RootMenuCaption As String = \ 说明:

添加一个用户自定义菜单项,系统一共预设了五个菜单项供二次开发使用 参数:

Caption:菜单名称

RootMenuCaption:根菜单名称。缺省为―自定义菜单‖

2.Function GetGridText(ByVal Row As Long, ByVal Col As Long) As String 说明:

获取分录某单元格的值 参数:

Row:分录行 Col:分录列

3.Function GetHeadNumber(ByVal CtlIndex As Long) As String 说明:

获取表头某项的代码 参数:

CtlIndex:表头控件索引

4.Function GetHeadText(ByVal CtlIndex As Long) As String 说明:

获取表头某项的文本 参数:

CtlIndex:表头控件索引

5.Function GetSumGridText(ByVal Row As Long, ByVal Col As Long) As String 说明:

获取合计行某列的值 参数:

Row:行。一般为1 Col:分录列

6.Function SetGridText(ByVal Row As Long, ByVal Col As Long, ByVal Value, [ByVal InterID As Long = 0], [ByVal sName As String = \ 说明:

设置分录某单元格的值, 当分录为查找类型时,会把相应的信息一起携带到相应的位置,如当为物料代码时,它会携带物料的一些基本信息物料名称等。 参数:

Row:分录行 Col:分录列

Value:设置的值。如果该单元格是查找类型的,Value应设置为代码。 InterID:暂未使用 sName:暂未使用

7.Function SetHead(ByVal Index As Long, ByVal Value, [ByVal InterID As Long = 0], [ByVal sName As String = \ 说明:

设置表头某项的值 参数:

Index:表头控件索引

Value:设置的值。如果该表头项是查找类型的,Value应设置为代码。 InterID:暂未使用 sName:暂未使用

8.Function SetSumGridText(ByVal Row As Long, ByVal Col As Long, ByVal Value) As Boolean 说明:

设置分录合计某列的值 参数:

Row:分录行。一般为1 Col:分录列

Value:设置的值。

? 用户可实现自己功能的事件

1.Public Event BillInitialize() 单据初始化完成时激发该事件 2.Public Event BillTerminate() 单据卸载完成时激发该事件

3.Public Event UserMenuClick(ByVal Index As Long, ByVal Caption As String)

当点击用户自定义的菜单时激发这个事件。 参数:

Index:表示第几个菜单、由添加菜单的先后顺序决定,

Caption:菜单项的标题,如何添加自定义菜单请参见方法AddUserMenuItem 4.Public Event LeveCell(ByVal Col As Long, ByVal Row As Long, _ ByVal NewCol As Long, ByVal NewRow As Long, Cancel As Boolean) 当离开分录的一个单元格的时候激发这个事件 参数:

Col 分录的要离开列 Row分录的要离开行 NewCol 新的列 NewRow新的行 Cancel是否取消

5.Public Event HeadChange(ByVal CtlIndex As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean) 当表头的一个项目改变时激发这个事件 参数:

ctlIndex 表头字段索引 Value 当前值

bNewBill是否是新增单据 Cancel是否取消

6.Public Event GridChange(ByVal Col As Long, ByVal Row As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean)

当表体的一个项目改变时激发这个事件

参数:

Col 分录的当前列 Row分录的当前行 Value 当前值

bNewBill是否是新增单据 Cancel是否取消

7.Public Event BeforGridLookUp(ByVal Row As Long, ByVal Col As Long, ByVal nLookUpClsID As Long, Cancel As Boolean)

在分录执行查找功能之前激发这个事件

参数:

Col 分录的当前列 Row分录的当前行

nLookUpClsID 当前查询的资料类型, Cancel是否取消

8.Public Event EndGridLookUp(ByVal Row As Long, ByVal Col As Long, ByVal nLookUpClsID As Long)

在分录完成查找功能之后激发这个事件

参数:

Col 分录的当前列 Row分录的当前行

本文来源:https://www.bwwdw.com/article/q906.html

Top