立即注册 登录
度量快速开发平台-专业、快速的软件定制快开平台 返回首页

admin的个人空间 http://bbs.delit.cn/?1 [收藏] [复制] [RSS]

日志

创建有主从表业务的窗体功能

已有 8721 次阅读2020-7-14 15:05 |系统分类:构建综合

 
平台开发之窗体
主从表业务功能构建
 

1.基本面分析

主从表业务功能,在日常业务中使用比较频繁。顾名思义,主从表业务功能就是有一张主表,有一张或者多张从表(明细表)实现关联的业务,类似于物品采购申请(含一张申请单,一张采购明细单)这类的业务功能,我们都称之为主从表业务功能。
本手册就以为采购订货业务来开展主从表业务功能构建方法。
 
采购订货,一般都是一个订货的基本信息,一个订货的明细单。在功能设计考量时,这种情况,就不适合以前窗体简单的增删改查。也就是说,必须用两个或者多个表、窗体部件,来组合成一笔采购订货单。
如下图所示,上面是单据的基本信息(记录部件),下面就是订货的明细(网格部件)。
 

2.实现思路

(1) 确定有那些字段,字段的类型,然后创建数据库表,一个基本信息表,一个明细表。
(2)创建业务表
(3)创建窗体。实现新增、修改、删除、查看、刷新、安时间检索等功能。
查看窗体,上面是基本信息,下面是明细,都采用网格部件。
编辑窗体,上面是基本信息,采用记录部件,下面是单据明细,采用网格部件。
效果如下图所示:
 

1.确定数据库表字段、类型

采购基本信息表:ID、单据编号、制单日期、制单人、制单人ID、部门、部门ID、供应商、结算方式、货运方式、发票类别、发票号码、送货地址、备注 。
采购明细表:ID、配件编号、配件名称、规格、单位、数量、单价、金额、采购ID(与采购基本信息表的ID字段对应) 。
 

2.创建数据库表结构

数据库—默认(default)中新建一个“采购订货基本信息”表,具体操作步骤如下图所示:
因为我们要做的是窗体开发,所以不勾选“创建为系统流程表单”;同时主键名称、类型一般为系统默认,不需更改。点击按钮,进入表字段设计界面:
 
 
 
数据库表字段的创建,由于比较简单,这里就不做过多介绍
创建好的2张表,如下图所示:
 
 
 
 
 
我们先在业务表中添加一个“采购订货信息”的目录;具体步骤如下图所示:
 
 
一个数据库表,一般我们要创建2张业务表,类型分别是读写SQL、只读SQL。
选择目录,点击“新建业务表”,就出现下图。分别创建只读SQL、读写SQL。
 
 
 
新增完成后,选中业务表,点击“内容构建”,选择本个项目的数据库表。把字段全选勾上,最后点击保存,就创建成功了。
注意:读写SQL的表业务,要加变量ID。主要用于在修改、查看某条数据时,根据传入的ID值查询到该条数据的具体内容
 
创建好之后的4张业务表,如下图所示:
 
注意:采购订货明细,需要设置变量,采购ID;采购订货基本信息编辑,需要设置变量,ID;采购订货明细编辑,需要设置变量,采购ID。
智能窗体,一般我们需要创建2个。一个用来显示数据,一个用来新增时编辑数据,但需要多个业务表组合构建的功能,就不止创建2个窗体了。
 
 

1.创建数据编辑窗体

如下图所示,需要拖一个记录部件,一个网格部件到窗体。选择业务表类型为读写的。上面是采购订货基本信息表,下面是采购订货的明细表。
 
业务表添加完之后,就修改窗体的标题,改为采购订货编辑;然后调整窗体的部件。
 
调整格式之后的编辑界面:
 

1.1保存按钮

保存按钮,用于保存采购订货信息新增的数据。
 
具体代码如下:
'提交单元和数据到行
网格部件1.PostEditor()
'提交行数据到DataTable
网格部件1.GridView.UpdateCurrentRow()
'批量更新采购ID字段的值
网格部件1.SetColumnValue("采购ID",记录部件1.GetFieldValue("ID"),1)
 
'这儿操作数据库。
记录部件1.SaveData()
网格部件1.SaveData()
 
'判断事务执行结果
if CommitTrans()=false then
       showerror(GetTransMessage())
end if   
ShowInformation("保存成功")
me.Close()
 
 
知识点:网格部件1.SetColumnValue("采购ID",记录部件1.GetFieldValue("ID"),1),用于批量更新采购ID字段的值。也就是说把采购明细的采购ID,批量更新为采购基本信息表的ID,这样就形成主表与从表的对应关系。如下图所示:
 

1.2取消按钮

直接关闭新增的数据,不保存。用于填写错误,或者其他情况。
 
具体代码如下:
'关闭窗体方法
me.Close()
 
 

1.3删除选中行按钮

主要用于新增采购订货的明细数据,因为明细数据是一条条的,如果某条数据填写错误,那么我们就可以选中想删除那行,点击“删除选中行”就能删除数据。
 
具体代码如下:
'如果该行数据不为空,执行删除方法
if isnull(网格部件1.GetFocusedRowValue("ID")) = false then
       网格部件1.DeleteFocusedRow()
end if
 
 
知识点:DeleteFocusedRow() 主要用于删除网格部件的焦点行,不会删除数据库中数据。建议用在保存之前比较合适。
 

1.4事件管理的代码

编辑窗体的事件管理,主要写3段代码。新增、修改、查看,对应的是采购订货信息窗体新增、修改、查看传过来的参数。
参考截图如下:
 
具体代码如下:
'传入的参数为"新增"时,执行以下操作
if Me.Input1="新增" then
   '新增时窗体的显示名为:"新增采购订货信息"
   me.FormTitle = "新增采购订货信息"
   '新增一条数据
   记录部件1.AddNewRow()
   '刷新数据
   网格部件1.RefreshData()
end if
 
'传入的参数为"修改"时,执行以下操作
if me.Input1="修改" then
    '修改时窗体的显示名为:"修改采购订货信息"
       me.FormTitle="修改采购订货信息"
       '设置业务表变量值
       记录部件1.SetVaribleValue("ID",me.Input2)
       记录部件1.RefreshData()
       网格部件1.SetVaribleValue("采购ID",me.Input2)
       网格部件1.RefreshData()
end if
 
'传入的参数为"查看"时,执行以下操作
if me.Input1="查看" then
   '查看时窗体的显示名为:"采购订货信息查看"
       me.FormTitle="采购订货信息查看"
       '设置业务表变量值
       记录部件1.SetVaribleValue("ID",me.Input2)
       记录部件1.RefreshData()
       网格部件1.SetVaribleValue("采购ID",me.Input2)
       网格部件1.RefreshData()
      
       '设置部件只读
       Me.SetPartReadOnly(记录部件1,true)
       Me.SetPartReadOnly(网格部件1,true)
      
       '设置按钮只读
       Me.SetFunctionVisible("保存",false)
       Me.SetFunctionVisible("取消",false)
       Me.SetFunctionVisible("删除选中行",false)
end if
 
 

2.创建数据显示窗体

如下图所示,需要拖两个网格部件到窗体。选择业务表类型为只读的。上面是采购订货基本信息表,下面是采购订货的明细表。
 
 
 
 
 
业务表选择后,就需要给这个窗体起个名字。点击红框框上的蓝色区域,修改窗体的名字,或者窗体大小。修改之后,点击左上角的“保存”按钮。
例如在这里,我们就取名叫做:采购订货。
 
上一步保存之后,可以点击运行按钮测试,会发现打开的窗体是一片空白。这是因为我们没有在事件管理,添加刷新的方法。打开事件管理,选择加载事件,智能向导,把网格部件1、网格部件2,的刷新数据方法添加进去。这时我们在点击运行,窗体就有数据了(图二)。
 
 
数据显示的窗体做好后,我们就需要做增、删、改、查功能。对接上文的采购订货编辑窗体。
 

2.1新增按钮

新增按钮,是指新增一个采购订货的编辑窗体,用来填写数据。首先需要打开采购订货编辑窗体,再传给‘新增’参数过去,最后刷新主表和从表的数据。
截图如下:
 
具体代码如下:
'打开智能窗体,窗体位置: 项目窗体\采购订货信息\*采购订货编辑*
dim form1 = 创建窗体("65dc49f6-d570-4366-95e6-29fd24825beb")
form1.Input1="新增"
form1.ShowDialog()
网格部件1.RefreshData()
网格部件2.RefreshData()
 
 
新增时,调用的采购订货编辑窗体,事件管理加载事件里的代码。
具体代码如下:
'传入的参数为"新增"时,执行以下操作
if Me.Input1="新增" then
   '新增时窗体的显示名为:"新增采购订货信息"
   me.FormTitle = "新增采购订货信息"
   '新增一条数据
   记录部件1.AddNewRow()
   '刷新数据
   网格部件1.RefreshData()
end if
 

2.2修改按钮

修改按钮,是指修改采购订货的编辑窗体的数据。首先需要打开采购订货编辑窗体,再传给‘修改’参数过去,再'获取焦点行"ID"字段的值,最后刷新主表。
截图如下:
 
具体代码如下:
'打开智能窗体,窗体位置: 项目窗体\采购订货信息\*采购订货编辑*
dim form1 = 创建窗体("65dc49f6-d570-4366-95e6-29fd24825beb")
form1.Input1="修改"
form1.Input2=网格部件1.GetFocusedRowValue("ID")
form1.ShowDialog()
网格部件1.RefreshData()
 
修改时,调用的采购订货编辑窗体,事件管理加载事件里的代码。
具体代码如下:
'传入的参数为"修改"时,执行以下操作
if me.Input1="修改" then
    '修改时窗体的显示名为:"修改采购订货信息"
       me.FormTitle="修改采购订货信息"
       '设置业务表变量值
       记录部件1.SetVaribleValue("ID",me.Input2)
       记录部件1.RefreshData()
       网格部件1.SetVaribleValue("采购ID",me.Input2)
       网格部件1.RefreshData()
end if
 

2.3删除按钮

删除按钮,是指删除页面选中的数据,或者删除数据库中的数据。
截图如下:
 
 
具体代码如下:
   '如果选择了数据,就执行下面的。
if 网格部件1.FocusedRowHandle>=0 then
   '询问是否确定删除
if ShowQuestion("确定单据编号:"&网格部件1.GetFocusedRowValue("单据编号")&" 的相关数据吗?删除后不能恢复。") then
   '开始事务
   BeginTrans()
   ExecuteNonQuery("delete 采购订货基本信息 where ID='"+网格部件1.GetFocusedRowValue("ID")+"'")
   ExecuteNonQuery("delete 采购订货明细表 where 采购ID='"+网格部件1.GetFocusedRowValue("ID")+"'")
   dim b= CommitTrans()       
     '判断事务执行结果
      if b=false then
          showerror(GetTransMessage())
            end
        end if
        网格部件1.DeleteFocusedRow()
    end if
end if
 
知识点:ShowQuestion("确定单据编号:"&网格部件1.GetFocusedRowValue("单据编号")&" 的相关数据吗?删除后不能恢复。") 这句代码的意思,是实现询问是否确定删除,再个就是把删除的那笔单号也显示出来,便于更加明确清晰的提醒。效果如下:
 

2.4查看按钮

查看按钮,是指查看保存后的数据。首先需要打开采购订货编辑窗体,再传给‘查看’参数过去,最后'获取焦点行"ID"字段的值。
截图如下:
 
具体代码如下:
'打开智能窗体,窗体位置: 项目窗体\采购订货信息\*采购订货编辑*
dim form1 = 创建窗体("65dc49f6-d570-4366-95e6-29fd24825beb")
form1.Input1="查看"
form1.Input2=网格部件1.GetFocusedRowValue("ID")
form1.ShowDialog()
 
查看数据时,调用的采购订货编辑,事件管理加载事件里的代码。
具体代码如下:
'传入的参数为"查看"时,执行以下操作
if me.Input1="查看" then
   '查看时窗体的显示名为:"采购订货信息查看"
       me.FormTitle="采购订货信息查看"
       '设置业务表变量值
       记录部件1.SetVaribleValue("ID",me.Input2)
       记录部件1.RefreshData()
       网格部件1.SetVaribleValue("采购ID",me.Input2)
       网格部件1.RefreshData()
 
       '设置部件只读
       Me.SetPartReadOnly(记录部件1,true)
       Me.SetPartReadOnly(网格部件1,true)
      
       '设置按钮只读
       Me.SetFunctionVisible("保存",false)
       Me.SetFunctionVisible("取消",false)
       Me.SetFunctionVisible("删除选中行",false)
end if
 
 

2.5刷新按钮

刷新按钮,主要用于,其它人员新增了数据,另一个人又没有关闭这个窗体,可以点击刷新,把数据加载出来。
 
具体代码如下:
网格部件1.RefreshData()
网格部件2.RefreshData()
 

2.6导出采购订货信息/明细

导出采购订货信息/明细,是指把订货信息,以及每笔订货信息的明细,导成Excel格式。
 
具体代码如下:
dim file=网格部件1.ExportToExcel()
if isnull(file)=false then
if showquestion("文件已导出,是否立即打开?") then
 openfile(file)
 end if
end if
 

2.7焦点行数据变化事件

以上功能都完善后,新增一条数据,会发现采购订货主表有数据,但明细表是空的。这是因为焦点行数据变化事件,没有把主表跟明细表数据关联起来。
 
具体代码如下:
if 网格部件1.FocusedRowHandle>=0 then
'设置明细表的业务表变量,获取采购订货表的ID
网格部件2.SetVaribleValue("采购ID",网格部件1.GetFocusedRowValue("ID"))
网格部件2.RefreshData()
else
网格部件2.DataTable=0
end if
 
 

1.采购订货测试

我们在构建完成以后,可以在项目管理里面,点击测试运行,看做的功能是否正常。如下图所示:
 
注意:在构建功能过程中,我们也可以随时在设计窗体里点击‘运行’进行测试,看功能是否正常、可用。

2.窗体发布

如果窗体测试运行后,各个功能没有问题,那么我们就可以发布,正式使用了。点击窗体上面一排功能的“发布窗体”按钮,黄色的就是未发布的,勾上后点击发布即可,发布后状态将变为“成功”。如下图所示:
 
注意:如果发布后,又修改了窗体里面的功能,那么需要重新发布。
 

3.分配菜单以及授权

在项目管理,菜单里点击“新增”按钮,菜单类型选择智能窗体,修改菜单名字,选择刚才做的采购订货窗体,最后点击“保存”按钮。如下图所示:
 
在项目管理角色里,给系统管理员分配采购订货菜单。如下图所示:
 
 
完整界面,如下图所示。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-4-27 13:07 , Processed in 0.089118 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部