| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3651 人关注过本帖
标题:计算汇总
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用tjdeming在2016-3-11 12:00:00的发言:

补允说明
表中 L1列 手工输入的有:DM为05、06、07、A01——A18、71、72、73、74、75
  自动计算并输入L1列 的有:DM为01=05+06+07
                           DM为00=A01+A02+A03+A04
                           DM为22=71+72+73+74+75
                           DM为72=A05+A06+A07+A08
……
最后审核关系:L1列  DM为01=DM为00=DM为22 并提示错误

这是一张人数表

程序很难从你XM字段中取出公式来,何况还要审核结果呢
如果你一定要这样做,你最起码要再有1个字段,用来存放公式的。比如字段,GS,里面存的是每行的计算公式,如第11行,按职业类型分 =71+72+73+74+75
所以,一开始,我就说,你这样设计表,有严重的缺陷
你这个表,只能手工计算,不利于电脑公式计算,就算能,也要有像吹斑竹这样功力深厚的人才能做到

[此贴子已经被作者于2016-3-11 13:43编辑过]

2016-03-11 13:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用tjdeming在2016-3-11 12:00:00的发言:

补允说明
表中 L1列 手工输入的有:DM为05、06、07、A01——A18、71、72、73、74、75
  自动计算并输入L1列 的有:DM为01=05+06+07
                           DM为00=A01+A02+A03+A04
                           DM为22=71+72+73+74+75
                           DM为72=A05+A06+A07+A08
……
最后审核关系:L1列  DM为01=DM为00=DM为22 并提示错误

  这是一张人数表

将计算表达式用一个字段来存放,这样比较清晰好处理。
程序代码:
XH  XM                      DM  JS         L1
--  ----------------------  --  ---------  ---
 1  一、从业人员                01=00=22  

 2  (一)从业人员期末人数  01  05+06+07
......
2016-03-11 14:22
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用mywisdom88在2016-3-11 13:41:23的发言:

 
程序很难从你XM字段中取出公式来,何况还要审核结果呢
如果你一定要这样做,你最起码要再有1个字段,用来存放公式的。比如字段,GS,里面存的是每行的计算公式,如第11行,按职业类型分 =71+72+73+74+75  
所以,一开始,我就说,你这样设计表,有严重的缺陷
你这个表,只能手工计算,不利于电脑公式计算,就算能,也要有像吹斑竹这样功力深厚的人才能做到
没错
2016-03-11 15:43
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
设计思路是这样的:分项有数据了,点击计算命令后 汇总行的数据自动生成。并审核逻辑关系。
2016-03-11 15:47
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:10 
1. 应该增加一个公式字段 gs c(30),将 xm 字段中的公式移至 gs,如:[01]=[05]+[06]+[07]
2. 公式一定要合法,用真实数据去替换行代码后,应返回一个逻辑值,为真,则验证通过,为假,则不通过。
   因此,06≤01 应改为 [06]<=[01],01=00=22 应改为 [01]=[00] AND [01]=[22]
4. 检测代码如下:

CLOSE TABLES ALL
LOCAL cStr,nRec,cCode,cValue,lErr
USE rsb
SCAN FOR !EMPTY(gs)
    cStr = ALLTRIM(gs)
    nRec = RECNO()
    SCAN FOR !EMPTY(dm) AND dm # '---'
        m.cCode = '['+ALLTRIM(dm)+']'
        m.cValue = TRANSFORM(L1)
        cStr = STRTRAN(cStr,m.cCode,m.cValue)
    ENDSCAN
    GO nRec
    DO CASE
    CASE TYPE(cStr) # 'L'
        MESSAGEBOX('公式('+ALLTRIM(gs)+')有错误!('+cStr+')')
        lErr = .t.
        RETURN
    CASE !EVALUATE(cStr)
        MESSAGEBOX('公式('+ALLTRIM(gs)+')未通过验证!('+cStr+')')
        lErr = .t.
        RETURN
    ENDCASE
ENDSCAN
IF !lErr
    MESSAGEBOX('验证全面通过!')
ENDIF

泉城飞狐
2016-03-11 16:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
通过编程是可以解决这个问题

坚守VFP最后的阵地
2016-03-11 16:15
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
此类程序,关键是看你的思路。我的基本思路是:用真实值替换公式中的行号,然后判断整个表达式的值是否为真,为真则通过,反之则不通过。若表达式的值不是逻辑型,则公式有误。上述代码都是围绕这个思路展开的。

泉城飞狐
2016-03-11 16:17
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
XM中的公式是用来提示说明行与行之间的数据关系的,实际情况应做到  L1字段,第三行:填入50人,第四行40人,第五行30人,则第二行生成120
第一步计算,第二步审核 来确保数据正确性。

[此贴子已经被作者于2016-3-11 16:35编辑过]

2016-03-11 16:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
上点原始数据来,便于测试

坚守VFP最后的阵地
2016-03-11 16:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
纸上谈兵是没用的

坚守VFP最后的阵地
2016-03-11 16:36
快速回复:计算汇总
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038217 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved