DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fdsafdsa1234
今日帖子: 2
在线用户: 5
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 12:52:37
标题:
[建议]做过和正在做工资系统的请进!!!! 浏览:3718
加入我的收藏
楼主: 在这见不少人都在做工资系统

大家如能经常在一起讨论问题,交流想法,岂不快哉!!!



----------------------------------------------
-
作者:
男 hq11z (xx) ★☆☆☆☆ -
普通会员
2003/12/18 13:00:14
2楼: 遇到了什么问题说说嘛~~~大家一起探讨一下  不就有答案了吗??
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 14:38:56
4楼: 做过系统开发的都知道,一个系统的研发成败或是开发完成后的评价和价值
都与开发初期的系统分析有很大关系。系统分析基于开发者对于所要开发的
系统运作的理解和对所要开发系统的运作流程的熟悉程度而不同。

如果初期的系统分析不清析不明确而盲目地去开发,往往到最后自己推翻重来。
哪怕最后完成了,自己也觉得有所欠缺,若有所失,自己都不甚满意,更别提
用户了。小弟刚涉足工资管理系统,十分希望与各位做过工资系统的前辈或是
和我一样正开始涉及的兄弟交流,理解更多有关工资系统的流程,汲取更多的
想法。

小弟先来抛砖引玉:

看了不少关于工资系统的贴子,发现讨论通用型工资系统的工资算法最多。
如何使你所开发的系统适用于任一用户大概是所有程序员所追求的目标之一。
通用工资系统难就难在于“通用”二字上,每个企业(单位、公司)或国有
或私营,所采用的工资算法大相径庭,如何一一适用是一个较难处理的问题

当前的设计上有两种较常见的思路:
一是制定固定的帐套。这种方法的数据结构在设计初期就固定下来。优点是
针对性强,对于被针对的用户相当容易上手,适用于已知客户已知模式的开
发,特别是为客户量身订做模式的更是常用。缺点是适用面窄,只能用于某
一地区或某一性质的客户。

二是无固定帐套的思路。这种方法的数据结构由用户自定义生成,开发难度
稍大,优点是适用性强,各地区各性质的客户都可以用上,缺点是用户前期
须做大量的前期设定工作,用户难于上手,如果用户无一定基础要上手更是
难上加难。适用于软件公司,由软件公司在安装时就用户设定特定帐套并提
供相应的培训。

对于我等单纯个人开发的群体来说,提供的往往只是软件本身,与之相配套
的服务基本是不过问的,如若三几个用户还好说,万一用户群大,那是想管
也管不过来的,因此从个人开发的角度来看,先决条件就是要界面直观、操
作简捷、运行稳定、功能不用多但要强,总而言之就是要用户能在短时间内
上手熟悉你的软件,并能利用你的软件进行有效的工作,那么用户对你的软
件的依赖性就会大大提高。

在上述几个条件确定好之后再来考虑适用性问题,个人认为一个软件要做到
适用所有用户是相当困难。换个角度来说,为什么要适用于所有用户呢?其
实我们只要能适用于大部分用户既可,非要适用于所有用户是偏执,太过追
求完美本身就是一种不完美。

ok,如果您看到这觉得小弟我说得东东您觉得还值得一看的话那么期待下篇
我会尽快的把我的工资系统的想法发上来。

----------------------------------------------
-
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2003/12/18 15:00:20
5楼: 加入讨论。

leon7808 (烟灰),这段时间也在做工资,期待你的想法啊。
----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 shijun (石军) ★☆☆☆☆ -
普通会员
2003/12/18 16:10:56
7楼: 我也是在做,做个通用的,简单些的,就像楼上大哥所说的,那些项目不好设定,一般单位或企业的工资项目都不一样,所以比较麻烦,初次涉及,请各位多多指点。
----------------------------------------------
All about android
www.kidroid.com
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 16:28:06
8楼: 如果您仔细看过我前面一贴的话就会发现其实适用性和针对性是相互矛盾的,
能否这把两个优势结合在一起呢?答案是肯定的。看看当前较成功的软件无
一例外全是把适用性和针对性相当好的结合在一起。举个例子,Office,对
就是Microsoft Office ,我们来分析一下它的适用性和针对性。office的
针对性非常明显,就是办公用户,这从它的名字就可以看出来。但同时它的
适用性又非常广,以致全球用户没有不知道它的。每个国家有不同的文字,
不同的公文格式,甚至是不同的书写习惯,但每个使用Office的人都能很快
的熟悉它,为什么呢?这个软件从开发前的目标就定位于全球的办公用户,
既不是全球的电脑用户,也不单只是美国的办公用户,它在适用性和针对性
之间做了一个很好的平衡。说了这么多其实不是要大家非要去开发一个类似
于OFFICE那样的全球性工资软件,只是希望大家在开发软件前有一个明确的
目的以及大体的框架,而不是一拿到一个工程就立马埋头开发,这样哪怕你
技术再高,开发出来的东东也不会好到哪去。

好,绕了一大圈,我们回到我们的工资系统上来。
前面我说了通用型工资系统的一个难点,就是算法的不确定性。我个人的想
法其实说出来不值一晒,仅供大家参考。我的想法是这样,适用性和针对性
都一人退一步,采用折中的办法。适用性来说放掉一部分太偏门的算法,只
取已成熟、较流行的算法。针对性让一步,让用户在建立帐套的时候多几个
步骤,但千万切记不能太过复杂。举个实例,大家都知道WORD吧,它是个大
而全的软件,我们日常所用的功能可能还不能它所有功能的十分之一,但对
于我们来说已经相当足够了。说实话,我用WORD的时间也不短了,但还有很
多的功能我还不会用的,不知大家是不是有同感?

它的主要功能就是文字编辑,但是文字编辑也分很多类的,大家从用新建菜
单所弹出的对话框中就可以看出来(注意不是按钮喔),Word又是如何解决
这个问题的呢?我们的工资系统就可以参照WORD的模板方式,将常用的工资
帐套做为模板,并可以在之后更新模板,先解决大部分用户的需求,对于小
部分算法偏门的用户如果有时间精力的话再在软件中加入自定义算法的功能。
那么你的软件既适用于大多数用户,而且难上手的问题也解决了,它只比固
定帐套的算法多了一个选择模板的步骤,而这个步骤相对于用户来说是相当
容易接受的。但是对于我们的软件开发来说可能就得推掉重来。大家现在应
该知道我前面为啥费了那么多口水了吧。

如果采用算法模板化的方式,那么就涉及到一个模板收集的问题。我之所以
提出这个建议,也是有大家交流模板的意思在内。不知大家的想法怎么样?

如果大家愿意的话,我们可以考虑下一步,组合。


期待大家的回应和想法。

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 16:41:38
9楼: to xiaojun5460 (junjun):

在工资系统和Delphi来说我和你一样都是个新手。以后大家多交流,相互学习。

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 17:01:48
10楼: 嗯,我之前所有的系统都是用Foxpro写的,主要是酒店管理系统,其中分为前台接待,收银,餐饮,仓库,商场,电话计费,后台经理查询,系统维护,夜审等等每个模块均要涉及,也可谓复杂。

做了这么多系统之后,我每开发一个新系统前就是先了解用户需求,通过各种渠道了解其它人想法,然后综合所收集的信息自己做个详细的系统分析,最后才是技术层面的开发,感觉如果前期工作做好,后面的开发可以省很多事,可谓顺风顺水也。

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 17:17:19
11楼: 写了N年程序,到现在还是穷得叮当响,偶尔为外面写个小系统也只赚几块大洋
现痛定思痛,决定改做通用软件,学DELPHI不久,工资系统偶只想拿来做试金石。

中国的程序员简直就像讨饭的,思来想去搞技术的一定要有搞市场开发的相配合。
否则结果通常都是就是:

一个字:靠
两个字:郁闷
三个字:有楼吗
四个字:我想跳楼

----------------------------------------------
-
作者:
男 shijun (石军) ★☆☆☆☆ -
普通会员
2003/12/18 17:36:57
12楼: 哈哈,今天设计一下数据库,感觉添加一些基本信息及发放项目,就没什么东西。有点不知所措了。对流程还不是很清楚。


----------------------------------------------
All about android
www.kidroid.com
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 18:11:08
13楼: 搞开发我觉得最重要的是要有自己的模式

任何技术都会过时的,Delphi它日难免成为今天的Foxpro

技术可以学,但学会分析就不是每个程序员能做到的

有了概念之后,不管是Delphi也好,VC也罢,甚至于.net
都只不过工具罢了,而且这些工具通常的原理甚至使用上都差不多
剩下的只是每种语言的特有的东西要学罢了。
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 18:13:58
14楼: 几个要点:

1、保持对编程的兴趣
2、调节好自己的心态,保持乐观向上的精神面貌
3、要有恒心,三天打渔两天晒网是学不到东西的

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 18:30:38
15楼: 小弟准备先把有关工资模板的格式列出,大家如果有意交流的可以采用这种格式
相互使用,这样进度会快很多。




----------------------------------------------
-
作者:
女 wu_xiaowei (柠檬树) ★☆☆☆☆ -
盒子活跃会员
2003/12/18 18:33:45
16楼: 烟灰朋友,我觉得你的话真罗嗦。不过问题到是看到了一个,给你提个建议呀。在数据库端做好表格存放到文件中,把这个文件存到数据库中,这样,不单是在服务器端,即使在其他地方,也是可以拿来用的呀!ok吧
----------------------------------------------
delphi盒子好
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/18 18:36:53
17楼: to 柠檬树 兄

你说的文件存到数据库是指把文件的路径存到数据库

还是直接把文件存到数据库?

如果是第一种就和我一样,第二种不方便交流。

----------------------------------------------
-
作者:
男 shijun (石军) ★☆☆☆☆ -
普通会员
2003/12/18 19:13:31
18楼: 哈哈,那就多谢烟灰兄了。

我正在积极熟悉工资流程及数据库。

建立工资帐套,每个不同企业一个帐套,还是把文件路径存放到数据库方便些吧。
我现在还是先简单些,不做什么帐套,要用的话,直接初始化数据库。
----------------------------------------------
All about android
www.kidroid.com
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/18 19:23:16
19楼: 加我!
----------------------------------------------
-
作者:
男 altnyu (宁宇) ★☆☆☆☆ -
盒子活跃会员
2003/12/18 19:24:10
20楼: 忘说我,我的水平有点次!!
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 9:20:21
21楼: 忙一通宵,总算有小成,趁着还没睡写一写

模块主要包括一个工资项目表和一个算法表

工资项目表可以为任何字段,名称可以自己定义无所谓
算法表的的格式必须固定:

我的为 : 计算字段  整形
          字段1     整形
          字段2     整形
          操作符    文本   长度6

具体用法是在你读取模板的程序中用一段解释程序对算法表进行解析
算法程序已经可以算出正确的值,但我不知怎么写回表中,呵~~~~

我是在DBGrid的OnKeyPass()中调用这段解释过程
procedure TTest_Form.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then
  begin
    AutoCalcFieldValue ;
    DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1 ;
  end;
end;

function returnfieldtype(inp:TFieldType):string;
begin
  case inp of
    ftUnknown:Result:='ftUnknown';
    ftString:Result:='ftString';
    ftSmallint:Result:='ftSmallint';
    ftInteger:Result:='ftInteger';
    ftWord:Result:='ftWord';
    ftBoolean:Result:='ftBoolean';
    ftFloat:Result:='ftFloat';
    ftCurrency:Result:='ftCurrency';
    ftBCD:Result:='ftBCD';
    ftDate:Result:='ftDate';
    ftTime:Result:='ftTime';
    ftDateTime:Result:='ftDateTime';
    ftBytes:Result:='ftBytes';
    ftVarBytes:Result:='ftVarBytes';
    ftAutoInc:Result:='ftAutoInc';
    ftBlob:Result:='ftBlob';
    ftMemo:Result:='ftMemo';
    ftGraphic:Result:='ftGraphic';
    ftFmtMemo:Result:='ftFmtMemo';
    ftParadoxOle:Result:='ftParadoxOle';
    ftDBaseOle:Result:='ftDBaseOle';
    ftTypedBinary:Result:='ftTypedBinary';
    ftCursor:Result:='ftCursor';
    ftFixedChar:Result:='ftFixedChar';
    ftWideString:Result:='ftWideString';
    ftLargeint:Result:='ftLargeint';
    ftADT:Result:='ftADT';
    ftArray:Result:='ftArray';
    ftReference:Result:='ftReference';
    ftDataSet:Result:='ftDataSet';
    ftOraBlob:Result:='ftOraBlob';
    ftOraClob:Result:='ftOraClob';
    ftVariant:Result:='ftVariant';
    ftInterface:Result:='ftInterface';
    ftIDispatch:Result:='ftIDispatch';
    ftGuid:Result:='ftGuid';
    ftTimeStamp:Result:='ftTimeStamp';
    ftFMTBcd:Result:='ftFMTBcd';
  end;
end;


procedure AutoCalcFieldValue ;
Var
  CF1,CF2,CF3: Integer ;
  CS1,CS2,CS3: String ;
  Par : TQREvaluator;
  Result : TQREvResult;
begin
  if GZ_DM.BZGZ_C_DS.RecordCount >0 then
  begin
    GZ_DM.BZGZ_C_DS.First ;
    While not GZ_DM.BZGZ_C_DS.Eof do
    begin
      CF1 := GZ_DM.BZGZ_C_DS.FieldByName('计算字段').AsInteger ;
      CF2 := GZ_DM.BZGZ_C_DS.FieldByName('字段1').AsInteger ;
      CF3 := GZ_DM.BZGZ_C_DS.FieldByName('字段2').AsInteger ;
      CS1 := GZ_DM.BZGZ_C_DS.FieldByName('操作符').AsString ;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF2].DataType)= 'ftInteger' then
      begin
        CS2 := IntToStr(GZ_DM.BZGZ_DS.Fields[CF2].AsInteger) ;
      end;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF2].DataType)= 'ftFloat' then
      begin
        CS2 := FloatToStr(GZ_DM.BZGZ_DS.Fields[CF2].AsFloat) ;
      end;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF2].DataType)= 'ftBCD' then
      begin
        CS2 := FloatToStr(GZ_DM.BZGZ_DS.Fields[CF2].AsFloat) ;
      end;
      if CS2=' then CS2:='0' ;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF3].DataType)= 'ftInteger' then
      begin
        CS3 := IntToStr(GZ_DM.BZGZ_DS.Fields[CF3].AsInteger) ;
      end;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF3].DataType)= 'ftFloat' then
      begin
        CS3 := FloatToStr(GZ_DM.BZGZ_DS.Fields[CF3].AsFloat) ;
      end;
      if ReturnFieldType(GZ_DM.BZGZ_DS.Fields[CF2].DataType)= 'ftBCD' then
      begin
        CS3:= FloatToStr(GZ_DM.BZGZ_DS.Fields[CF3].AsFloat) ;
      end;
      if CS3=' then CS3:='0' ;
      CS1 := CS2+CS1+CS3 ;
      Par := TQREvaluator.Create;
      try
        Result := Par.Calculate(CS1);
        case Result.Kind of
          resInt : GZ_DM.BZGZ_DS.Fields[CF1].AsInteger := Result.intResult;
          resDouble : GZ_DM.BZGZ_DS.Fields[CF1].AsFloat := Result.dblResult;
          resString : GZ_DM.BZGZ_DS.Fields[CF1].AsString := Result.strResult;
          resBool : GZ_DM.BZGZ_DS.Fields[CF1].AsBoolean := Result.booResult;
        end;
        Par.Free;
      except
        Par.Free;
      end;
      GZ_DM.BZGZ_C_DS.Next ;
    end;
  end;
end;


其中的RetuFieldType()和一些利用QuickReport做计算器的代码是摘别人的。
现在AutoCalcFieldValue已经可以返回一个正确的值,但是该值不知如何写回表中,那位大侠有空帮我看看。撑不住了,去睡了。




----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 9:34:48
22楼: 喔,忘了说一下算法表的意思

我的为 : 计算字段  整形
          字段1     整形
          字段2     整形
          操作符    文本   长度6

三个整形字段存的是工资项目表的所要用到的字段在表中的顺序
操作符就是 + - * / 等

举个例子:

工资项目表.table
      Field8   Field9  Field10
     加班基准 加班天数 加班工资

算法表.table
    计算字段   字段1  字段2  操作符
       10        8      9      *

的意义就是10=8*9,对应到工资项目就是 加班工资=加班基准*加班天数
通过你在DBGrid中输入加班天数和加班基准就可以返回一个加班工资数





----------------------------------------------
-
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2003/12/19 11:46:28
23楼: leon7808 (烟灰)
您只解决了一个计算公式的问题, 而且我觉得如果既然用QuickRep的计算功能进行计算,何不将算法表省去,在项目表中直接用一个字符型字段保存公式?如

您的方法
=================================
算法表.table
计算字段   字段1  字段2  操作符
  10        8      9      *

我的方法
=================================
直接保存 8 * 9

为什么这样说呢? 因为这样做就只能有一个操作符,如果要求计算"假节日超时加班"的话就算不出来了。假节日超时加班的公式为"加班时数 * 加班每小时元数 * 超时加班百分比 * 假节日加班百分比 ",这里的超时加班百分比是指超时加班的费用需要乘一个百分数,如好多工厂都是 120% 的,超时嘛!假节日也一样。

这里只是说一个公式保存的问题,但实际的使用中,远不止这样的简单,通常稍大点的工厂,它们是这样计算的(我这里用奖金来说明):

if 职位 = '经理' then 奖金 = 1000元 else
if 职位 = '扫地' then 奖金 = 20元;

我觉得工资计算最为复杂的就是这部分了。还有的还要根其它资料相联系,如:

if (迟到 = 0) and (早退 = 0) and (旷工 = 0) and (请假 = 0) then
   全勤奖 = 1000元
else
   全勤奖 = 0元

大家想到什么好的办法来处理吗 ?
----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 12:03:30
24楼: 晕,你还没明白我的意思

利用QuickReport是可以用String做一个完整的公式
但是整套数据表不是只有一个公式的,用项目表的字段的话就有不确定性
你不知存公式的字段名有多少个,也不知道别人的字段名叫什么
也就不成模板了

做成算法表主要是考虑一个兼容的问题。如果大家都按这种格式来做的话
那么不管谁开发的模板,我拿到直接挂上数据库就可以用了
做成算法表就是为了通用,大家统一,方便交流




----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 12:07:51
25楼: 10=8*9只是其中的很小的一块
我的意思是把所有复杂的算法全部分解为N=N?N的算法
利用数据库的循环,可以计算出任何公式

比如你说的要计算
  
  加班时数 * 加班每小时元数 * 超时加班百分比 * 假节日加班百分比

在算法库里就是

20=10*11
20=20*12
20=20*13
百分比的算法,例如120%
20=20*1.2
........

条件方法的解决我在上面的例子里已经提到了就是利用基准
不同职务加班费也不一样的
不同的职务不同的基准就ok了

----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 12:10:41
26楼: 昨晚我主要是测试算法,算法表只做了几步,今天把它全做完

晚上我把做好的算法表和工资项目表发上来

----------------------------------------------
-
作者:
男 jijiang (jijiang) ★☆☆☆☆ -
盒子活跃会员
2003/12/19 13:13:30
27楼: 小弟才完成一套工资软件的开发,什么公式可以自定义和计算个人所得税,其实这个都不是很麻烦,麻烦的是可动态生成工资项并在报表中显示。整个程序开发加调试用了两个半月,写报表程序加调试就用了一个月。
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 13:27:24
27楼: 可能大家还不太了解我的想法,我刚才再把思路顺了一下,觉得应该是可行的

总的来说,想法就是定位在通用上,既最小化的修改得到最大的模式变化。
其中最主要的就是引用了WORD的模板概念。
通过一个固定的规则(既固定算法的存储格式)

使各地区各类型的人都可以脱离程序开发  只要用数据库就可以开发自己的模板
在系统程序完全调试后,只要保证模板算法表的正确性,理论上任何一套模板都可
以挂在该系统上。

只要把算法表和工资项目表在系统中的模板表中“注册”
之后就可以通过模板表 按模板工资项目表生成新的工资帐套。
而每一个帐套都有一个相对应的算法。只要算法表正确,这个帐套就正确。
与系统本身的代码无关。

全国各行业各地区的算法都可能不同,如果要全部了解不太现实
比如一些军内的工资算法。
但如果有熟悉军内的人做出相应的模板,我不需要关心这个军内的算法如何
我只要把这个军内模板挂入我的数据库系统那我的系统就具有军内工资算法
的功能。

大概的意思就是这样。
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/19 13:32:01
28楼: 难在报表,哪位大侠说说有没可能报表可以由数据表直接生成的?

得多个报表库?
----------------------------------------------
-
作者:
男 dingning (丁宁) ★☆☆☆☆ -
盒子活跃会员
2003/12/19 14:49:28
29楼: 有没有做"公司员工管理"的,请谈谈你们的想法
----------------------------------------------
-愿天下有情人终成眷属!
http://www.pro-thinking.com/bbs/
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2003/12/19 16:41:03
30楼: leon7808 (烟灰) 

 我很认真地看了你上面的文字,我已经真正明白你的意思。不过,我的思路和你的思路还是有不一样的地方(我的重点还是放在公式设置),就是你的思路是假设什么数据(包括基准)都已经准备好的,而我的思路是假设什么数据都未准备好的。

 我还是以"if (迟到 = 0) and (早退 = 0) and (旷工 = 0) and (请假 = 0) then"作一个例子,上面的条件不可能是一个基准,如果使用你的方法如何来设置?希望有详细例子,期待你今晚完成的结果。

  报表由数据表生成的方法很多,如使用FastReport的frPrintTab, frPrintGrid,自己动态生成,DevPress Print System等等,这个我实现过,技术难度相对很低。



----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/22 18:01:22
31楼: 这两天有点事,现在才发上来

我把表导出为EXCEL文件

这是项目表:
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/22 18:05:22
32楼: 晕,不支持EXCEL上传,用文本:

项目表:
此帖子包含附件:leon7808_2003122218522.txt 大小:3,249B
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/22 18:06:42
33楼: 算法表:
此帖子包含附件:leon7808_2003122218641.txt 大小:6.9K
----------------------------------------------
-
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2003/12/22 18:20:44
34楼: to hotyei 兄

解决 if (迟到 = 0) and (早退 = 0) and (旷工 = 0) and (请假 = 0) then 

要增加迟到、早退、旷工、请假等字段,还要加基准
然后算法分解为

迟到所扣工资 = 迟到 * 迟到基准
早退所扣工资 = 早退 * 早退基准
旷工所扣工资 = 旷工 * 旷工基准
请假所扣工资 = 请假 * 请假基准


小弟不知SQL语法能否返回逻辑型值
如果可以的话就直接用 select 迟到>0
不知行不行



----------------------------------------------
-
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2003/12/22 20:27:48
35楼: leon7808 (烟灰)
我直说啦。是没有固定的基准的,好像我以前的一个客户,它们是这样的:
如果全勤,则有全勤奖,如果请假两天半,则这两天半不算请假。这些处理是不是很怪?这还是他们请台北的顾问师设计的。
----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 30896186 (缘来一家人) ★☆☆☆☆ -
盒子活跃会员
2003/12/24 15:15:28
36楼: 其实大家不应考虑细节,应先考虑大体结构,就是总体策划,要先出来
如只是一个工资嘛,那考勤。要不要作进去,还有考勤又接触到打卡,迟到,旷工,加班,工假,等 等 ,大家应想好大体结构,要作几个模块,再来商量细节呀
要不然,作出来不如excel好处。那不是白费
----------------------------------------------
-
作者:
男 tanhwon (tanhwon) ★☆☆☆☆ -
普通会员
2004/1/3 23:00:11
37楼: 不知大家是否还继续讨论这个问题。先讲讲我曾经用excel做过的工资管理系统,数据纯手动输入(由于使用方的人只懂excel)。客户的想法是这样的:该公司奖金是由每个人的劳动量占整体工作量的比例所决定的。要求系统可以查出每个人任意天的工作状态,包括出勤,请假,是何种假,工作场所,受谁管理(动态的),对于工头还应该可以知道他手底下人员分布情况,总之很多东西。
现在由于数据量增多,excel太慢了,表格也太多了。我考虑用delphi来处理这个问题,想做成“伪”excel形式:形式类似excel,但实际为delphi编的程序在后台操作。不知哪位老大手头有否d7下的office组件的帮助说明???
----------------------------------------------
-
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2004/1/4 8:19:20
38楼: Excel文件作为临时数据表,后台采用其它数据库系统,由于ADO可以直接连接Excel,所以作法应该很简单,而不需要使用Office组件。
----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 tanhwon (tanhwon) ★☆☆☆☆ -
普通会员
2004/1/4 22:03:01
39楼: 我一直考虑这个方式,但是由于我顾忌到数据维护(主要还是操作人员的素质),迟迟未采用这种方式。越是傻瓜的东西,越是复杂。我被要求把这个系统做成傻瓜都能用的东西。苦呀!!
不过还是谢谢老大们的意见!!!!!
----------------------------------------------
-
作者:
男 fatjerry1225 (fatjerry) ★☆☆☆☆ -
普通会员
2004/3/17 10:14:07
40楼: 哪位有现成的,那出来看看啊!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行129.8828毫秒 RSS