Office中国论坛/Access中国论坛

标题: 请教自定义函数? [打印本页]

作者: laiguiyou    时间: 2006-8-15 19:23
标题: 请教自定义函数?
有个计件查询,想通过自定义函数获得不同部门的单价

部门有:白坯部,彩绘部,彩样室,白样室,(其中彩样和白样两个部门以生产样品为主,如果没有样品订单可做,就生产大货单)

订单有:大货单,样品单.(在计件查询中有样品单的字段,是否表示)

条件是:白样计算方式:  1.订单量为1--2PC,单价为大货单价的5倍

                                   2.订单量为3--5PC,单价为大货单价的4倍

                                   3.订单量为6--10PC,单价为大货单价的3倍

                                   4.订单量为11--20PC,单价为大货单价的2倍

                                   5.如果生产非样品单,单价为大货单价.

          彩样室的计算方式: 1.订单量为1--2PC,单价为大货单价的8倍

                                   2.订单量为3--4PC,单价为大货单价的6倍

                                   3.订单量为5--6PC,单价为大货单价的5倍

                                   4.订单量为7--10PC,单价为大货单价的4倍

                                   5.订单量为711--30PC,单价为大货单价的3倍

                                   6.订单量为30PCS以上或从大货中调入彩样生产,单价为大货单价的2倍

例: 产品HS0001,彩绘单价为0.5,白坯单价为:0.2   大货订单量为:45PCS

彩样室的计件工资为:45*0.5*2

彩绘部的计件工资为:45*0.5

白样的计算方式:  45*0.2*2

白坯部的计算方式:45*0.2



[此贴子已经被作者于2006-8-15 20:22:03编辑过]


作者: 一点通    时间: 2006-8-15 19:36
建议用表的方式来保存参数,因为当单价的倍率或工资参数的变动不必要修改函数,只修改表的数据就行了,对维护有好处
作者: andymark    时间: 2006-8-15 19:43
以下是引用laiguiyou在2006-8-15 11:23:00的发言:


          彩样室的计算方式: 1.订单量为1--2PC,单价为大货单价的8倍

                                   2.订单量为3--4PC,单价为大货单价的6倍

                                   3.订单量为5--6PC,单价为大货单价的5倍

                                   4.订单量为7--10PC,单价为大货单价的4倍

                                   5.订单量为711--30PC,单价为大货单价的3倍

                                   6.订单量为30PCS以上或从大货中调入彩样生产,单价为大货单价的2倍

例: 产品HS0001,彩绘单价为0.5,白坯单价为:0.2   大货订单量为:45PCS

彩样室的计件工资为:45*0.5*5

       彩样室订货量超过30PCS不是2倍,怎么会是5倍的?

       彩样室的计件工资为:45*0.5*2
作者: laiguiyou    时间: 2006-8-15 19:50
不好意思,打错了,请版主帮忙看看
作者: xin3059    时间: 2006-8-15 21:50
好啊!学习
作者: laiguiyou    时间: 2006-8-15 23:04
在查询中用IIF如何写,另一部分怎样嵌套.

IIf([部门]="彩样室",IIf(([订单量]>=1) And ([订单量]<=2),[单价]*8,IIf(([订单量]>=3) And ([订单量]<=4),[单价]*6,IIf(([订单量]>=5) And ([订单量]<=6),[单价]*5,IIf(([订单量]>=7) And ([订单量]<=10),[单价]*4,IIf(([订单量]>=11) And ([订单量]<=30),[单价]*3,IIf([订单量]>30,[单价]*2,[单价])))))),[单价])

IIf([部门]="白样室",IIf(([订单量]>=1) And ([订单量]<=2),[单价]*5,IIf(([订单量]>=3) And ([订单量]<=5),[单价]*4,IIf(([订单量]>=6) And ([订单量]<=10),[单价]*3,IIf(([订单量]>=11) And ([订单量]<=20),[单价]*2,IIf([订单量]>20,[单价])))))),[单价])

还有判断是否样品单,如果是,则执行上面的条件,否则单价*2.

这几部分如何连接?

[此贴子已经被作者于2006-8-15 15:07:23编辑过]


作者: andymark    时间: 2006-8-16 03:27
这么多IIf 看都有点晕,把例子传上来吧
作者: laiguiyou    时间: 2006-8-16 04:21
在计件单主档查询中,单价为大货单价,单价2为各部门的单价,还差样品单的判断,彩样室为:如果是非样品单,单价为:大货单价*2, 白样室:如果非样品单,单价为大货单价.这句如何加上去?



[attach]19786[/attach]

作者: fan0217    时间: 2006-8-16 04:57
以下是引用一点通在2006-8-15 11:36:00的发言:
建议用表的方式来保存参数,因为当单价的倍率或工资参数的变动不必要修改函数,只修改表的数据就行了,对维护有好处

一点通的才是好方法
作者: laiguiyou    时间: 2006-8-16 05:09
一点通大师的方法确实很好,可本人不会写模块,不知如何调用.先用IIF函数凑合先用着.还望多指点!!!!

以下缺少对样品单的判断,不知如何加进去?就是能实现上面的白样第5条和彩样的第6条.

单价2: IIf([部门]="8",(IIf(([订单量]>=1) And ([订单量]<=2),[单价]*8,IIf(([订单量]>=3) And ([订单量]<=4),[单价]*6,IIf(([订单量]>=5) And ([订单量]<=6),[单价]*5,IIf(([订单量]>=7) And ([订单量]<=10),[单价]*4,IIf(([订单量]>=11) And ([订单量]<=30),[单价]*3,IIf([订单量]>30,[单价]*2,[单价]))))))),IIf([部门]="24",IIf(([订单量]>=1) And ([订单量]<=2),[单价]*5,IIf(([订单量]>=3) And ([订单量]<=5),[单价]*4,IIf(([订单量]>=6) And ([订单量]<=10),[单价]*3,IIf(([订单量]>=11) And ([订单量]<=20),[单价]*2,IIf([订单量]>20,[单价],[单价]))))),[单价]))
作者: fan0217    时间: 2006-8-16 05:35
你这样把程序写死了,如果以后情况变化了要重新修改程序,很麻烦。
作者: laiguiyou    时间: 2006-8-16 06:14
版主,请教一下,如何用表来保存参数,没有这方面的例子

[此贴子已经被作者于2006-8-15 22:14:53编辑过]


作者: 205226    时间: 2006-8-16 06:29
顶一顶!努力学习中!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3