KERP老单开发手册

上传人:无*** 文档编号:47619340 上传时间:2021-12-25 格式:DOCX 页数:51 大小:172.46KB
收藏 版权申诉 举报 下载
KERP老单开发手册_第1页
第1页 / 共51页
KERP老单开发手册_第2页
第2页 / 共51页
KERP老单开发手册_第3页
第3页 / 共51页
资源描述:

《KERP老单开发手册》由会员分享,可在线阅读,更多相关《KERP老单开发手册(51页珍藏版)》请在装配图网上搜索。

1、您可自由编辑】(ERPMRP 管理)KERP老单开发手册2020年5月多年的企业咨询顾问经验r经供应链开发帮助手册金蝶软件(中国)有限公司研发中心 K/3供应开发组解释目录K/3老单单据平台开发手册 4整体框架和设计思路 41、 设计思路42、 UML 图4模版5一,单据构造模版: 5二、选单模版9三,单据控制1.0四,单据套打1.0单据调用接口 1.11、 客户端调用接口 1.12、 中间层调用接口 1.33、 流程1.51、 新建单据流程 1.52、 查看或修改单据流程: 1. 63、 录单流程:1.74、 单据的保存流程 225、 对下一版本的一些建议 2 4单据选单的实现说明2.5一,

2、实现思路:2.5二,实现方式:2.5单据模板Action说明文档 2.81、 概述2.82、 关键词2.83、 分类2.84、 功能标准定义 2.85、 标准过程指南3.1单据打印、连续打印、合并打印实现说明 3 2一、GUI上单据打印的实现方式:3 2常见问题分析3.21、 对于KDInputTool.DLL组件的日期控件的日期格式 322、 对于Spread 控件的取值赋值 3 33、 模板数据冗余: 3.34、 选单结构不灵活:3 45、 ICTemplate 表、ICTemplateEntry 表的问题346、 单据选单的关联关系: 3 4单据二次开发手册 34属性35方法36用户可实

3、现自己功能的事件 3.7中间层事件4.0应用示例4.1K/3序时簿开发手册45整体框架和设计思路 4.5模版4.51、 ICListTemplate:该表反映了供需链所有序时簿的总体情况。 4 52、 ICChatbilltitle :该表反映了所有序时簿的显示的字段详细情况。 .463、 ICListToolbar :该表反映了序时簿菜单和工具栏详细情况。 4 74、 ICTableRelation:选单中涉及的所有表之间的连接关系。 47接口函数描述4.8一、相关组件4.8序时簿二次开发4.81、 创建一个中间层组件,实现一个接口 4 82、 注册组件4.9常见问题分析5.01、 模板数据

4、冗余: 5.12、 序时簿几种状态5.1采购价格管理开发手册 5.1.流程51表结构5.1代码结构5.1销售价格/折扣管理开发手册 .5.1.流程61表结构5.1代码结构62进出口开发手册 52流程62表结构5.2代码结构62发票钩稽开发手册 .52流程62表结构5.2代码结构52盘点开发手册 52.盘点作业52盘点方案查询 5.3盘点方案新建 5.4盘点方案删除5.4备份盘点数据5.5盘点数据引入/引出5.7盘点选单57生成盘点单据5.7序列号开发手册 59流程69表结构5.91、 序列号流转表ICSerialFlow表结构:.5 92、 序列号表 ICSerial .593、 ICSeri

5、al_FXXX 6.04、 操作6.11、 新增单据6.12、 审核单据:6.23、 删除单据:6.24、 作废单据:6.25、 更新库存后序列号状态单据类型对应表: 63代码结构63入库核算开发手册 .6.4流程64表结构.6.4代码结构64委外核销开发手册 .6.4流程64表结构.6.4代码结构64出库核算开发手册 .6.4表说明.6.4算法说明65代码结构65一,所有计价方法的入口函数: 6 5二,每一种计价方法的处理逻辑: 6 6核算常见问题汇总6.9出库核算核算报错问题 7.0凭证开发手册 72.表说明7.2凭证模版7.2代码结构7.4凭证常见问题说明7.5分销开发手册75.流程7.

6、5表结构7.5代码结构8.1门店开发手册 81.流程81表结构811代码结构8.1销售前台开发手册 .8.1.流程81表结构811工业报表开发手册 8.1.简介:811主要函数: 82处理过程顺序图:8.3代码结构83门户报表开发手册 8a3流程错误!未定义书签。表结构错误!未定义书签。代码结构 错误!未定义书签。VB编程经验总结开发手册 8 6VB中精确数据的四舍五人处理 86假设VB中有如下的变量声明: 8 7VB中的对象是自动回收的,类似 java 87对对象变量赋值应该用set obj = AnOtherObj这种方式 8 8VB中字符串的内部存储格式是Unicode ,它可以自动转化

7、为 ANSI字符(单字节字符)或者DBCS字符(双字节字符)8.8字符串的比较应该是用 strCmp 函数,而不是简单的用 =号89VB中字符串处理的函数有三种版本: 8 9VB程序代码中的以下标识符不能含有双字节字符: .9 1?K/3老单单据平台开发手册整体框架和设计思路1、 设计思路2、 UML 图模版单据主要是在模版的基础上实现的。单据的模版有以下几张表:ICTransactionType ,ICTemplate , ICTemplateEntry , ICSelBills , ICTableRelation 。前三张表用于构造显示单 据,后两张表用于选单。一,单据构造模版:1 . I

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

9、emplate :该表反映了所有单据的表头的详细情况。FID单据模版IDFctllndex表头控件编号,连续且唯一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如为查找类型则

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

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

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

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

14、状态,16生产订单来源,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:不需要FrelationlD表示哪一个字段的改变会导致当前列值的 改变。它的值为对应字段的数据库字段名。 如有多个这样的字段可以用逗号隔开。Faction为前回Frelationidte义的子段的改变时该执仃什么样的操作。例如金额这个字

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

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

18、 说明:操作符功能例子备注该字段不能为空该字段不能为空U该字段不能=某个值U: 0该字段不能=0该字段必须某个值1.:0 ; 2.:Fqty1.该字段必须0;2.该段段的1丫A该字段必须0A该字段必须0该字段大于等于0并且 小于某数或者杲列的值1.;2.:Fqty;3.:1001.该字段必须0;2.该段 段FQty;3.该字段100#该字段必须0#V该字段必须大于单据头 日期V:Fdate该字段必须大于单据头Fdate$该字段不能与某字段同时=0$:FAuxQty该字段不能与FAuxQty 同时=0D该字段不能大于另个日 期的值D,FStartWorkDate该字段不能大于FStartWork

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

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

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

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

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

25、ionlD 是套打在填充数值时,判断字段属性用的。单据调用接口一、 客户端调用接口组件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 rs As ADODB.Recordset)由序

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

27、值: 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 NewBillTran

28、sType(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 : ShowFo

29、rSelectBill ,新增单据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_BillClsBillBuyReq

30、= 100billBuyOrder = 101BillBuyRec = 102BillBuyCancel = 112BillBuyInvoice = 103BillCheckedInStock = 200BillSendMaterials = 201BillStockMove = 202BillStockAdjust = 204BillProductOrder = 207BillSellOrder = 300BillSellSendBackGoods =BillSellSendGoods = 301BillSellInvoice = 302BillReqForPrice = 400BillAd

31、justPrice = 500 billAll = 1000采购申请单据采购订单采购收货单据采购退货单据采购发票验收入库单据领料发货单据仓库调拨单据库存调整单据生产订单销售订单311 销售退货单据销售发货单据销售发票询价问价单据调价单据所有单据End EnumEshowType :单据的状态Public Enum Enu_ShowBillTypeShowinput = 0录入Showedit = 1 修改Showview = 2查看Showcheck = 3审核showconvey = 4生产订单下达End Enum中间层调用接口组件BillDataAccess.SaveData方法SaveB

32、illEx (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 :操

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

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

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

37、的属性值(包括RemoteCnn 、 LocalCnn 、 SetOpt 、TheSaleMode 、 ShowForModeExt 、 NewBillTransType ) , 然后再调用过程Public SubShow( ByVal eBillCls As Enu_BillCls, ByVal eShowType As Enu_ShowBillType) ,显 示想要新建的某种单据,对于新建单据,参数 eShowType应传值为0。过程 Show 通过激发窗体 frmBill 的 Form_Load() 事件,显示新建的单据样式。Form_Load() 事件主要完成以下操作:1 调用函数

38、FillBillTypeCtl(ByVal ctl As Object, Optional ByValtranstype) , 从表 ICTransactionType 中取出新建单据类 (可能包括多种单据)的基本属性值,包括单据名称、单据模版号、单据对应的数据库表名、单据窗体宽高等等。将每种单据的属性值拼成一个字符串,作为cmbTransType ( comboBox 控件)的一个列表值,依次添加到cmbTransType 中。2 激发 cmbTransType 的 cmbTransType_Click () 事件,根据当前cmbTransType 的列表值, 取出该种单据有关属性值, 设置

39、窗体的宽高及固定列, 再由该属性列表值通过调用过程BuildBill(ByVal strTemplateIDAs String) 建立整张单据(包括单据头及单据分录) 。3 设置菜单及工具条的Visible 以及 Enabled 属性。4 设置套打的本地、远程的连接属性,以及套打模版号。过程 BuildBill(ByVal strTemplateID As String) 是构建单据的关键。它完成以下操作:1 根据传过来参数strTemplateID 取得单据模版号、 单据表头对应的数据库表名、单据分录对应的数据库表名、单据事务类型内部ID 。2 根据单据模版号,从表ICTemplate 中取

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

41、标题、数据类型等属性。过程 BuildHeadCtls(Rstmp As ADODB.Recordset)完成单据头的构造工作,参数rsTmp是从ICTemplate取出的一个记录集,它反映了该单据所有表头的属性 值,也就是该单据的表头模版。该过程主要是将表头模版信息存储在表头属性数组 THeadCtl中,并根据这些模版信息去设置单据表头控件的大小、位置、标题、数 据类型等属性。查看或修改单据流程:对于由报表或序时薄进入单据,首先设置单据的属性值(包括RemoteCnn 、LocalCnn、SetOpt、TheSaleMode 、ShowForModeExt 、NewBillTransType

42、 ,以及 ListRecordset 、ListRSFieldVect ),然后再调用过程 Public Sub Show( ByVal eBillCls As Enu_BillCls, ByVal eShowType As Enu_ShowBillType) ,显示想要修改的某种单据。如果是修改单据,参数 eShowType传值为1 ;如果是查看单据,参数 eShowType传 值为2。查看或修改单据的主要操作也是在窗体frmBill的Form_Load()事件中完成。流程如下:调用过程MoveBill取得显示单据的事物类型和单据内码函数 Public Function FillBillDa

43、ta(ByVal InterlD As Long, ByVal transtype As螂ege颤AFintegTypectk喇触臊l聃蟹猴喻郊!删廨作,(题程与1nterID耨惠卿鞘牖I总码,参数 transtype指该张单据的事物类型。这两个参数可确张单据。FillBillData 的流程如下:三、录单流程:隆舍集里谖记裹集的将堀Sibe以戏庵nabied猫把1强微翔轮I慢分录列 ggHeatit槿中,表头控件及分录列都设置了一定的属性,即只能录入特定的数据。对干荒础资料和谯单.,都有两种录入方式:按F7或F8谯取或手工%店录入。其它的如数量、单价、单据号码等,就只能手工录入。了莪寡7或F

44、8键查看并选取某项基础资料数据的功能。参数 bQuickView=0 表示是查看基础资料详细的树状图,对应的是F7键;bQuickView=1表示,:查看基础资料编码列表,对应的是F8键。LookUp的主要流程如下:逐个读取该记录集,将其数据填入相应的分录列中以及分录控件数组函数 PublTaryH|BypataExt(_ByVal RsTrans As ADODB.Recordset, _ByVal BillTemplatelD As String, _ByVal FieldName As String, _Optional ByVal SelBillData, _Optional ByVa

45、l Action)完成将选单返回数据填入到表头控件及分录列中。参数说明如下:RsTrans :选单返回数据记录集BillTemplateID :选单模版号FieldName :选单控件名SelBillData :选单返回单据的内码及分录号数据集Action :选单控件需执行的某些操作,如是否需要按 BOM展开返回的物料,是否需要将物料进行合计。基本流程如下:按BOM展开返回 单据上的所有物料 并将其汇总合计。 得到一个新的记录 集。将该记录集赋 给rs传入数据将选单返回数据记录集RsTrans)赋予 rs由模版ICSelBills取得选单数据箫回填到琥或分录列里将记录集rs中有关于分录的数据填

46、入到对应分录列中以及以及分录控件数绢TEntryCtl中。对于手入至庆SSM1个KFO.Vector对象。该对象同由序时薄选单返回的对象性质#一致的,者饱含了所选单据的FInterID 和FEntryID 。余下的过程两者都一致,即由该对象取得选单返回数据集,再调用函数FillBillDataExt ,将记录集数据依次填入到相应的表头控件及分录列中。对于查找类型的控件,当离开该控件时,要进行一系列的合法性检查Validate 事件,分录控件激发 Validate 事件和LeaveCell事彳)。(表头控件激发 这些事件里主要通过函Private Function GetData(Cancel

47、As Boolean, _bChanged As Boolean,Optional ByVal bEntry AsBooleanFalse,Optional ByVal col As Long,Optional ByVal Row As Long) As Boolean实现数据合法性检查。该函数通过调用存储过程GetItemDetail返回一个记录集,如果该记录集为空记录集,则控件里的数据不合法,要求重新输入数据或恢复以前合法数据;如果该记录集不为空,则记录集里包含了与当前控件值有关的所有辅助信息。(比如当前控件为物料栏,则该记录集包含了该物料的所用属性值,包括计量单位内码及名称等等。)。对应

48、于当前控件是表头控件或分录列,记录集里的某些值会填入到相应的表头控件数组TheadCtlTentryCtl 中。在 Validate 事件或 LeaveCell 事件中,还会调用一个重要的过程DoActions 。该过程完成的操作就是根据当前控件填入的值,在其它与它相关的控件也填入相应的值。 (例如录入供应商带出计算方式,录入物料代码带出物料名称,计量单位等等,录入单价,数量后算出金额等等) 。 DoActions 的基本操作是根据填入到 THeadCtl 数组和 TEntryCtl 数组中的模版信息 FrelationID ,找出与当前控件相关的所有控件,将这些控件按照 FCtlIndex

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

50、ntID 所指控件是表头控件还是分录控件。 DoAction 定义了以下模版操作符号的意义:“ . ” :取基础资料的附属属性值。例: FrelationID 为“ FitemID ” , Faction 为“ .,Fname ” ,表示由物料代码带出物 料名称。“ .A ” :取基础资料附带的其他基础资料属性。例: FrelationID 为 FitemID , Faction 为“ .A,FunitID,t_MeasureUnit ” ,表示由物 料代码带出计量单位的内码、名称、代码。“V=K ” :表示某分录控件的值应大于或等于某表头控件的值。例:表头模版 ICTemplate 中 Fr

51、elationlD 为FDate ”, Faction 为V=K,Fdate,表示分录里的日期应大于等于表头的日期。“ = ” :处理是否允许录入批次。例: FrelationID 为“ FitemID ” , Faction 为“ =,Ftrack,80 ” ,表示物料计价方法为分批认定时(Ftrack=80) ,锁定控件不让录入,否则允许录入。“ = ” :表示当前控件的值应小于等于某值。例: FrelationID 为“ FDescount ” , Faction 为“ =,100 ”,表示当前格的值应小于等于 100 。“ ! ” :取分录某几列的值,从左到右依次进行四则运算。运算式中

52、不能包含常量。例 : FrelationID 为 “ FAuxQty,FAuxPrice,FQty ” , Faction 为 “ !,FAuxQty,*,FAuxPrice” ,表示当数量、单价、基本单位数量任一个发生改变时,计算数量 x 单价的值,填入当前格(金额) 。注:“ !”完全可被“!1 ”取代。“!1 ”、 “()” :取分录某几列的值,从左到右依次进行四则运算。运算式中可包含常量。例 : FrelationID 为 “ FAuxQty,FAuxPrice,FQty ” , Faction 为!,FAuxQty,*,FauxPrice,+,0 ”,表示当数量、单价、基本单位数量任

53、一个发生改变时,计算数量x单价+0的值,填入当前格(金额)。注:“()”最多只能定义三项之间的运算。主要是用于自定义单据中。而“!1 ”则不受限制。可考虑将两者统一。“!2”:特殊计算,由折扣率或折扣额之一计算金额(折扣率或折扣额中某一列必不可见)。例:Faction 为!2,FAmount,*,FT axRate,/,100;!2,FAuxQty,*,FUniDiscount ,表 示当使用折扣率时,计算金额 x折扣率/ 100的值;当使用折扣额时,计算数量x单位折扣额的值。“ !3 ” :前一项与后几项的运算结果进行运算。例:Faction 为“!3,FAuxPrice,*,100,+,F

54、T axRate,/,100 ”,表示计算单价x (100+税率/100 )的值。注:任何!”、“!1 ”式子都可改装为“!3”的式子,因此,可考虑用“!3”替换“!”、 “!1“ !4 ”前一项与后几项的运算结果进行运算,但数据是取界面上显示的数。注:因为VaSpread的特殊性,界面上看见的数与实际表格里面的数可能有尾差, 从而有可能导致计算上的误差,例如在发票上金额与税额的和不等于价税合计。故 引入“ !4”解决该问题。“&”:取基础资料附带的其他基础资料属性。例:FrelationID 为FcustID ”, Faction 为&,FSetID,FSetName,FSetNumber,

55、表示由供应商带出结算方式的内码、名称、代码。注:可考虑与“ .A”合并。“”:计划价调价单据中,得到物料的记价方法为计划价调价的当前库存数。“*”:处理其他入库单单据头只能录供应商和部门中的一种,其他出库单单据头只能录客户和部门中的一种。“A” :在录入盘赢盘亏单时自动带出某种物料在某个仓库中的帐存数量。“A* ” :在录入盘赢盘亏单时仓库改变时自动带出录入的所有物料在该仓库中 的帐存数量。“A1 ”:当数量改变时,相应的改变基本单位数量。“A2”:当基本单位数量改变时,相应的改变数量。四、单据的保存流程单据保存之前,首先调用函数PreventDirtyData(),以确保当前单据上的数据是正

56、确有 效的,然后再调用函数Save()保存单据。函数Save()的主要流程如下:退出,要求录入 合法数据(2)单据的审核、下达保存完毕1 L-在单据录入或修改完成以后,可在单据界面直接完成审核与反审核,下达与反 下达,结案与反结案的操作(发票除外)。这些操作都是调用中间层 K3McheckBill.DLL 实现的,具体的操作可参看类K3MCheckBill.CheckNow中的函数CheckBill ()的说明。在单据审核或下达完毕以后,要调用过程InitMenuAndBar(),使某些菜单、控件锁定或解锁,以控制输入。五、 对下一版本的一些建议1 .在本版中,因为生产任务单没有分录,所以很多

57、地方需要进行特殊处理。 在下一版中,所有单据都有分录,故可去掉对生产任务单的特殊判断。2 .单据选单时,加入过滤条件及排序条件,便于快速查找。可考虑做成一个 通用过滤排序条件,对所有选单起作用(主要是日期过滤排序)。3 .本版中,审核、下达两种单据显示状态都未用上,单据的修改界面上就可 进行审核或下达。下一版中可考虑去掉审核、下达两种单据状态。同时将ShowForModeExt和ShowBillType 合并,单据显示类型有以下四种:.Showinput = 0录入(2) .Showedit = 1修改(3) .Showview = 2查看(4) . ShowForPriceCal = 3核算

58、时单据的单价金额修改4 .目前单据的DoAction 较混乱,有的功能定义比较不通用,或功能不够强大(如表头和分录之间的关联动作较欠缺)。下一版中可改造过程DoActions() 和 DoAction(),以及模版 ICTemplate 和 ICTemplateEntry 中的Action和RelationID 字段,定义更具通用性的动作关联,以便于自 定义。还可加入一个是否使用公式选项,以控制某些关联动作。5 .目前单据较慢,一个主要原因是较多的调用了中间层。下版中应尽量减少 中间层的调用次数,或将调用合并。6 .改造单据保存的逻辑控制。单据构造时,从中间层取得模版,保存单据时, 又将该模版

59、传回中间层,显得有些冗余。对于数据的合法性校验,一般都 是在客户端做的,中间层做的极少。可考虑加强中间层的数据校验功能。7 .自定义单据中,应加入一个恢复功能,即当用户的自定义操作影响到现有 单据的正确性时,可快速恢复原单模版。这样用户也可放心使用。单据选单的实现说明选单生成是指从已有的一张单生成另一类型的新单的过程。,实现思路:通过模板方式实现,模板记录源单的表、字段,和与新单之间的字段对应关系,以及其他要用到的信息。 通过模板记录的源单的表字段信息, 构建源单数据记录集; 通过字段对应 关系信息,可以确定源单数据记录集中的字段与新单字段的对应关系,并通过这种对应关系回填单据。二,实现方式:1) 建立选单关系模板选单模板包括ICSelBills , ICTableRelation 两张表。1、ICSelBills :记录源单和新单之间的字段对应关系和要使用的关键字段。一种选单关系可以根据单据模板(ICTemplate )的FID和FFieldName来确定:FID表示新单的模板号,FfieldName表示源单(具体表示是那种单由FselBill字

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!