版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
供应链开发帮助手册金蝶软件(中国)有限公司研发中心K/3供应开发组解释目录 K/3老单单据平台开发手册 4 整体框架和设计思路 4一、 设计思路 4二、 UML图 4 模版 5一,单据构造模版: 5二、选单模版 9三,单据控制 10四,单据套打 10 单据调用接口 11一、 客户端调用接口 11二、 中间层调用接口 13 单据流程 15一、 新建单据流程 15二、 查看或修改单据流程: 16三、 录单流程: 17四、 单据的保存流程 22五、 对下一版本的一些建议 24 单据选单的实现说明 25一,实现思路: 25二,实现方式: 25 单据模板Action说明文档 28一、 概述 28二、 关键词 28三、 分类 28四、 功能标准定义 28五、 标准过程指南 31 单据打印、连续打印、合并打印实现说明 32一、 GUI上单据打印的实现方式: 32 常见问题分析 32一、 对于KDInputTool.DLL组件的日期控件的日期格式 32二、 对于Spread控件的取值赋值 33三、 模板数据冗余: 33四、 选单结构不灵活: 34五、 ICTemplate表、ICTemplateEntry表的问题 34六、 单据选单的关联关系: 34 单据二次开发手册 34 属性 35 方法 36 用户可实现自己功能的事件 37 中间层事件 40 应用示例 41 K/3序时簿开发手册 45 整体框架和设计思路 45 模版 45一、 ICListTemplate:该表反映了供需链所有序时簿的总体情况。 45二、 ICChatbilltitle:该表反映了所有序时簿的显示的字段详细情况。 46三、 ICListToolbar:该表反映了序时簿菜单和工具栏详细情况。 47四、 ICTableRelation:选单中涉及的所有表之间的连接关系。 47 接口函数描述 48一、 相关组件 48 序时簿二次开发 48一、 创建一个中间层组件,实现一个接口 48二、 注册组件 49 常见问题分析 50一、 模板数据冗余: 51二、 序时簿几种状态 51 采购价格管理开发手册 51 流程 51 表结构 51 代码结构 51 销售价格/折扣管理开发手册 51 流程 51 表结构 51 代码结构 52 进出口开发手册 52 流程 52 表结构 52 代码结构 52 发票钩稽开发手册 52 流程 52 表结构 52 代码结构 52 盘点开发手册 52 盘点作业 52 盘点方案查询 53 盘点方案新建 54 盘点方案删除 54 备份盘点数据 55 盘点数据引入/引出 57 盘点选单 57 生成盘点单据 57 序列号开发手册 59 流程 59 表结构 59一、 序列号流转表ICSerialFlow表结构: 59二、 序列号表ICSerial 59三、 ICSerial_FXXX 60 基本操作 61一、 新增单据 61二、 审核单据: 62三、 删除单据: 62四、 作废单据: 62五、 更新库存后序列号状态单据类型对应表: 63 代码结构 63 入库核算开发手册 64 流程 64 表结构 64 代码结构 64 委外核销开发手册 64 流程 64 表结构 64 代码结构 64 出库核算开发手册 64 表说明 64 算法说明 65 代码结构 65一,所有计价方法的入口函数: 65二,每一种计价方法的处理逻辑: 66 核算常见问题汇总 69 出库核算核算报错问题 70 凭证开发手册 72 表说明 72 凭证模版 72 代码结构 74 凭证常见问题说明 75 分销开发手册 75 流程 75 表结构 75 代码结构 81 门店开发手册 81 流程 81 表结构 81 代码结构 81 销售前台开发手册 81 流程 81 表结构 81 工业报表开发手册 81 简介: 81 主要函数: 82 处理过程顺序图: 83 代码结构 83 门户报表开发手册 83 流程 错误!未定义书签。 表结构 错误!未定义书签。 代码结构 错误!未定义书签。 VB编程经验总结开发手册 86 VB中精确数据的四舍五入处理 86 假设VB中有如下的变量声明: 87 VB中的对象是自动回收的,类似java 87 对对象变量赋值应该用setobj=AnOtherObj这种方式 88 VB中字符串的内部存储格式是Unicode,它可以自动转化为ANSI字符(单字节字符)或者DBCS字符(双字节字符) 88 字符串的比较应该是用strCmp函数,而不是简单的用=号 89 VB中字符串处理的函数有三种版本: 89 VB程序代码中的以下标识符不能含有双字节字符: 91K/3老单单据平台开发手册整体框架和设计思路设计思路UML图模版单据主要是在模版的基础上实现的。单据的模版有以下几张表:ICTransactionType,ICTemplate,ICTemplateEntry,ICSelBills,ICTableRelation。前三张表用于构造显示单据,后两张表用于选单。一,单据构造模版:1.ICTransactionType:该表反映了供需链所有单据的总体情况。ICTransactionTypeFbrNoFID单据事务类型内部IDFROB红蓝字标记:1表示该单据区分红蓝字,0表示没有红蓝字之分Fname单据名称Ftype单据类别FtempalteID单据模版ID(与ICTemplate,ICTemplateEntry表中的FID对应FvchTempalteID(未用)FheadTable单据表头对应的数据库表名FentryTable单据表体对应的数据库表名FcheckPro(未用)FformWidth单据录入时的缺省宽度FformHeight单据录入时的缺省高度FfixCols单据的固定列数目2.ICTemplate:该表反映了所有单据的表头的详细情况。ICTemplateFID单据模版IDFctlIndex表头控件编号,连续且唯一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(核算项目表)中的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是否打印(暂未用)Ffontname字体类型FfontSize字体大小FselBill如果该控件可以选择其它单据作为数据的输入来源,则该值对应为被选择单据的叙事簿ID(ICListTemplate表中的FID)FmustInput是否必须录入Ffilter过滤条件。一般用于选单或查找某类基础资料时过滤掉一些不符合选择条件的单据或基础资料。FrelationID表示哪一个字段的改变会导致当前控件值的改变。它的值为对应字段的数据库字段名。如有多个这样的字段可以用逗号隔开。Faction为前面Frelationid定义的字段的改变时该执行什么样的操作。例如汇率这个字段,它的FrelationID为FcurrencyID,Faction为“.,FExchangeRate”表示当改变币别时,把对应币别的默认汇率填入汇率栏中。FlockA为1表示选单过来的数据不能再添加删除分录FROB1只在蓝字单据中可见,2只在红字单据中可见3在红蓝字单据中都可见FdefaultCtl系统自带控件为1,自定义的为0FvisForBillType控件在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。FVBACtlType自定义单据用来区分是什么类型的控件有Frame,Label,Kdtext三种FrelateOutTbl如果该控件为其它选择类型的属性则为1例如:销售发票有个客户开户银行账号就是此类FSystemMustInputItem如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。3.ICTemplateEntry:该表反映了所有单据的分录的详细情况。ICTemplateEntryFID单据模版IDFctlOrder分录列的排列前后顺序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自定义单据使用的整数类型FlookUpCls如为查找类型则与表t_ItemClass(核算项目表)中的FItemClassID对应。或者为辅助资料的ID(t_submestype中的FtypeID)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”表示当数量或单价改变时,计算数量与单价的乘积,并填入金额列中。FmustInput是否必须录入Ffilter过滤条件。一般用于查找某类基础资料时过滤掉一些不符合选择条件的基础资料。FSaveRule该列值的保存规则,例如“U:0”表示该列的值不能为0。FdefaultCtl系统自带分录列为1,自定义的为0FvisForBillType该列在各种状态下的可见性:新增、修改、察看、审核、下达。用一个五位的二进制数表示,可见则对应位为1,否则为0。常用值:0、31。FRelateOutTbl如果该分录列为其它选择类型的属性则为1例如:销售发票有个客户开户银行账号就是此类FSystemMustInputItem如果是系统规定必须输入,即使自定义单据也不能把它变为非必录。单据构造模版的基本用途是:根据要显示哪一种单据,首先去ICTransactionType表中获取该种单据的总体信息,包括表头模版号、分录模版号、单据宽高等等。然后根据表头模版号去查表头模版ICTemplate,构造该种单据的表头,根据分录模版号去查分录模版ICTemplateEntry,构造单据的分录。函数:Bills.SetPropDescFSaveRule说明:操作符功能例子备注@该字段不能为空@该字段不能为空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!几列不能全部为空!,FWorkerID,FDeviceIDFWorkerID,FDeviceID不能全部为空A:DEPEND依赖的某一列不能为空FDCSPID保存规则:A:DEPEND,FStockIDFStockID不能为空二、选单模版ICSelbills:选单要取得哪些值,这些值是如何而来的,以及需回填到哪个对应的控件里。ICSelbillsFID单据的模版IDFFieldName单据上可以选单的字段的字段名FdstCtlField回填的目标字段名FselType目标字段的类型:0表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时薄的过滤条件。FDK用于表头控件,表示对于同一个目标字段,该回填值是作为FID或Fname或Fnumber。0:FID1:Fname2:FnumberFcolName源字段的别名Fname源字段名FtableName源表名FtableAlias源表别名Faction用于处理一些需对字段值进行判断,或需要在字段之间进行一些运算的情况。 注意事项:单据头的字段如果有选单数据来源,则必须有三行,分别填入对应的ID,名称,代码。如果没有ID,代码,则随便传入一个数。而且这个顺序不能改变。 2.ICTableRelation:选单中涉及的所有表之间的连接关系。ICTableRelationFtypeid用于序时薄模版FinterID用于序时薄模版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中选出对应的模版信息,拼装成一个SQL语句,执行取得相应的记录集。再根据ICSelbills中的数据回填信息,将该记录集的值回填到对应的目标字段中。三,单据控制 1、ICBillNo ICBillNoFBillID单据ID,对应于ICTransactiontype中的FIDFBillName单据名称FPreLetter前缀名FSufLetter后缀名FCurNo当前单据序号FFormat当前序号的格式FPos 2、ICMaxNum ICMaxNumFTableName表名FMaxNum当前最大的FInterID四,单据套打 1、GLNoteType:单据套打表,记录单据与套打编号的关系。GLNoteTypeFTemplateID单据ID,对应于ICTransactiontype中的FTemplateIDFnoteType单据套打名称FnoteTypeID单据套打ID 2、GLNoteCitation:单据套打关系表,记录单据套打字段的属性。GLNoteCitationFTemplateID单据ID,对应于ICTransactiontype中的FTemplateIDFID在同一单据套打模板中,作为唯一的序列号FNoteTypeID套打ID,对应于GLNoteType中的FNoteTypeIDFcode数据来源字段名FCitationName套打模板取数名称FIsEntry当前字段是否是分录FIsMoney当前字段是否是金额FCtlIndex当前字段在单据中的位置(已经没用)FIsSum当前字段是否要合计FKeyFieldName扩展字段。表示要取FtableName表中的FextFieldName字段,通过FkeyFieldName字段与当前字段关联FExtFieldNameFTableNameFRelationID当前字段的属性标识1:表头2:表体3:汇总4:扩展表头5:主计量单位6:主计量单位数量7:主计量单位单价8:扩展分录 相关说明:FRelationID与FIsEntry不同,FIsEntry是用来在套打定义中区分表头、表体(如:在表头栏里只显示表头字段、表体栏里只显示表体字段),FRelationID是套打在填充数值时,判断字段属性用的。单据调用接口客户端调用接口组件K3Bills.Bill,K3Bills.Bills方法PublicPropertyLetRemoteCnn(ByValstrCnnAsString) 单据的远程SQLServer数据库连接字符串 PublicPropertyLetLocalCnn(ByValstrCnnAsString) 单据的本地ACCESS数据库连接字符串,主要用于套打PublicPropertyLetListRecordset(ByValrsAsADODB.Recordset) 由序时薄等进入单据时,将序时薄上显示的纪录作为一个Recordset传给单据。单据在实现上一条、下一条的浏览功能时,就根据该Recordset去移动与构造。PublicPropertyLetListRSFieldVect(ByValvDataAsKFO.Vector)与ListRecordset相配套,主要用于说明该Recordset中哪个字段代表FinterID(单据内码),哪个字段代表FtranType(单据事务类型)。 ListRSFieldVect是包含若干KFO.Dictionary的一个KFO.Vector,每个Dictionary包含有两个值:FcolName和FISPrimary。当FISPrimary=1时,对应的FcolName的值为单据内码字段名;当FISPrimary=3时,对应的FcolName的值为单据事务类型字段名。PublicPropertyLetbillValueChanged(ByValValueChangedAsBoolean) 设置单据是否经过修改。PublicPropertyGetbillValueChanged()AsBoolean 返回单据是否经过修改,从而可确定显示时是否需刷新数据。PublicPropertyLetNewBillTransType(ByValtranstypeAsLong) 由序时薄新增单据时,新增单据的事物类型。PublicSubSetOpt(ByValIDAsLong,OptionalByValNameAsString) 设置操作员的ID和Name。PublicPropertyLetTheSaleMode(ByValvNewAsEnu_SaleMode)销售方式内销0;外销1;PublicPropertyLetShowForModeExt(ByValvDataAsInteger) 单据显示状态。有六种状态0:ShowForSelectBill,新增单据1:ShowForModifyBill,修改单据2:ShowForViewBill,查看单据3:ShowForCheckBill,审核单据4:ShowForConveyBill,下达单据5:ShowForPriceCal,核算时单据的单价金额修改PublicSubShow(ByValeBillClsAsEnu_BillCls,ByValShowTypeAsEnu_ShowBillType)显示想要调用的单据EbillCls:单据的类型PublicEnumEnu_BillClsBillBuyReq=100 采购申请单据billBuyOrder=101 采购订单BillBuyRec=102 采购收货单据BillBuyCancel=112 采购退货单据BillBuyInvoice=103 采购发票BillCheckedInStock=200 验收入库单据BillSendMaterials=201 领料发货单据BillStockMove=202 仓库调拨单据BillStockAdjust=204 库存调整单据BillProductOrder=207 生产订单BillSellOrder=300 销售订单BillSellSendBackGoods=311 销售退货单据BillSellSendGoods=301 销售发货单据BillSellInvoice=302 销售发票BillReqForPrice=400 询价问价单据BillAdjustPrice=500 调价单据billAll=1000 所有单据EndEnumEshowType:单据的状态PublicEnumEnu_ShowBillTypeShowinput=0 录入Showedit=1 修改Showview=2 查看Showcheck=3 审核showconvey=4 生产订单下达EndEnum中间层调用接口组件BillDataAccess.SaveData方法SaveBillEx(ByValsDsnAsString,ByValBillVectAsKFO.Vector)AsObject参数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型,默认值为FalseEntryKeyWord:分录关键字,为string型UserID:操作者ID,为long型,默认值为16394UserName:操作者名称,为string型AppendItem:是否追加了物料,为boolean型SplitBill:是否拆单,为boolean型AcctName:帐套名称,为string型CurBillUpStockWhenSave:保存库存单据时,是否更新库存,为long型,0表示否,从已有单据的FUpStockWhenSave字段获得,默认为0。。IgnoreCredit:是否进行信用控制,为boolean型,默认值为TrueEntrySQL:单据体数据的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),然后再调用过程PublicSubShow(ByValeBillClsAsEnu_BillCls,ByValeShowTypeAsEnu_ShowBillType),显示想要新建的某种单据,对于新建单据,参数eShowType应传值为0。过程Show通过激发窗体frmBill的Form_Load()事件,显示新建的单据样式。Form_Load()事件主要完成以下操作:调用函数FillBillTypeCtl(ByValctlAsObject,OptionalByValtranstype),从表ICTransactionType中取出新建单据类(可能包括多种单据)的基本属性值,包括单据名称、单据模版号、单据对应的数据库表名、单据窗体宽高等等。将每种单据的属性值拼成一个字符串,作为cmbTransType(comboBox控件)的一个列表值,依次添加到cmbTransType中。激发cmbTransType的cmbTransType_Click()事件,根据当前cmbTransType的列表值,取出该种单据有关属性值,设置窗体的宽高及固定列,再由该属性列表值通过调用过程BuildBill(ByValstrTemplateIDAsString)建立整张单据(包括单据头及单据分录)。设置菜单及工具条的Visible以及Enabled属性。设置套打的本地、远程的连接属性,以及套打模版号。过程BuildBill(ByValstrTemplateIDAsString)是构建单据的关键。它完成以下操作:根据传过来参数strTemplateID取得单据模版号、单据表头对应的数据库表名、单据分录对应的数据库表名、单据事务类型内部ID。根据单据模版号,从表ICTemplate中取得表头模版,从表ICTemplateEntry中取得分录模版。根据分录模版,调用过程BuildEntryCtls()构造单据的分录。根据表头模版,调用过程BuildHeadCtls()构造单据的表头。过程BuildEntryCtls(rsTmpEntryAsADODB.Recordset)完成单据分录的构造工作,参数rsTmpEntry是从ICTemplateEntry取出的一个记录集,它反映了该单据所有分录列的属性值,也就是该单据的分录模版。该过程主要是将分录模版信息存储在分录属性数组TentryCtl中,并根据这些模版信息去设置单据分录的列数、列宽、列标题、数据类型等属性。过程BuildHeadCtls(RstmpAsADODB.Recordset)完成单据头的构造工作,参数rsTmp是从ICTemplate取出的一个记录集,它反映了该单据所有表头的属性值,也就是该单据的表头模版。该过程主要是将表头模版信息存储在表头属性数组THeadCtl中,并根据这些模版信息去设置单据表头控件的大小、位置、标题、数据类型等属性。查看或修改单据流程:对于由报表或序时薄进入单据,首先设置单据的属性值(包括RemoteCnn、LocalCnn、SetOpt、TheSaleMode、ShowForModeExt、NewBillTransType,以及ListRecordset、ListRSFieldVect),然后再调用过程PublicSubShow(ByValeBillClsAsEnu_BillCls,ByValeShowTypeAsEnu_ShowBillType),显示想要修改的某种单据。如果是修改单据,参数eShowType传值为1;如果是查看单据,参数eShowType传值为2。查看或修改单据的主要操作也是在窗体frmBill的Form_Load()事件中完成。流程如下:调用过程MoveBill取得显示单据的事物类型和单据内码调用过程MoveBill取得显示单据的事物类型和单据内码设置套打的本地、远程的连接属性,以及套打模版号设置菜单及工具条的Visible以及Enabled属性,设定表头控件及分录列的锁定状况调用函数FillBillData,根据事务类型及单据内码,去数据库种取得该张单据的所有相关数据,并将其值填入到空白单据中。调用函数设置套打的本地、远程的连接属性,以及套打模版号设置菜单及工具条的Visible以及Enabled属性,设定表头控件及分录列的锁定状况调用函数FillBillData,根据事务类型及单据内码,去数据库种取得该张单据的所有相关数据,并将其值填入到空白单据中。调用函数FillBillTypeCtl新建一张同种事务类型的空白单据(其过程与新建单据一样)函数PublicFunctionFillBillData(ByValInterIDAsLong,ByValtranstypeAsInteger)AsInteger完成将某张单据数据填入空白单据的操作,参数InterID指该张单据的内码,参数transtype指该张单据的事物类型。这两个参数可确定唯一一张单据。FillBillData的流程如下:根据单据内码以及单据表头对应的数据库表名,取得单据表头信息记录集。根据单据内码以及单据表头对应的数据库表名,取得单据表头信息记录集。逐个读取该记录集,将其数据填入相应的分录列中以及分录控件数组TEntryCtl中通过单据内码以及单据分录对应的数据库表名,取得单据分录信息记录集。逐个读取该记录集,将其数据填入相应的表头控件中以及表头控件数组THeadCtl中逐个读取该记录集,将其数据填入相应的分录列中以及分录控件数组TEntryCtl中通过单据内码以及单据分录对应的数据库表名,取得单据分录信息记录集。逐个读取该记录集,将其数据填入相应的表头控件中以及表头控件数组THeadCtl中录单流程:在录单的过程中,表头控件及分录列都设置了一定的属性,即只能录入特定的数据。对于基础资料和选单,都有两种录入方式:按F7或F8选取或手工直接录入。其它的如数量、单价、单据号码等,就只能手工录入。过程PrivateSubLookUp(OptionalByValbQuickViewAsInteger=1)实现了按F7或F8键查看并选取某项基础资料数据的功能。参数bQuickView=0表示是查看基础资料详细的树状图,对应的是F7键;bQuickView=1表示是查看基础资料编码列表,对应的是F8键。LookUp的主要流程如下:调用函数FillBillDataExt,将记录集数据依次填入到相应的表头控件及分录列中。由选单模版以及上述对象,取得一个记录集,该记录集包含了选单需要返回的所有表头和分录数据是否退出在序时薄上选中了一条以上的记录由选单序时薄模版号及过滤条件调用序时薄,显示选单序时薄根据选单模版及当前控件的过滤条件构造选单序时薄过滤条件取得返回的InterID、Name、Number等信息,并将其值赋与当前活动控件是返回时选中某一条基础资料否退出设置过滤条件,并根据基础资料查看类别显示相应的基础资料查看窗体基础资料当前活动控件查看类型按F7或F8查看选单调用函数FillBillDataExt,将记录集数据依次填入到相应的表头控件及分录列中。由选单模版以及上述对象,取得一个记录集,该记录集包含了选单需要返回的所有表头和分录数据是否退出在序时薄上选中了一条以上的记录由选单序时薄模版号及过滤条件调用序时薄,显示选单序时薄根据选单模版及当前控件的过滤条件构造选单序时薄过滤条件取得返回的InterID、Name、Number等信息,并将其值赋与当前活动控件是返回时选中某一条基础资料否退出设置过滤条件,并根据基础资料查看类别显示相应的基础资料查看窗体基础资料当前活动控件查看类型按F7或F8查看选单取得序时薄返回的一个取得序时薄返回的一个KFO.Vector对象,该对象包含了所选单据的FInterID和FEntryID,由此两参数,可唯一确定选择了那些单据及分录。函数PublicSubFillBillDataExt(_ByValRsTransAsADODB.Recordset,_ByValBillTemplateIDAsString,_ByValFieldNameAsString,_OptionalByValSelBillData,_OptionalByValAction)完成将选单返回数据填入到表头控件及分录列中。参数说明如下:RsTrans:选单返回数据记录集BillTemplateID:选单模版号FieldName:选单控件名SelBillData:选单返回单据的内码及分录号数据集Action:选单控件需执行的某些操作,如是否需要按BOM展开返回的物料,是否需要将物料进行合计。基本流程如下:传入数据传入数据需要展开物料需要合计不需要由参数Action确定是否需要重新定义定义选单返回记录集需要展开物料需要合计不需要由参数Action确定是否需要重新定义定义选单返回记录集按BOM展开返回单据上的所有物料并将其汇总合计。得到一个新的记录集。将该记录集赋给rs按BOM展开返回单据上的所有物料并将其汇总合计。得到一个新的记录集。将该记录集赋给rs对返回单据上的所有物料进行汇总合计,得到一个新的记录集。将该记录集赋给rs将选单返回数据记录集(RsTrans)赋予rs将选单返回数据记录集(RsTrans)赋予rs由模版ICSelBills取得选单数据需回填到那些分录列里由模版ICSelBills取得选单数据需回填到那些分录列里将记录集rs中有关于分录的数据填入到对应分录列中以及以及分录控件数组TEntryCtl中。将记录集rs中有关于分录的数据填入到对应分录列中以及以及分录控件数组TEntryCtl中。调用函数调用函数SetRelateCtl,将记录集rs中有关于表头的数据填入到对应表头控件中以及以及表头控件数组THeadCtl中对于手工录入选单号码进行选单,首先是根据录入的单据号码,构造一个KFO.Vector对象。该对象同由序时薄选单返回的对象性质是一致的,都包含了所选单据的FInterID和FEntryID。余下的过程两者都一致,即由该对象取得选单返回数据集,再调用函数FillBillDataExt,将记录集数据依次填入到相应的表头控件及分录列中。对于查找类型的控件,当离开该控件时,要进行一系列的合法性检查(表头控件激发Validate事件,分录控件激发Validate事件和LeaveCell事件)。这些事件里主要通过函数PrivateFunctionGetData(CancelAsBoolean,_bChangedAsBoolean,_OptionalByValbEntryAsBoolean=False,_OptionalByValcolAsLong,_OptionalByValRowAsLong)AsBoolean实现数据合法性检查。该函数通过调用存储过程GetItemDetail返回一个记录集,如果该记录集为空记录集,则控件里的数据不合法,要求重新输入数据或恢复以前合法数据;如果该记录集不为空,则记录集里包含了与当前控件值有关的所有辅助信息。(比如当前控件为物料栏,则该记录集包含了该物料的所用属性值,包括计量单位内码及名称等等。)。对应于当前控件是表头控件或分录列,记录集里的某些值会填入到相应的表头控件数组TheadCtl中或分录控件数组TentryCtl中。在Validate事件或LeaveCell事件中,还会调用一个重要的过程DoActions。该过程完成的操作就是根据当前控件填入的值,在其它与它相关的控件也填入相应的值。(例如录入供应商带出计算方式,录入物料代码带出物料名称,计量单位等等,录入单价,数量后算出金额等等)。DoActions的基本操作是根据填入到THeadCtl数组和TEntryCtl数组中的模版信息FrelationID,找出与当前控件相关的所有控件,将这些控件按照FCtlIndex升序排序,然后按照这个顺序依次调用过程DoAction,完成在某个控件中填入适当的数操作。过程PrivateSubDoAction(ByValParentIDAsLong,ByValIndexAsLong,ByReforiObjAsObject,objTypeAsEnu_ObjType)中定义了模版Faction中每种符号的实际操作意义。参数ParentID指明是哪一个控件激发了DoAction事件,从而导致其它控件的值变化;Index表示当前是轮到处理哪一个控件;oriObj传递表头控件数组或分录控件的引用,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为“=,Ftrack,80”,表示物料计价方法为分批认定时(Ftrack=80),锁定控件不让录入,否则允许录入。“<=”:表示当前控件的值应小于等于某值。例:FrelationID为“FDescount”,Faction为“<=,100”,表示当前格的值应小于等于100。“!”:取分录某几列的值,从左到右依次进行四则运算。运算式中不能包含常量。例:FrelationID为“FAuxQty,FAuxPrice,FQty”,Faction为“!,FAuxQty,*,FAuxPrice”,表示当数量、单价、基本单位数量任一个发生改变时,计算数量x单价的值,填入当前格(金额)。注:“!”完全可被“!1”取代。“!1”、“()”:取分录某几列的值,从左到右依次进行四则运算。运算式中可包含常量。例:FrelationID为“FAuxQty,FAuxPrice,FQty”,Faction为“!,FAuxQty,*,FauxPrice,+,0”,表示当数量、单价、基本单位数量任一个发生改变时,计算数量x单价+0的值,填入当前格(金额)。注:“()”最多只能定义三项之间的运算。主要是用于自定义单据中。 而“!1”则不受限制。可考虑将两者统一。“!2”:特殊计算,由折扣率或折扣额之一计算金额(折扣率或折扣额中某一列必不可见)。例:Faction为“!2,FAmount,*,FTaxRate,/,100;!2,FAuxQty,*,FUniDiscount”,表示当使用折扣率时,计算金额x折扣率/100的值;当使用折扣额时,计算数量x单位折扣额的值。“!3”:前一项与后几项的运算结果进行运算。 例:Faction为“!3,FAuxPrice,*,100,+,FTaxRate,/,100”,表示计算单价x(100+税率/100)的值。注:任何“!”、“!1”式子都可改装为“!3”的式子,因此,可考虑用“!3”替换“!”、“!1”。“!4”前一项与后几项的运算结果进行运算,但数据是取界面上显示的数。注:因为VaSpread的特殊性,界面上看见的数与实际表格里面的数可能有尾差,从而有可能导致计算上的误差,例如在发票上金额与税额的和不等于价税合计。故引入“!4”解决该问题。“&”:取基础资料附带的其他基础资料属性。例:FrelationID为“FcustID”,Faction为“&,FSetID,FSetName,FSetNumber”,表示由供应商带出结算方式的内码、名称、代码。注:可考虑与“.A”合并。“~”:计划价调价单据中,得到物料的记价方法为计划价调价的当前库存数。“*”:处理其他入库单单据头只能录供应商和部门中的一种,其他出库单单据头只能录客户和部门中的一种。“A”:在录入盘赢盘亏单时自动带出某种物料在某个仓库中的帐存数量。“A*”:在录入盘赢盘亏单时仓库改变时自动带出录入的所有物料在该仓库中的帐存数量。“A1”:当数量改变时,相应的改变基本单位数量。“A2”:当基本单位数量改变时,相应的改变数量。单据的保存流程单据保存之前,首先调用函数PreventDirtyData(),以确保当前单据上的数据是正确有效的,然后再调用函数Save()保存单据。函数Save()的主要流程如下:调用函数调用函数CheckMustInput()检查所有必录项是否录入了数据,以及录入的数据是否符合保存规则否退出,要求录入合法数据否退出,要求录入合法数据是是调用函数CheckGuestCredit()对销售订单及销售发票,检查该单据是否没有超出该客户的信用额度,或超出了也继续保存否退出是否对于有分录的单据,检查分录是否录入了数据退出是将表头模版数组TheadCtl、分录模版数组TentryCtl及分录数据、其它相关数据打成一个包将这个包传给中间层,由中间层根据模版及数据构造相应的SQL语句,执行后将该张单据保存到数据库对应的表中否保存完毕是发票单据是将发票传递到应收应付系统保存完毕调用函数CheckGuestCredit()对销售订单及销售发票,检查该单据是否没有超出该客户的信用额度,或超出了也继续保存否退出是否对于有分录的单据,检查分录是否录入了数据退出是将表头模版数组TheadCtl、分录模版数组TentryCtl及分录数据、其它相关数据打成一个包将这个包传给中间层,由中间层根据模版及数据构造相应的SQL语句,执行后将该张单据保存到数据库对应的表中否保存完毕是发票单据是将发票传递到应收应付系统保存完毕单据的审核、下达在单据录入或修改完成以后,可在单据界面直接完成审核与反审核,下达与反下达,结案与反结案的操作(发票除外)。这些操作都是调用中间层K3McheckBill.DLL实现的,具体的操作可参看类K3MCheckBill.CheckNow中的函数CheckBill()的说明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前处理工练习题及参考答案
- 俄语知识测验题目与答案
- 小学六年级科学《光是怎样传播的》探究式教学设计
- 高二化学选择性必修3油脂的结构性质与皂化反应探究式教学设计
- 【知识清单】初中地理八年级二轮复习 农业专题学习任务单
- 【知识清单】初中地理七年级下册:东南亚的自然与人文特点(湘教版)
- 初中八年级英语Unit 5 Play by the rules Starting out教学设计
- 初中英语七年级下册Unit 12 What did you do last weekend单元复习教学设计
- 小学五年级科学《露和霜》探究式教学设计
- 初中九年级英语上册U3 Arts enrich our life Lesson 4教学设计
- 无线列调施工作业指导书
- DLT 5293-2013 电气装置安装工程 电气设备交接试验报告统一格式
- 医疗器械注册申报流程
- 乳腺癌的分子分型
- 门店消防安全培训
- 郑州财税金融职业学院招聘真题
- 六、果实品质形成-课件
- 移动通信网络部署与运维(初级)PPT完整全套教学课件
- 水生生物学绪论HJJ
- GB/T 35980-2018机械产品再制造工程设计导则
- GB/T 22848-2009针织成品布
评论
0/150
提交评论