【Access模仿】01 制作客户统计报表

目的

学习该模板的查询设计,用于自制管理系统人员信息详情查询——查询员工编号,并根据查询生成表,用于窗体文件显示。

顺便学习markdown文档写法 2018-03-18

附件:点击查看-百度云
提取密码:hruv

版本一,通过查询设计,生成报表

无数据库表关系

一 创建表链接数据源表

1.表设计:规格/客户/商品/销售员/订单明细/生产明细/销售明细
2.表规格:规格编码+规格名称
3.表客户:客户编码+客户名称
4.表商品:商品编码+商品名称
5.表销售员:销售员编码+销售员
6.表订单明细:序号+订货月份+商品编码+规格编码+订货数量+订货价格+客户编码+销售员编码
7.表生产明细:序号+分厂+生产月份+商品编码+规格编码+生产数量
8.表销售明细:序号+销售日期+商品编码+规格编码+销售数量+客户编码+价格+销售员编码

二 建立临时表

1.tab参数表:StartDate + EndDate + LastDate
2.tbl临时表 _ 本日销量:项目名称+销售小计 未定义主键
3.tbl临时表 _ 累计销量:项目名称+销售小计 未定义主键
4.tbl临时表 _ 销售日报:项目名称+订单数量+本日销量+本月累计 未定义主键
5.tbl临时表 _ 月订单量:项目名称+订货量 未定义主键

三 建立查询

(一) 选择 - 查询

1.建立查询qry销售明细

1.1 参与表【tbl销售明细】;
1.2 除“序号”外的所有字段,添加到条件;
1.3 对销售日期设置条件 Between DLookUp("[startdate]","tbl参数表") And dlookup("[enddate]","tbl参数表")

2.建立查询qry订单明细

2.1 参与表【tbl订单明细】;
2.2 除“序号”外的所有字段,添加到条件;
2.3 对订货月份设置条件 between dlookup("[startdate]","tbl参数表") and dlookup("[enddate]","tbl参数表")

(二) 更新 - 查询

1.建立查询qry更新当日销量

1.1 参与表【tbl临时表 _ 销售日报】、【tbl临时表 _ 本日销量】;
1.2 对上面2个表相同项项目名称鼠标拖动建立关系;
1.3 将【tbl临时表 _ 销售日报】的本日销量,更新到【tbl临时表 _ 本日销量】销售小计里;
1.4 条件写法对表名和字段名 [ ] 框住。

2.建立查询qry更新月订单量

2.1 参与表【tbl临时表 _ 销售日报】、【tbl临时表 _ 月订单量】;
2.2 对项目名称建立查询关系;
2.3 将【tbl临时表 _ 销售日报】的订单数量,更新到【tbl临时表 _ 月订单量】订货量里;
2.4 条件 [tbl临时表 _ 月订单量].[订货量]

(三) 删除 - 查询

1.建立qry清空销售日报

1.1 参与表【tbl临时表 _ 销售日报】;
1.2 以 * 符号,添加所有字段;
1.3 删除条件显示为“from”。

(四) 生成 - 查询

1.建立qry本日销量

生成数据,追加到【tbl临时表 _ 本日销量】

1.1 参与表【tbl销售明细】、【tbl编码 _ 客户】;
1.2 对客户编码建立关系;
1.3 参与字段“客户名称”、“销售数量”、“销售日期”;
1.4 添加汇总,总计“客户名称”分类汇总group by,并更改字段显示为“项目名称”;
1.5 总计销售数量进行合计,更改字段显示为“销售小计”,并降序排列;
1.6 总计销售日期选择where,赋予条件 DLookUp("[结束日期]","tbl参数表");
1.7 销售日期设置为不显示。

2.建立qry本月累计销量

生成数据,生成到【tbl临时表 _ 累计销量】

2.1 先建立选择查询【qry销售明细】、【qry订单明细】
2.2 参与表【qry销售明细】、【tbl编码 _ 客户】;
2.3 添加字段 “客户名称”、“销售数量”;
2.4 添加汇总,总计“客户名称”分类汇总group by,总计“销售数量”合计;
2.5 更改字段“客户名称”为项目名称,“销售数量”为销售小计。

  1. 建立qry月订单量

生成数据,生成到【tbl临时表 _ 月订单量】

3.1 参与表【qry订单明细】、【tbl编码 _ 客户】;
3.2 添加字段 “客户名称”、“订货数量”;
3.3 添加汇总,总计“客户名称”分类汇总group by,总计“销售数量”合计;
3.4 更改字段“客户名称”为项目名称,“订货数量”为订货量。

(五) 追加 - 查询

1.建立qry追加销量累计数

生成数据,追加到【tbl临时表_销售日报】

1.1 参与表【tbl临时表 _ 累计销量】
1.2 添加字段 “项目名称”、“销售小计”;
1.3 追加到“项目名称”、“本月累计”。

四 建立窗体

1.建立frm报表选择

用于录入销售日期,以生成供查询数据的开始、结束、月底时间

1.1 进入窗体设计,插入文本框(格式选择短日期);
1.2 插入按钮控件,设置为确定和取消;
1.3 设置“取消”按钮代码:DoCmd.Close acForm, "frm报表选择", acSaveYes
1.4 由于“确定”按钮代码,涉及报表生成,因此需要先建立窗体【frm销售明细】和报表【rpt销售日报】;

1.5 编辑“确定”按钮代码

Private Sub Save _ Click()
Dim StartDate As Date
Dim EndDate As Date
Dim LastDate As Date
Dim strSQL As String
If IsNull(Me.销售日期) Then
    MsgBox "请输入要查询的销售日期", vbCritical, "提醒"
    Me.销售日期.SetFocus
    Exit Sub
 End If
EndDate = Me.销售日期
StartDate = CDate(Year(EndDate) & " - " & Month(EndDate) & " - " & "1")
lastdate = CDate(Year(EndDate) & " - " & Month(EndDate) + 1 & " - " & "1") - 1
strSQL = "update tbl参数表 set startdate=# " & StartDate & " #,enddate=# " & EndDate & " #,lastdate=# " & LastDate & " #"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL '将 销售的当天日期,月初开始日期,月底结束日期写入 tbl参数表,以供查询作为条件使用
DoCmd.OpenQuery "qry清空销售日报" '每次生成报表数据前,对 tbl临时表_销售日报 进行清空
DoCmd.OpenQuery "qry本月累计销量" '生成 本月累计销量的清单(例如按客户)
DoCmd.OpenQuery "qry追加销量累计数" '将 清单追加到 tbl临时表_销售日报 中
DoCmd.OpenQuery "qry本日销量" '生成当天的销售量(按客户)
DoCmd.OpenQuery "qry更新当日销量" '对 tbl临时表_销售日报 中的本日销量进行更新
DoCmd.OpenQuery "qry月订单量" '生成本月的订单量(按客户)
DoCmd.OpenQuery "qry更新月订单量" '对 tbl临时表_销售日报 中的订单量进行更新
DoCmd.SetWarnings True
DoCmd.OpenReport "rpt销售日报", acViewReport '打开报表
End Sub

2.建立frm销售明细

2.1 数据源【tbl销售明细】- 动态集
2.2 添加所有字段,分割窗体,数据表在下方;
2.3 对字段标签“编码”改为名称
2.4 更改字段商品名称、规格名称、客户名称、销售员文本框为组合框
2.5 设置组合框代码
商品名称:select tbl编码_商品.商品编码, tbl编码_商品.商品名称 from tbl编码_商品;
规格名称:select tbl编码_规格.规格编码, tbl编码_规格.规格名称 from tbl编码_规格;
客户名称:select tbl编码_客户.客户编码, tbl编码_客户.客户名称 from tbl编码_客户;
销售员名称:select tbl编码_销售员.销售员编码, tbl编码_销售员.销售员 from tbl编码_销售员;
以上,限于列表,取2列 ,设置列宽 0cm;2cm;

五 建立报表

1.建立rpt销售日报

用于最后生成报表显示。序号+项目名称+订单数量+本日销量+本月累计+占订单百分比

[数据源]: tbl临时表 _ 销售日报

1.1 添加报表页眉。在页眉增加文本框,显示报表所属期间。
开始日期=DLookUp("startdate","tbl参数表")
结束日期=DLookUp("enddate","tbl参数表")
1.2 添加页面页眉,6个标签,属性为摘要显示要素;
1.3 添加主体要素,6个文本框,属性为摘要显示要素。并定义名称;
序号=1运行总和:工作组之上
占订单百分比: =IIf(not IsNull([订单数量]), Round([本月累计]/[订单数量], 4),"")
1.4 设置页面页脚,2个文本框=now()="共"&[Pages]&"页,第"&[Page]&"页"
1.5 设置报表页脚,4个文本框+1个标签。对文本框定义;
订单合计 =Sum([订单数量])
日销量合计 =Sum([本日销量])
月销量合计 =Sum([本月累计])
百分比 =IIf(not IsNull([订单合计]),Round([订单合计]/[月销量合计],4),"")


总结

  1. 提供一个日期,根据此日期计算当月第一天和最后一天,并写入tbl参数表;
  2. 选择-查询,根据日期范围生成数据;
  3. 清空 tbl临时表 _ 销售日报 ;
  4. 根据选择查询 qry本月销量累计,分类汇总【qry销售明细】与【tbl编码_客户】生成 tbl临时表 _ 累计销量
  5. 根据追加查询 qry追加销量累计数,将tbl临时表 _ 累计销量的项目名称和销售小计,追加到tbl临时表 _ 销售日报里;
  6. 根据生成查询 qry本日销量,将tbl编码_客户和tbl销售明细,通过客户分类汇总、合计销售数量、指定销售日期为enddate,然后生成表tbl临时表 _ 本日销量
  7. 根据更新查询 qry更新当日销量,将tbl临时表 _ 销售日报中的当日销量更新为tbl临时表 _ 本日销量.销售小计;
  8. 根据生成查询 qry月订单量,分类汇总【qry订单明细】与【tbl编码_客户】生成 tbl临时表 _ 月订单量
  9. 根据追加查询 qry更新月订单量,将tbl临时表 _ 销售日报中的订货数量更新为tbl临时表 _ 月订单量.订货量;
  10. 图解
st=>start: 选择销售日期
e=>end
in=>inputoutput: 日期设置
op1=>operation: qry清空销售日报-清空 tbl临时表_销售日报
op2=>operation: qry本月累计销量-生成 本月累计销量
op3=>operation: qry追加销量累计数-追加 tbl临时表_销售日报
op4=>operation: qry本日销量-生成 本日销量
op5=>operation: qry更新当日销量-更新 tbl临时表_销售日报-本日销量
op6=>operation: qry月订单量-生成 月订单量
op7=>operation: qry更新月订单量-更新 tbl临时表_销售日报-订单量

st->in->op1->op2->op3->op4->op5->op6->op7

备注

  1. 建表时,对临时表“tbl临时表_销售日报”,数据默认不应为0比较重要,会导致报表计算错误。
  2. tbl参数表,必须现有数据。SQL语句UPDATE才可以更新。

你可能感兴趣的:(【Access模仿】01 制作客户统计报表)