被投訴了, "薪资系统中公式自定义在客户端如何实时计算? ",有好的解決方法請報價吧!(59分)

Z

zhlu

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3405024<br><br>我都設計好了,只是讓她們&quot;點&quot;一下&quot;刷新&quot;按紐,結果還是被投訴,盡管我已經習慣了,但技朮問題沒解決總覺得不好.<br><br>&quot;在SQL端,可以翻译成SQL语句执行,比较简单. 在客户端,我想在输入数据后立即执行,但在ClientDataSet &nbsp;OnCalculate事件中不能固定写代码(因为公式是自定义的), 好象Script可以解决这个问题, 有代码或思路参考一下吗?<br>自定义公式中包含”如果,或者,则”等判断.可以解析出Delphi代码.&quot;<br><br>有好的解決方法請報價吧! 我出錢買技朮和時間. 有效期到2006/07/25<br><br>vzbase@hotmail.com
 
OnCalculate中调用存储过程,这样就随便你做什么事情了吧?
 
根据公式动态建立存储过程
 
搞一个解释器,存字符到数据库中,我没有产品,目前正在做,我是初学者.
 
要看演示周六加我的QQ 99923309 三年前写的<br>我演示给你看!
 
http://www.konon.com
 
http://www.tinstec.com<br>工资管理软件中可以自定义公式。
 
薪資的自定義公式和項目等,我都實現了. 現在的問題是我翻譯的都成為SQL語句,當然翻譯成delphi語句也很容易,這些都是后臺的功能, 客戶端顯示的是定義的項目,輸入一些項目時,相關的計算要自動進行,如同在Delphi中寫入OnCalculate的代碼.看來一定要用到Pascal Script了,只是我不會用. <br><br>哪位朋友有一個現成的例子? 把ClientDataSet的OnCalculate事件執行的代碼能在前臺編輯運行.著急中.
 
都跟你说了,下周一加我QQ我给你看我3年前写的demo,满意再讨论价钱的事情.<br><br>QQ: 99923309
 
程序中使用的自動翻譯出的SQL語句(一張&quot;件薪&quot;員工的單據):<br>自定義項目中是1位小數的翻譯成Round( 公式 +0.001,1),是2位小數的翻譯成Round( 公式 +0.0001,2),.... &nbsp;是整數的翻譯成Round( 公式 +0.01,0), 每個項目都是中文,公式中自己翻譯成相應的英文.復合的項目翻譯用它本身的公式替代,直到沒有復合的項目( 有可能有死循環,因為公式變量之間的互相嵌套,因此,設置循環次數限制為10次內, 如F01=3.42*1.5,I02=F01*T201, 翻譯后:I02=取一位小數(取一位小數(3.42*1.5)*T201)),不能有F01等計算字段. 3.42是東莞的最低工資標准,*1.5是正常加班時時薪是3.42的1.5倍,*2是周六日加班,*3是節假日加班, T201,TimeWage,D01等項目是來源於考勤表,基本資料表,薪資表,住宿表等其它表單中的項目,由用戶指定到薪資表中,其它基本項目(非計算字段)都有指定的來源,自動翻譯后如下:<br>UPDATE PayrollDetail &nbsp;SET EmployeeID=EmployeeID,[I01]=Round((27.4*ST02)+0.001,1),[F01]=Round((3.42*1.5)+0.001,1),[I02]=Round(((Round((3.42*1.5)+0.001,1))*T201)+0.001,1),[F02]=Round((3.42*2.0)+0.001,1),[I03]=Round(((Round((3.42*2.0)+0.001,1))*(T202+T203))+0.001,1),[F03]=Round((3.42*3)+0.001,1),[I04]=Round((3.42*3.0*T204)+0.001,1),[I06]=Round((CASE WHEN TimeWage&gt;27.4 THEN (TimeWage-27.4)*(ST01+C203) ELSE 0 END)+0.001,1),[I09]=Round((CASE WHEN T504&gt;0 THEN 3.42*T504 ELSE 0 END)+0.001,1),[F10]=Round(((Round((27.4*ST02)+0.001,1))+(Round(((Round((3.42*1.5)+0.001,1))*T201)+0.001,1))+(Round(((Round((3.42*2.0)+0.001,1))*(T202+T203))+0.001,1))+(Round((3.42*3.0*T204)+0.001,1))+I05+(Round((CASE WHEN T504&gt;0 THEN 3.42*T504 ELSE 0 END)+0.001,1))+I07+I10+F07+F04+(Round((CASE WHEN TimeWage&gt;27.4 THEN (TimeWage-27.4)*(ST01+C203) ELSE 0 END)+0.001,1))+F08)+0.001,1),[D06]=Round((T304/60*3.42)+0.001,1),[F11]=Round((D01+D03+D05+D02+D04+(Round((T304/60*3.42)+0.001,1))+D07)+0.001,1),[PayableWage]=Round(((Round(((Round((27.4*ST02)+0.001,1))+(Round(((Round((3.42*1.5)+0.001,1))*T201)+0.001,1))+(Round(((Round((3.42*2.0)+0.001,1))*(T202+T203))+0.001,1))+(Round((3.42*3.0*T204)+0.001,1))+I05+(Round((CASE WHEN T504&gt;0 THEN 3.42*T504 ELSE 0 END)+0.001,1))+I07+I10+F07+F04+(Round((CASE WHEN TimeWage&gt;27.4 THEN (TimeWage-27.4)*(ST01+C203) ELSE 0 END)+0.001,1))+F08)+0.001,1))-(Round((D01+D03+D05+D02+D04+(Round((T304/60*3.42)+0.001,1))+D07)+0.001,1))+W_PriorAdditional)+0.001,1) &nbsp;WHERE PayrollID='PRD20060717-0001'
 
这是小问题!<br>我当初想了半年,写代码只用了两个通宵!
 
我沒有QQ,<br><br>MSN: vzbase@hotmail.com ,很少用.最近很忙. 我要休息了,明天再來看.
 
关注此问题。<br>如果楼主找到解决办法,麻烦给我份资料,谢谢。<br>kong7@21cn.com
 
还没解决?用Fastscript可以很好的解决
 
楼上能否详细介绍一下?<br>意思是用报表的script?
 
多人接受答案了。
 
顶部 底部