以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  提示错误,请教怎么解决?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85094)

--  作者:意悠心轻
--  发布时间:2016/5/17 16:52:00
--  提示错误,请教怎么解决?

   上班天数不能重复计算,我想象冲压车间那样按计算按钮后凡同一天姓名重复出现的,重复那次不显示,结果报错了,应怎么编写代码?

 

    另请问软件使用期到了,我这星期要手术,要花比较多钱,想暂缓一下购买开发版软件,不知试用版还能用多久?


图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/6/26 15:47:00编辑过]

--  作者:大红袍
--  发布时间:2016/5/17 17:03: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) & "\'")
    Dim smoney As Double = DataTables("包装车间工资表").compute("sum(计件金额)", "日期=#" & ary(0) & "# and 生产形式=\'" & ary(1) & "\'")
    Dim stime As Double = DataTables("包装车间工资表").compute("sum(计件时间)", "日期=#" & ary(0) & "# and 生产形式=\'" & ary(1) & "\'")
    Dim dj As Double = smoney / stime
    For Each dr As DataRow In drs
        dr("分配单价") = dj
        dr("分配后金额") = format(dj * dr("计件时间"),"0.00")
    Next
Next
For Each dr As DataRow In DataTables("包装车间工资表").Select("生产形式 = \'个人\'")
    dr("分配单价") = Nothing
    dr("分配后金额") = format(dr("数量") * dr("单价"),"0.00")
Next

For Each ary As String In DataTables("包装车间工资表").GetValues("日期", "日期 is not null")
    Dim drs1 As List(Of DataRow) = DataTables("包装车间工资表").Select("日期=#" & ary & "#")
    Dim sum As Double = DataTables("包装车间工资表").compute("sum(上班工时)", "日期=#" & ary & "#")
    Dim count As Integer = 0
    Dim ls As new List(Of String)
    For Each dr As DataRow In drs1
        Dim str As String = 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 drs1
        If dr("备注") Like "*重复*" Then
            dr("上班天数") = Nothing
        End If
        If sum > = 8
            dr("上班天数") = 1
        Else
            dr("上班天数") = format(sum/8, "0.00")
        End If
    Next
Next

\'Tables("包装车间工资表").Filter = ""
Tables("包装车间工资表").Filter = "日期 is not null and (备注 is null or 备注 not like \'%重复%\')"
Tables("包装车间工资表").Sort = "日期,生产形式"


--  作者:大红袍
--  发布时间:2016/5/17 17:04:00
--  

试用版,可以使用三个月左右。重装系统,或者换一台电脑,可以继续使用。


--  作者:意悠心轻
--  发布时间:2016/5/17 17:14:00
--  
谢谢。
--  作者:意悠心轻
--  发布时间:2016/5/17 17:41:00
--  
    备注显示重复字样了,但上班天数不为空,你运行一下看看,4月8日重名的显示各上了一天班了。
--  作者:意悠心轻
--  发布时间:2016/5/17 17:44:00
--  
下面的条件语句要重写,回家再想。
--  作者:大红袍
--  发布时间:2016/5/17 17:46:00
--  

中间的代码改一下

 

    For Each dr As DataRow In drs1
        If dr("备注") Like "*重复*" Then
            dr("上班天数") = Nothing
        Else
            If sum > = 8
                dr("上班天数") = 1
            Else
                dr("上班天数") = format(sum/8, "0.00")
            End If
        End If
    Next


--  作者:意悠心轻
--  发布时间:2016/5/19 13:52:00
--  
以下是引用大红袍在2016/5/17 17:46:00的发言:

中间的代码改一下

 

    For Each dr As DataRow In drs1
        If dr("备注") Like "*重复*" Then
            dr("上班天数") = Nothing
        Else
            If sum > = 8
                dr("上班天数") = 1
            Else
                dr("上班天数") = format(sum/8, "0.00")
            End If
        End If
    Next

 

不执行最后的条件。改成这样也不行:

 For Each dr As DataRow In drs1
        If dr("备注") Like "*重复*" Then
            dr("上班天数") = Nothing
        ElseIf sum > = 8
            dr("上班天数") = 1
        Else
            dr("上班天数") = format(sum/8, "0.00")
        End If
    Next


--  作者:大红袍
--  发布时间:2016/5/19 14:37:00
--  
我测试,没问题。哪个数据什么问题啊?逻辑是什么啊?
--  作者:意悠心轻
--  发布时间:2016/5/19 14:52:00
--  
4月1日上了4小时班,结果应是0.5天,但执行出来的结果是1,也就是说没执行最后的条件。