K3ERPwise老单开发手册_第1页
K3ERPwise老单开发手册_第2页
K3ERPwise老单开发手册_第3页
K3ERPwise老单开发手册_第4页
K3ERPwise老单开发手册_第5页
已阅读5页,还剩207页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 供应链开发帮助手册ã金蝶软件(中国)有限公司研发中心K/3供应开发组解释 目录ØK/3老单单据平台开发手册4l整体框架和设计思路4一、设计思路4二、UML图4l模版5一,单据构造模版:5二、选单模版9三,单据控制10四,单据套打10l单据调用接口11一、客户端调用接口11二、中间层调用接口13l单据流程15一、新建单据流程15二、查看或修改单据流程:16三、录单流程:17四、单据的保存流程22五、对下一版本的一些建议24l单据选单的实现说明25一,实现思路:25二,实现方式:25l单据模板Action说明文档28一、概述28二、关键词28三、分类28四、功能标准定义28五

2、、标准过程指南31l单据打印、连续打印、合并打印实现说明32一、GUI上单据打印的实现方式:32l常见问题分析32一、对于KDInputTool.DLL组件的日期控件的日期格式32二、对于Spread控件的取值赋值33三、模板数据冗余:33四、选单结构不灵活:34五、ICTemplate表、ICTemplateEntry表的问题34六、单据选单的关联关系:34Ø单据二次开发手册34l属性35l方法36l用户可实现自己功能的事件37l中间层事件40l应用示例41ØK/3序时簿开发手册45l整体框架和设计思路45l模版45一、ICListTemplate:该表反映了供需链所有序

3、时簿的总体情况。45二、ICChatbilltitle:该表反映了所有序时簿的显示的字段详细情况。46三、ICListToolbar:该表反映了序时簿菜单和工具栏详细情况。47四、ICTableRelation:选单中涉及的所有表之间的连接关系。47l接口函数描述48一、相关组件48l序时簿二次开发48一、创建一个中间层组件,实现一个接口48二、注册组件49l常见问题分析50一、模板数据冗余:51二、序时簿几种状态51Ø采购价格管理开发手册51l流程51l表结构51l代码结构51Ø销售价格/折扣管理开发手册51l流程51l表结构51l代码结构52Ø进出口开发手册5

4、2l流程52l表结构52l代码结构52Ø发票钩稽开发手册52l流程52l表结构52l代码结构52Ø盘点开发手册52l盘点作业52l盘点方案查询53l盘点方案新建54l盘点方案删除54l备份盘点数据55l盘点数据引入/引出57l盘点选单57l生成盘点单据57Ø序列号开发手册59l流程59l表结构59一、序列号流转表ICSerialFlow表结构:59二、序列号表ICSerial59三、ICSerial_FXXX60l基本操作61一、新增单据61二、审核单据:62三、删除单据:62四、作废单据:62五、更新库存后序列号状态单据类型对应表:63l代码结构63Ø

5、入库核算开发手册64l流程64l表结构64l代码结构64Ø委外核销开发手册64l流程64l表结构64l代码结构64Ø出库核算开发手册64l表说明64l算法说明65l代码结构65一,所有计价方法的入口函数:65二,每一种计价方法的处理逻辑:66l核算常见问题汇总69l出库核算核算报错问题70Ø凭证开发手册72l表说明72l凭证模版72l代码结构74l凭证常见问题说明75Ø分销开发手册75l流程75l表结构75l代码结构81Ø门店开发手册81l流程81l表结构81l代码结构81Ø销售前台开发手册81l流程81l表结构81Ø工业报

6、表开发手册81l简介:81l主要函数:82l处理过程顺序图:83l代码结构83Ø门户报表开发手册83l流程错误!未定义书签。l表结构错误!未定义书签。l代码结构错误!未定义书签。ØVB编程经验总结开发手册86lVB中精确数据的四舍五入处理86l假设VB中有如下的变量声明:87lVB中的对象是自动回收的,类似java87l对对象变量赋值应该用 set obj = AnOtherObj 这种方式88lVB中字符串的内部存储格式是Unicode,它可以自动转化为ANSI字符(单字节字符)或者 DBCS 字符(双字节字符)88l字符串的比较应该是用 strCmp 函数,而不是简单的

7、用 = 号89lVB中字符串处理的函数有三种版本:89lVB程序代码中的以下标识符不能含有双字节字符:91Ø K/3老单单据平台开发手册l 整体框架和设计思路一、 设计思路二、 UML图l 模版单据主要是在模版的基础上实现的。单据的模版有以下几张表:ICTransactionType,ICTemplate,ICTemplateEntry,ICSelBills,ICTableRelation。前三张表用于构造显示单据,后两张表用于选单。一,单据构造模版: 1ICTransactionType:该表反映了供需链所有单据的总体情况。ICTransactionTypeFbrNoFID单据事务

8、类型内部IDFROB红蓝字标记 :1表示该单据区分红 蓝字 ,0表示没有红蓝字之分Fname单据名称Ftype单据类别FtempalteID单据模版ID (与 ICTemplate,ICTemplateEntry 表中的FID对应FvchTempalteID(未用)FheadTable单据表头对应的数据库表名FentryTable单据表体对应的数据库表名FcheckPro(未用)FformWidth单据录入时的缺省宽度FformHeight单据录入时的缺省高度FfixCols单据的固定列数目 2ICTemplate:该表反映了所有单据的表头的详细情况。ICTemplateFID单据模版IDFc

9、tlIndex表头控件编号,连续且唯一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自定义单据使用的整数类型FlookUpCls如为查找类型 则与表t_ItemClass(核算项目表)

10、中的FItemClassID对应。或者为辅助资料的ID(t_submestype 中的FtypeID)FneedSave是否需要保存到数据库中FvalueType值的类型 0 字符串,1 数字,2 日期,3 整数FsaveValue保存值的类型 0 名称,1 内部ID,2 代码FfieldName该字段对应在数据库表中的字段。在同一个单据的模版中不能重复。Fleft该单据头控件的位置FtopFwidthFheightFenable控件在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:0、32、48。Fprint是否

11、打印(暂未用)Ffontname字体类型FfontSize字体大小FselBill如果该控件可以选择其它单据作为数据的输入来源,则该值对应为被选择单据的叙事簿ID(ICListTemplate表中的FID)FmustInput是否必须录入Ffilter过滤条件。一般用于选单或查找某类基础资料时过滤掉一些不符合选择条件的单据或基础资料。FrelationID表示哪一个字段的改变会导致当前控件值的改变。它的值为对应字段的数据库字段名。如有多个这样的字段可以用逗号隔开。Faction为前面Frelationid定义的字段的改变时该执行什么样的操作。例如汇率这个字段,它的FrelationID为Fcu

12、rrencyID ,Faction为 “.,FExchangeRate”表示当改变币别时,把对应币别的默认汇率填入汇率栏中。FlockA为1表示选单过来的数据不能再添加删除分录FROB1 只在蓝字单据中可见,2只在红字单据中可见3 在红蓝字单据中都可见FdefaultCtl系统自带控件为1,自定义的为0 FvisForBillType控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。FVBACtlType自定义单据用来区分是什么类型的控件有Frame,Label,Kdtext三种FrelateOutTbl如果该控件为

13、其它选择类型的属性则为1例如:销售发票有个客户开户银行账号就是此类FSystemMustInputItem如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。3ICTemplateEntry:该表反映了所有单据的分录的详细情况。ICTemplateEntryFID单据模版IDFctlOrder分录列的排列前后顺序FctlIndex分录列编号,连续且唯一Fctltype分录列类型 0文本,1日期,2查找,3数量 ,4 编号,5 选单 ,6 单据标题,7 单据分录,8 审核,9 制单,10 批号,11 金额,12 单价,13 税率,14 会计科目 ,15 生产订单状态,16 生产订单来源,

14、17 要求缺省为空的日期,18 记账 ,20 汇率,21 含税价, 30 自定义单据使用的字符串类型,31自定义单据使用的数字类型,32自定义单据使用的日期类型,33自定义单据使用的整数类型FlookUpCls如为查找类型 则与表t_ItemClass(核算项目表)中的FItemClassID对应。或者为辅助资料的ID(t_submestype 中的FtypeID)FneedSave是否需要保存到数据库中FvalueType值的类型 0 字符串,1 数字,2 日期,3 整数FsaveValue保存值的类型 0 名称,1 内部ID,2 代码FfieldName该字段对应在数据库表中的字段。在同一

15、个单据的模版中不能重复。Fenable该分录列在各种状态下是否可录入:新增、修改、察看、审核、下达、单价金额修改。用一个六位的二进制数表示,可录入则对应位为1否则为0。常用值:0、48、49。Fprint是否打印该列(暂未用)FheadCaption该分录列的表头标题Fwidth该分录列的宽度FneedCount该分录列是否需要合计,1:需要 0:不需要FrelationID表示哪一个字段的改变会导致当前列值的改变。它的值为对应字段的数据库字段名。如有多个这样的字段可以用逗号隔开。Faction为前面Frelationid定义的字段的改变时该执行什么样的操作。例如金额这个字段,它的Frelat

16、ionID为“FauxQty,FAuxPrice” ,Faction为“(),FAuxQty,*,FAuxPrice”表示当数量或单价改变时,计算数量与单价的乘积,并填入金额列中。FmustInput是否必须录入Ffilter过滤条件。一般用于查找某类基础资料时过滤掉一些不符合选择条件的基础资料。FSaveRule该列值的保存规则,例如“U:0”表示该列的值不能为0。FdefaultCtl系统自带分录列为1,自定义的为0 FvisForBillType该列在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。FRelateO

17、utTbl如果该分录列为其它选择类型的属性则为1例如:销售发票有个客户开户银行账号就是此类FSystemMustInputItem如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。单据构造模版的基本用途是:根据要显示哪一种单据,首先去ICTransactionType表中获取该种单据的总体信息,包括表头模版号、分录模版号、单据宽高等等。然后根据表头模版号去查表头模版ICTemplate,构造该种单据的表头,根据分录模版号去查分录模版ICTemplateEntry,构造单据的分录。函数:Bills.SetPropDescFSaveRule说明:操作符功能例子备注该字段不能为空该字段不能

18、为空U该字段不能=某个值U:0该字段不能=0该字段必须某个值1.>:0;2.>:Fqty1.该字段必须>0;2.该字段>FQty该字段必须0该字段必须0该字段大于等于0并且小于某数或者某列的值1.;2.:Fqty;3.:1001.该字段必须>0;2.该字段<FQty;3.该字段<100#该字段必须0#V该字段必须大于单据头日期V:Fdate该字段必须大于单据头Fdate$该字段不能与某字段同时=0$:FAuxQty该字段不能与FAuxQty同时=0D该字段不能大于另个日期的值D,FStartWorkDate该字段不能大于FStartWorkDate!几

19、列不能全部为空!,FWorkerID,FDeviceIDFWorkerID,FDeviceID不能全部为空A:DEPEND依赖的某一列不能为空FDCSPID保存规则:A:DEPEND,FStockIDFStockID不能为空二、选单模版1 ICSelbills:选单要取得哪些值,这些值是如何而来的,以及需回填到哪个对应的控件里。 ICSelbillsFID单据的模版IDFFieldName单据上可以选单的字段的字段名FdstCtlField回填的目标字段名FselType目标字段的类型:0 表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时薄的过滤条件。FDK用于表头

20、控件,表示对于同一个目标字段,该回填值是作为FID或Fname或Fnumber。0:FID 1:Fname 2:FnumberFcolName源字段的别名Fname源字段名FtableName源表名FtableAlias源表别名Faction用于处理一些需对字段值进行判断,或需要在字段之间进行一些运算的情况。注意事项:单据头的字段如果有选单数据来源,则必须有三行,分别填入对应的ID,名称,代码。如果没有ID,代码,则随便传入一个数。而且这个顺序不能改变。2ICTableRelation:选单中涉及的所有表之间的连接关系。ICTableRelationFtypeid用于序时薄模版FinterID

21、用于序时薄模版FtableName表1名FtableNameAlias表1的别名FfieldName表1的字段名Ftablename11表2名FtableNameAlias11表2的别名FfieldName11表2的字段名Flogic表1和表2的两个字段之间的关系FBillID选单模版号,与ICSelbills中的FID相对应FFieldID选单字段名,与ICSelbills中的FFieldName相对应选单的基本过程是:由当前录入的是哪一种单据,以及是在哪一个控件上进行选单(即需要选何种单据),得到选单模版号FID、FieldName。从ICSelbills和ICTableRelation中

22、选出对应的模版信息,拼装成一个SQL语句,执行取得相应的记录集。再根据ICSelbills中的数据回填信息,将该记录集的值回填到对应的目标字段中。三,单据控制1、ICBillNoICBillNoFBillID单据ID,对应于ICTransactiontype中的FIDFBillName单据名称FPreLetter前缀名FSufLetter后缀名FCurNo当前单据序号FFormat当前序号的格式FPos2、ICMaxNumICMaxNumFTableName表名FMaxNum当前最大的FInterID四,单据套打1、GLNoteType:单据套打表,记录单据与套打编号的关系。GLNoteTyp

23、eFTemplateID单据ID,对应于ICTransactiontype中的FTemplateIDFnoteType单据套打名称FnoteTypeID单据套打ID2、GLNoteCitation:单据套打关系表,记录单据套打字段的属性。GLNoteCitationFTemplateID单据ID,对应于ICTransactiontype中的FTemplateIDFID在同一单据套打模板中,作为唯一的序列号FNoteTypeID套打ID,对应于GLNoteType中的FNoteTypeIDFcode数据来源字段名FCitationName套打模板取数名称FIsEntry当前字段是否是分录FIsM

24、oney当前字段是否是金额FCtlIndex当前字段在单据中的位置(已经没用)FIsSum当前字段是否要合计FKeyFieldName扩展字段。表示要取FtableName表中的FextFieldName字段,通过FkeyFieldName字段与当前字段关联FExtFieldNameFTableNameFRelationID当前字段的属性标识1:表头2:表体3:汇总4:扩展表头5:主计量单位6:主计量单位数量7:主计量单位单价8:扩展分录相关说明:FRelationID与FIsEntry不同,FIsEntry是用来在套打定义中区分表头、表体(如:在表头栏里只显示表头字段、表体栏里只显示表体字段

25、),FRelationID是套打在填充数值时,判断字段属性用的。l 单据调用接口一、 客户端调用接口² 组件K3Bills.Bill, K3Bills.Bills² 方法1) Public Property Let RemoteCnn(ByVal strCnn As String)单据的远程SQL Server数据库连接字符串2) Public Property Let LocalCnn(ByVal strCnn As String)单据的本地 ACCESS 数据库连接字符串,主要用于套打3) Public Property Let ListRecordset(ByVal

26、rs As ADODB.Recordset)由序时薄等进入单据时,将序时薄上显示的纪录作为一个Recordset传给单据。单据在实现上一条、下一条的浏览功能时,就根据该Recordset去移动与构造。4) Public Property Let ListRSFieldVect(ByVal vData As KFO.Vector)与ListRecordset相配套,主要用于说明该Recordset中哪个字段代表FinterID(单据内码),哪个字段代表FtranType(单据事务类型)。ListRSFieldVect是包含若干KFO.Dictionary的一个KFO.Vector,每个Dicti

27、onary包含有两个值:FcolName和FISPrimary。当FISPrimary=1时,对应的FcolName的值为单据内码字段名;当FISPrimary=3时,对应的FcolName的值为单据事务类型字段名。5) Public Property Let billValueChanged(ByVal ValueChanged As Boolean)设置单据是否经过修改。6) Public Property Get billValueChanged() As Boolean返回单据是否经过修改,从而可确定显示时是否需刷新数据。7) Public Property Let NewBillTr

28、ansType(ByVal transtype As Long)由序时薄新增单据时,新增单据的事物类型。8) Public Sub SetOpt(ByVal ID As Long, Optional ByVal Name As String)设置操作员的ID和Name。9) Public Property Let TheSaleMode(ByVal vNew As Enu_SaleMode)销售方式 内销 0;外销 1;10) Public Property Let ShowForModeExt(ByVal vData As Integer)单据显示状态。有六种状态0:ShowForSelec

29、tBill,新增单据1:ShowForModifyBill,修改单据2:ShowForViewBill,查看单据3:ShowForCheckBill,审核单据4:ShowForConveyBill,下达单据5:ShowForPriceCal,核算时单据的单价金额修改11) Public Sub Show( ByVal eBillCls As Enu_BillCls, ByVal ShowType As Enu_ShowBillType)显示想要调用的单据EbillCls:单据的类型Public Enum Enu_BillCls BillBuyReq = 100采购申请单据 billBuyOrd

30、er = 101采购订单 BillBuyRec = 102采购收货单据 BillBuyCancel = 112采购退货单据 BillBuyInvoice = 103采购发票 BillCheckedInStock = 200验收入库单据 BillSendMaterials = 201领料发货单据 BillStockMove = 202仓库调拨单据 BillStockAdjust = 204库存调整单据 BillProductOrder = 207生产订单 BillSellOrder = 300销售订单 BillSellSendBackGoods = 311销售退货单据 BillSellSendG

31、oods = 301销售发货单据 BillSellInvoice = 302销售发票 BillReqForPrice = 400询价问价单据 BillAdjustPrice = 500调价单据 billAll = 1000所有单据End EnumEshowType:单据的状态Public Enum Enu_ShowBillType Showinput = 0录入 Showedit = 1修改 Showview = 2查看 Showcheck = 3审核 showconvey = 4 生产订单下达End Enum二、 中间层调用接口² 组件BillDataAccess.SaveData

32、² 方法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:单据

33、是否区分红蓝单,为boolean型IsRedBill:单据是否为红单,为boolean型TableHeadName:单据表头对应的物理表名,为string型TableEntryName:单据表体对应的物理表名,为string型AutoBillNO:系统自动生成的单据编码,为string型BillNo:单据编码,为string型BillNoFldName:单据编码对应的物理字段名,为string型IsAppendItemBill:单据能否追加物料,为boolean型,默认值为FalseEntryKeyWord:分录关键字,为string型UserID:操作者ID,为long型,默认值为16394

34、UserName:操作者名称,为string型AppendItem:是否追加了物料,为boolean型SplitBill:是否拆单,为boolean型AcctName:帐套名称,为string型CurBillUpStockWhenSave:保存库存单据时,是否更新库存,为long型,0表示否,从已有单据的FUpStockWhenSave字段获得,默认为0。IgnoreCredit:是否进行信用控制,为boolean型,默认值为TrueEntrySQL:单据体数据的SQL语句的数组,记录单据保存时,提交的数据库更新SQL语句,为单据体SQL,为Variant型HeadSQL:单据头数据的SQL语

35、句,记录单据保存时,提交的数据库更新SQL语句,为单据头SQL,为string型JustForAccInput:成本核算系统单据调用时的特殊控制参数,用来控制保存和界面处理。Boolean型ReSave:重新保存单据时的状态,每个字位代表一个意思,为long型,中间层若取不到值,默认值为7。1:表示忽略负库存、2:忽略库存警告、4:忽略锁库检查、8:忽略所有检查² 返回值:为KFO.Dictionary对象,相应的关键字见下面说明:Success:保存是否成功,为boolean型RetCode:返回的代码值,为long型。3:信用提示、2:最高最低库存提示、1:负库存提示、-200:

36、锁库物料为负库存、-201:库存数不足以锁库、-204:销售最低限价提示、-205:采购最高限价提示ReturnMsg:返回的信息,为string型BillInterID:单据内码,为long型ReturnBillNo:单据编码,为string型CheckItemInfo:超出最高最低安全库存时存储相应的物料,为KFO.Vector对象l 单据流程一、 新建单据流程新建单据时,首先设置单据的属性值(包括RemoteCnn、LocalCnn、SetOpt、TheSaleMode、ShowForModeExt、NewBillTransType),然后再调用过程Public Sub Show( By

37、Val eBillCls As Enu_BillCls, ByVal eShowType As Enu_ShowBillType),显示想要新建的某种单据,对于新建单据,参数eShowType应传值为。过程Show通过激发窗体frmBill的Form_Load()事件,显示新建的单据样式。Form_Load()事件主要完成以下操作:1 调用函数FillBillTypeCtl(ByVal ctl As Object, Optional ByVal transtype),从表ICTransactionType中取出新建单据类(可能包括多种单据)的基本属性值,包括单据名称、单据模版号、单据对应的数据

38、库表名、单据窗体宽高等等。将每种单据的属性值拼成一个字符串,作为cmbTransType(comboBox控件)的一个列表值,依次添加到cmbTransType中。2 激发cmbTransType的cmbTransType_Click ()事件,根据当前cmbTransType的列表值,取出该种单据有关属性值,设置窗体的宽高及固定列,再由该属性列表值通过调用过程BuildBill(ByVal strTemplateID As String)建立整张单据(包括单据头及单据分录)。3 设置菜单及工具条的Visible以及Enabled属性。4 设置套打的本地、远程的连接属性,以及套打模版号。过程B

39、uildBill(ByVal strTemplateID As String)是构建单据的关键。它完成以下操作:1 根据传过来参数strTemplateID取得单据模版号、单据表头对应的数据库表名、单据分录对应的数据库表名、单据事务类型内部ID。2 根据单据模版号,从表ICTemplate中取得表头模版,从表ICTemplateEntry中取得分录模版。3 根据分录模版,调用过程BuildEntryCtls()构造单据的分录。4 根据表头模版,调用过程BuildHeadCtls()构造单据的表头。过程BuildEntryCtls(rsTmpEntry As ADODB.Recordset)完成

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

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

42、数eShowType传值为。查看或修改单据的主要操作也是在窗体frmBill的Form_Load()事件中完成。流程如下:调用过程MoveBill取得显示单据的事物类型和单据内码 设置套打的本地、远程的连接属性,以及套打模版号设置菜单及工具条的Visible以及Enabled属性,设定表头控件及分录列的锁定状况调用函数FillBillData,根据事务类型及单据内码,去数据库种取得该张单据的所有相关数据,并将其值填入到空白单据中。调用函数FillBillTypeCtl新建一张同种事务类型的空白单据(其过程与新建单据一样)函数Public Function FillBillData(ByVal

43、InterID As Long, ByVal transtype As Integer) As Integer完成将某张单据数据填入空白单据的操作,参数InterID指该张单据的内码,参数transtype指该张单据的事物类型。这两个参数可确定唯一一张单据。FillBillData的流程如下:根据单据内码以及单据表头对应的数据库表名,取得单据表头信息记录集。逐个读取该记录集,将其数据填入相应的分录列中以及分录控件数组TEntryCtl中通过单据内码以及单据分录对应的数据库表名,取得单据分录信息记录集。逐个读取该记录集,将其数据填入相应的表头控件中以及表头控件数组THeadCtl中三、 录单流程

44、:在录单的过程中,表头控件及分录列都设置了一定的属性,即只能录入特定的数据。对于基础资料和选单,都有两种录入方式:按F7或F8选取或手工直接录入。其它的如数量、单价、单据号码等,就只能手工录入。过程Private Sub LookUp(Optional ByVal bQuickView As Integer = 1)实现了按F7或F8键查看并选取某项基础资料数据的功能。参数bQuickView=0表示是查看基础资料详细的树状图,对应的是F7键;bQuickView=1表示是查看基础资料编码列表,对应的是F8键。LookUp的主要流程如下:调用函数FillBillDataExt,将记录集数据依次

45、填入到相应的表头控件及分录列中。由选单模版以及上述对象,取得一个记录集,该记录集包含了选单需要返回的所有表头和分录数据是否退出在序时薄上选中了一条以上的记录由选单序时薄模版号及过滤条件调用序时薄,显示选单序时薄根据选单模版及当前控件的过滤条件构造选单序时薄过滤条件取得返回的InterID、Name、Number等信息,并将其值赋与当前活动控件是返回时选中某一条基础资料否退出设置过滤条件,并根据基础资料查看类别显示相应的基础资料查看窗体基础资料当前活动控件查看类型按F7或F8查看选单取得序时薄返回的一个KFO.Vector对象,该对象包含了所选单据的FInterID和FEntryID,由此两参数

46、,可唯一确定选择了那些单据及分录。函数Public Sub FillBillDataExt( _ ByVal RsTrans As ADODB.Recordset, _ ByVal BillTemplateID As String, _ ByVal FieldName As String, _ Optional ByVal SelBillData, _ Optional ByVal Action) 完成将选单返回数据填入到表头控件及分录列中。参数说明如下:RsTrans:选单返回数据记录集BillTemplateID:选单模版号FieldName:选单控件名SelBillData:选单返回单据

47、的内码及分录号数据集Action:选单控件需执行的某些操作,如是否需要按BOM展开返回的物料,是否需要将物料进行合计。基本流程如下:传入数据需要展开物料需要合计不需要由参数Action确定是否需要重新定义定义选单返回记录集按BOM展开返回单据上的所有物料并将其汇总合计。得到一个新的记录集。将该记录集赋给rs对返回单据上的所有物料进行汇总合计,得到一个新的记录集。将该记录集赋给rs将选单返回数据记录集(RsTrans)赋予rs由模版ICSelBills取得选单数据需回填到那些分录列里将记录集rs中有关于分录的数据填入到对应分录列中以及以及分录控件数组TEntryCtl中。调用函数SetRelat

48、eCtl,将记录集rs中有关于表头的数据填入到对应表头控件中以及以及表头控件数组THeadCtl中对于手工录入选单号码进行选单,首先是根据录入的单据号码,构造一个KFO.Vector对象。该对象同由序时薄选单返回的对象性质是一致的,都包含了所选单据的FInterID和FEntryID。余下的过程两者都一致,即由该对象取得选单返回数据集,再调用函数FillBillDataExt,将记录集数据依次填入到相应的表头控件及分录列中。对于查找类型的控件,当离开该控件时,要进行一系列的合法性检查(表头控件激发Validate事件,分录控件激发Validate事件和LeaveCell事件)。 这些事件里主要

49、通过函数Private Function GetData(Cancel As Boolean, _bChanged As Boolean, _Optional ByVal bEntry As Boolean = False, _ Optional ByVal col As Long, _Optional ByVal Row As Long) As Boolean实现数据合法性检查。该函数通过调用存储过程GetItemDetail返回一个记录集,如果该记录集为空记录集,则控件里的数据不合法,要求重新输入数据或恢复以前合法数据;如果该记录集不为空,则记录集里包含了与当前控件值有关的所有辅助信息。(

50、比如当前控件为物料栏,则该记录集包含了该物料的所用属性值,包括计量单位内码及名称等等。)。对应于当前控件是表头控件或分录列,记录集里的某些值会填入到相应的表头控件数组TheadCtl中或分录控件数组TentryCtl中。在Validate事件或LeaveCell事件中,还会调用一个重要的过程DoActions。该过程完成的操作就是根据当前控件填入的值,在其它与它相关的控件也填入相应的值。(例如录入供应商带出计算方式,录入物料代码带出物料名称,计量单位等等,录入单价,数量后算出金额等等)。DoActions的基本操作是根据填入到THeadCtl数组和TEntryCtl数组中的模版信息Frelat

51、ionID,找出与当前控件相关的所有控件,将这些控件按照FCtlIndex 升序排序,然后按照这个顺序依次调用过程DoAction,完成在某个控件中填入适当的数操作。过程Private Sub DoAction(ByVal ParentID As Long, ByVal Index As Long, ByRef oriObj As Object, objType As Enu_ObjType)中定义了模版Faction中每种符号的实际操作意义。参数ParentID指明是哪一个控件激发了DoAction事件,从而导致其它控件的值变化;Index表示当前是轮到处理哪一个控件;oriObj传递表头控

52、件数组或分录控件的引用,objType指明ParentID所指控件是表头控件还是分录控件。DoAction定义了以下模版操作符号的意义:“.”:取基础资料的附属属性值。例:FrelationID为“FitemID” ,Faction为“.,Fname”,表示由物料代码带出物料名称。“.A”:取基础资料附带的其他基础资料属性。例:FrelationID为FitemID,Faction为“.A,FunitID,t_MeasureUnit”,表示由物料代码带出计量单位的内码、名称、代码。“V>=K”:表示某分录控件的值应大于或等于某表头控件的值。例:表头模版ICTemplate中FrelationID为“FDate”,Faction为“V>=K,Fdate”,表示分录里的日期应大于等于表头的日期。“=”:处理是否允许录入批次。例:FrelationID为“FitemID”,Faction为“=,Ftr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论