《显示公式的表头表体处理(共5页).doc》由会员分享,可在线阅读,更多相关《显示公式的表头表体处理(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上以材料采购合同为例:具体单据模板及脚本代码间单据类型 R8 。需求:(1)在表头通过参照客商档案公式带出 “开发商(甲方)名称”和“开发商(甲方)编码”,“开发商(乙方)名称”和“开发商(乙方)编码”,并将 “开发商(甲方)”的PK值”和“开发商(乙方)”的PK值”保存到数据库中;(2)在表体通过参照存货档案公式带出“材料名称”和“材料编码”、“计量单位”,同时提取出材料的存货管理档案ID和存货基本档案ID并和计量单位一同保存到数据库中。设计:实现上述需求的方法有很多,下面这种方法只是个人觉得比较安全清晰的一种设计方法:各页面标签如下图所示表头:我们在表头设计两个“开
2、发商(甲方)名称”项目标签(其中一个为系统项目,其项目主键为pk_kfsid,为参照类型,参照客商档案,存PK值;另一个为自定义项目,其项目主键为vkfsname,为字符型,),同时增加一个“开放商(甲方)编码”的自定义项目,其项目主键为vkfscode ,并增加一个my_pk_cubasdoc的自定义项目以作为中间变量存储字符型客商管理档案pk值,不显示。供应商(乙方)同样按照上面步骤进行设置,其中my_pk_cubasdoc2也是一个中间变量,不显示。其设计思想是,由用户通过选择参照类型的“开发商(甲方)名称”带出客商管理档案pk值,通过编辑公式取出基本档案pk值,最后带出名称和编码。设置
3、两个开发商名称的目的是为了在卡片和列表两种不同模式下能够交替显示名称。这是表头,下面讲讲表体:首先把系统的项目标签“存货基本档案ID”(pk_chbasdocid)和“存货管理档案ID”(pk_chmandocid)设置为不显示,他们用来存储材料的两个档案的pk值,然后新增“材料编码”和 “材料名称”两个自定义项目,其中“材料编码”(vmatecode)为参照类型(存货档案),“材料名称”(vmatename)为字符型类型;另外除系统自带的用于存储计量单位PK值的字符型的项目“计量单位”(vmeasunit)外,还添加了一个参照型的自定义项目“计量单位”(vmeasunit2),用于显示计量单
4、位的名称。其设计思想是:由“材料编码”(vmatecode)参照取出“存货管理档案ID”,然后再由编辑公式分别带出“存货基本档案ID”(pk_chbasdocid)、“材料名称”(vmatename)、“计量单位”(vmeasunit)、“计量单位”(vmeasunit2)。具体实现:下面将以表格形式给出单据模板中各个字段的设置(包括命名、属性、公式等),具体还可以参照我的单据模板(R8):表头:项目主键显示名称卡片是否显示列表是否显示数据类型显示公式编辑公式开发商(甲方)名称pk_kfsid是否参照客商档案脚本1脚本2开发商(甲方)名称vkfsname否是字符脚本3开发商(甲方)编码vkfs
5、code是是字符供应商(乙方)名称pk_gysid是否参照客商档案供应商(乙方)名称vgysname否是字符供应商(乙方)编码vgyscode是是字符my_pk_cubasdocmy_pk_cubasdoc否否字符my_pk_cubasdoc2my_pk_cubasdoc2否否字符脚本1:my_pk_cubasdoc2-getColValue(bd_cumandoc,pk_cubasdoc,pk_cumandoc,pk_gysid);my_pk_cubasdoc-getColValue(bd_cumandoc,pk_cubasdoc,pk_cumandoc,pk_kfsid);vgyscode
6、-getColValue(bd_cubasdoc,custcode,pk_cubasdoc,my_pk_cubasdoc2);vgysname-getColValue(bd_cubasdoc,custname,pk_cubasdoc,my_pk_cubasdoc2);vkfscode-getColValue(bd_cubasdoc,custcode,pk_cubasdoc,my_pk_cubasdoc);vkfsname-getColValue(bd_cubasdoc,custname,pk_cubasdoc,my_pk_cubasdoc);脚本2:my_pk_cubasdoc-getColV
7、alue(bd_cumandoc,pk_cubasdoc,pk_cumandoc,pk_kfsid);vkfscode-getColValue(bd_cubasdoc,custcode,pk_cubasdoc,my_pk_cubasdoc);vkfsname-getColValue(bd_cubasdoc,custname,pk_cubasdoc,my_pk_cubasdoc);脚本3:my_pk_cubasdoc2-getColValue(bd_cumandoc,pk_cubasdoc,pk_cumandoc,pk_gysid);vgyscode-getColValue(bd_cubasdo
8、c,custcode,pk_cubasdoc,my_pk_cubasdoc2);vgysname-getColValue(bd_cubasdoc,custname,pk_cubasdoc,my_pk_cubasdoc2);项目主键显示名称卡片是否显示列表是否显示数据类型显示公式编辑公式存货基本档案IDpk_chbasdocid否否字符存货管理档案IDpk_chmandocid否否字符脚本4材料编码vmatecode是是参照存货档案脚本5“关键字名”为 pk_chmandocid材料名称vmatename是是字符计量单位vmeasunit否否字符计量单位vmeasunit2是是参照计量档案脚本6
9、脚本7“关键字名”为vmeasunit脚本4:pk_chbasdocid-getColValue(bd_invmandoc,pk_invbasdoc,pk_invmandoc,pk_chmandocid);vmatecode-getColValue(bd_invbasdoc,invcode,pk_invbasdoc,pk_chbasdocid);vmatename-getColValue(bd_invbasdoc,invname,pk_invbasdoc,pk_chbasdocid);vmeasunit-getColValue(bd_invbasdoc,pk_measdoc,pk_invbas
10、doc,pk_chbasdocid);脚本5:pk_chbasdocid-getColValue(bd_invmandoc,pk_invbasdoc,pk_invmandoc,pk_chmandocid);vmatename-getColValue(bd_invbasdoc,invname,pk_invbasdoc,pk_chbasdocid);vmeasunit-getColValue(bd_invbasdoc,pk_measdoc,pk_invbasdoc,pk_chbasdocid);vmeasunit2-getColValue(bd_measdoc,measname,pk_measdo
11、c,vmeasunit);脚本6:vmeasunit2 -getColValue(bd_measdoc, measname,pk_measdoc,vmeasunit);脚本7:vmeasunit-vmeasunit2;常见出错问题的避免:(1) 由于我们的脚本编译器,会对代码进行优化操作,所以在写脚本时,尽量把涉及相同表相同字段的公式写在一起,有时候比如几个字段的显示公式尽量写在一起,避免脚本编译器在进行脚本优化后的代码出错。(2) 有时候表单参照选定某个值后,表达界面没有刷新,这种错误常常是由于在 ClientUI类的afterEdit方法的末尾未添加界面刷新操作: getBillCardP
12、anel().execHeadEditFormulas(); (3) 保存后,表头由公式带出的自定义项目的值在界面上显示为空。具体如下图所示,开发商编码和供应商编码在保存后均显示为空,但切换到列表状态下却有值。在吴垌沅的努力下,此问题目前得已解决,请在ui包的UI控制类的方法isLoadCardFormula返回值改为true. public boolean isLoadCardFormula() return true; (4) 关于“批量执行公式之顺序问题”(由 恩平 总结)getColValue是一个很常用的公式,用于数据库取数,在业务代码中大量使用;公式解析器支持批量执行取数公式,但如
13、果同一批公式中存在相互关系,则要注意公式的前后顺序。举例如下:有两个取数公式:(1)bb-getColValue(tableA, pk_b, pk_A, aa);(2)bName-getColValue(tableB, name, pk_B, bb);一:第(2)个公式是根据第(1)个公式的结果来取值的,很容易想到公式(2)应该放在公式(1)之后;二:假设还存在一个公式(0)也是在tableB中取数:(0)bCode-getColValue(tableB, code, pk_else, pkelse)由于我们在后台批量执行的代码中作了优化,对于同一个表的多个取数操作会打包一次执行。所以,如果按照(0)(1)(2)的顺序送入公式,则由于(0)和(2)是从同一张表中取数,会导致(2)的实际取数操作在(1)之前执行,这样就不能得到正确的公式结果。故,上述3个公式的顺序应该是(1)(0)(2)或者(1)(2)(0)均可。总结一下,如果公式(2)是根据公式(1)的结果来取值的,则公式(2)应该放在公式(1)之后;并且和公式(2)从同一张表中取值的其他公式也必须放在公式(1)的后面!专心-专注-专业