Foxtable(狐表)用户栏目专家坐堂 → 请教如何设计这个表达式


  共有18866人关注过本帖树形打印复制链接

主题:请教如何设计这个表达式

美女呀,离线,留言给我吧!
意悠心轻
  71楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/5 20:25:00 [只看该作者]

不能用排序,应用筛选,因为我只要这个人的工资明细,其他人的不显,在excel里这功能很容易实现的,在FOXTABLE2016里我就不知了,还不熟悉软件功能。

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  72楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/5 21:02:00 [只看该作者]

      刚才没看清楚你的代码,全复制进去故报错,现在明白了,下面两行不是的,但程序依然有问题,麻烦帮我看看,应该把生产形式中的个人、集体、集体1、集体2字符识别出来,集体的分配,个人的直接计到个人不分配。
[此贴子已经被作者于2016/2/5 22:50:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  73楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/6 0:57:00 [只看该作者]

For Each ary() As String In DataTables("冲压车间工资表").GetValues("日期|产品名称|生产形式", "日期 is not null and 生产形式 <> '个人'")
    Dim drs As List(Of DataRow) = DataTables("冲压车间工资表").Select("日期=#" & ary(0) & "# and 产品名称='" & ary(1) & "' and 生产形式='" & ary(2) & "'")
    Dim sum As Double = 0
    Dim count As Integer = 0
    Dim ls As new List(Of String)
    For Each dr As DataRow In drs
        Dim fdr As DataRow = DataTables("价格表").find("产品名称 = '" & dr("产品名称") & "'")
        If fdr IsNot Nothing
            dr("单价") = fdr("单价")
        End If
        Dim str As String = dr("姓名")
        If ls.Contains(str) = False Then
            sum += dr("数量") * dr("单价")
            count += 1
            ls.add(str)
            dr("备注") = dr("备注").replace("重复", Nothing)
        Else
            dr("备注") = "重复" & dr("备注").replace("重复", Nothing)
        End If
    Next
    For Each dr As DataRow In drs
        If dr("备注") Like "*矿工*" OrElse dr("备注") Like "*重复*" Then
            dr("分配金额") = Nothing
        Else
            dr("分配金额") = format(sum/count, "0.00")
        End If
    Next
Next
For Each dr As DataRow In DataTables("冲压车间工资表").Select("生产形式 = '个人'")
    dr("备注") = dr("备注").replace("重复", Nothing)
    dr("分配金额") = dr("数量") * dr("单价")
Next

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  74楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/6 0:58:00 [只看该作者]

以下是引用意悠心轻在2016/2/5 20:25:00的发言:
不能用排序,应用筛选,因为我只要这个人的工资明细,其他人的不显,在excel里这功能很容易实现的,在FOXTABLE2016里我就不知了,还不熟悉软件功能。

 

筛选?这个意思?

 

Tables("冲压车间工资表").filter = "分配金额 is not null and 姓名 = '张三'"
Tables("冲压车间工资表").Sort = "姓名,日期"


 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  75楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/6 8:10:00 [只看该作者]

  我打错字了,我是只要一个人的工资,其他人不显,一个个查找,打给个人,因此姓名不能用固定字符。
[此贴子已经被作者于2016/2/6 8:40:31编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  76楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/6 8:40:00 [只看该作者]

format(sum/count, "0.00")是设置两位小数格式吧?没四舍五入功能,四舍五入我设为:iif(right(Int(dr("数量") * dr("单价")*100),1)>=5,Int(dr("数量") * dr("单价")*100)+1,Int(dr("数量") * dr("单价")*100))/100

还有你的公式把重名的计件金额完全排除在分配之外了,分配金额应等于同天、同集体生产同一产品计件总金额,安该组不重复人数平分,重名的不重复显示,个人计件的直接计到个人,你把重名的计件金额不列入分配金额,他们以集体生产分配的工资就少了。

[此贴子已经被作者于2016/2/6 8:44:41编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  77楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/6 9:18:00 [只看该作者]

以下是引用意悠心轻在2016/2/6 8:10:00的发言:
  我打错字了,我是只要一个人的工资,其他人不显,一个个查找,打给个人,因此姓名不能用固定字符。
[此贴子已经被作者于2016/2/6 8:40:31编辑过]

 

弄一个窗口,然后加入一个文本框和一个按钮查询即可

 

Tables("冲压车间工资表").filter = "分配金额 is not null and 姓名 = '" & e.Form.Controls("TextBox1").Text & "'"
Tables("冲压车间工资表").Sort = "姓名,日期"

 


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  78楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/6 9:20:00 [只看该作者]

format就是四舍五入,比如执行代码

 

msgbox(format(123.455, "0.00"))

如果重名的金额也计算如总金额,就这样改

 

For Each ary() As String In DataTables("冲压车间工资表").GetValues("日期|产品名称|生产形式", "日期 is not null and 生产形式 <> '个人'")
    Dim drs As List(Of DataRow) = DataTables("冲压车间工资表").Select("日期=#" & ary(0) & "# and 产品名称='" & ary(1) & "' and 生产形式='" & ary(2) & "'")
    Dim sum As Double = 0
    Dim count As Integer = 0
    Dim ls As new List(Of String)
    For Each dr As DataRow In drs
        Dim fdr As DataRow = DataTables("价格表").find("产品名称 = '" & dr("产品名称") & "'")
        If fdr IsNot Nothing
            dr("单价") = fdr("单价")
        End If
        Dim str As String = dr("姓名")
        sum += dr("数量") * dr("单价")
        If ls.Contains(str) = False Then
            count += 1
            ls.add(str)
            dr("备注") = dr("备注").replace("重复", Nothing)
        Else
            dr("备注") = "重复" & dr("备注").replace("重复", Nothing)
        End If
    Next
    For Each dr As DataRow In drs
        If dr("备注") Like "*旷工*" OrElse dr("备注") Like "*重复*" Then
            dr("分配金额") = Nothing
        Else
            dr("分配金额") = format(sum/count, "0.00")
        End If
    Next
Next
For Each dr As DataRow In DataTables("冲压车间工资表").Select("生产形式 = '个人'")
    dr("备注") = dr("备注").replace("重复", Nothing)
    dr("分配金额") = dr("数量") * dr("单价")
Next
[此贴子已经被作者于2016/2/6 14:14:17编辑过]

 回到顶部
美女呀,离线,留言给我吧!
意悠心轻
  79楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:512 积分:3358 威望:0 精华:0 注册:2016/1/31 16:04:00
  发帖心情 Post By:2016/2/6 11:20:00 [只看该作者]

备注中出现旷工二字的不显分配金额没反应,还有执行分配金额后,安汇总设置统计小计,前面出现许多空行,你说筛选掉空行,一筛选,没小计了!


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  80楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/6 11:49:00 [只看该作者]

旷工的问题,写错了:

 

 If dr("备注") Like "*旷工*" OrElse dr("备注") Like "*重复*" Then

 

空行的问题,你要先筛选,再汇总的。


 回到顶部