设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5980|回复: 6
打印 上一主题 下一主题

ADP新手入门经验交流(2)

[复制链接]
跳转到指定楼层
1#
发表于 2005-5-12 01:37:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何自定义函数及引用自定义函数?
这在ADP中属于比较难的问题了,很多朋友无从下手,我们通过一个实例来简单说明。
1、假设在一个销售系统中,我们希望产生一个报表来查阅公司业务员某个月的销售任务完成情况
2、实现这个功能理论上很简单,需要两个数据:(1)业务员某个月的销售业绩(2)业务员某个月的任务,这两个数据对比就得出了完成率。
3、所以我们要写两个函数
1)求业务员某个月销售业绩的函数
2)求业务员某个月任务的函数
4、业务员的销售业绩和4个表有关系:订单,订单明细,客户,员工表(订单中有“客户”字段与客户表关联,客户表中有“负责业务”字段与员工表关联)
5、业务员的任务与3个表有关系:业务员销售计划,业务员销售计划明细,员工表(业务员销售计划表中有“业务员”字段与员工表关联)
6、在“查询”中新建一个求业务员某个月销售业绩的函数,语句如下:
===================================================================================
ALTER function dbo.fun业务销售
(@开始日期 as datetime,@结束日期 as datetime,@员工编号 as int)returns float
begin
  declare @Total float

  SELECT @Total=isnull(SUM((dbo.订单明细.数量 * dbo.订单明细.单价),0)
  FROM dbo.订单 INNER JOIN dbo.订单明细 ON dbo.订单.订单ID = dbo.订单明细.订单ID INNER JOIN
      dbo.客户 ON dbo.订单.客户名称 = dbo.客户.客户编号 INNER JOIN
      dbo.员工表 ON dbo.客户.负责业务 = dbo.员工表.员工编号
  WHERE (dbo.订单.订购日期 > @开始日期 AND dbo.订单.订购日期 < @结束日期) and (dbo.客户.负责业务 =@员工编号)

  return @Total
End
=====================================================================
7、在“查询”中新建一个求业务员某个月任务的函数,语句如下:
=====================================================================
ALTER function dbo.fun业务员计划汇总
(@开始日期 as datetime,@结束日期 as datetime,@员工编号 as int)returns float
begin
  declare @Total float

  SELECT @Total=isnull(SUM(dbo.业务员销售计划明细.销售计划金额) ,0)
  FROM dbo.业务员销售计划 INNER JOIN dbo.业务员销售计划明细 ON dbo.业务员销售计划.业务员计划编号 = dbo.业务员销售计划明细.计划编号
  WHERE (dbo.业务员销售计划.计划月份 > @开始日期 AND dbo.业务员销售计划.计划月份 < @结束日期) AND (dbo.业务员销售计划.业务员 = @员工编号)

  return @Total
End
=========================================================================
8、在“查询”中新建一个嵌入函数“完成率”以引用我们在6,7步骤中创建的自定义函数,格式如下:
===========================================================================
   列                                                                                          别名                表
员工编号                                                                                                      员工表
姓名                                                                                                             员工表
dbo.fun业务销售(@开始日期, @结束日期, 员工编号)             业务销售
dbo.fun业务员计划汇总(@开始日期, @结束日期, 员工编号)   业务计划
=============================================================================
9、新建一个报表,将数据源设为“完成率”,引用嵌入函数中的字段,再新建一个字段“完成比例”,数据=业务销售/业务计划就可以了

当然,如果业务计划为零的话,就会出现除零错误,所以你还要另外处理一下,这个就简单了,我说了,ADP在报表中也是可以用IIF的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-5-13 04:40:00 | 只看该作者
好,很有启发作用,期待你的下一篇文章.
3#
发表于 2005-11-6 04:07:00 | 只看该作者
感觉你的对象名都用中文,会不会有问题?我都是用英文名称,好时会不大好认。
4#
发表于 2005-12-1 18:54:00 | 只看该作者
HAO
5#
发表于 2010-2-1 16:35:07 | 只看该作者
好!!
6#
发表于 2010-2-10 23:33:39 | 只看该作者
ok!ok!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 14:30 , Processed in 0.094632 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表