Foxtable(狐表)用户栏目专家坐堂 → 请教如何改


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

主题:请教如何改

帅哥哟,离线,有人找我吗?
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106665 积分:542508 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/14 16:41:00 [只看该作者]

把计算备注和表事件分开

DataColChanged事件

Select Case e.DataCol.name
    Case "产品名称规格", "工序"
        Dim fdr As DataRow = DataTables("价格表").find("产品名称 = '" & e.DataRow("产品名称规格").replace("'", "''") & "' and 工序 = '" & e.DataRow("工序") & "'")
        If fdr IsNot Nothing
            e.DataRow("单价") = fdr("单价")
        End If
End Select



Select Case e.DataCol.name
    Case "日期","姓名","职位","系数"
        Dim d As Date = e.DataRow("日期")
        d = new Date(d.year, d.month, 1)
        Dim fdr As DataRow = DataTables("姓名").find("姓名 = '" & e.DataRow("姓名") & "' and 日期 >= #" & Format(d,"yyyy-MM-dd") & "# and 日期 < #" & Format(d.AddMonths(1),"yyyy -MM-dd") & "#", "日期 desc")
        If fdr IsNot Nothing
            e.DataRow("职位") = fdr("职位")
            If e.DataTable.GetValues("日期|生产形式", "日期 is not null and 生产形式 <> '个人'").Count > 1 Then
                If e.DataRow("职位") Like "*拉长*" Then
                    e.DataRow("系数") = 1 + (fdr("系数") - 1)/ 2
                Else
                    e.DataRow("系数") = fdr("系数")
                End If
            Else
                e.DataRow("职位") = Nothing
                e.DataRow("系数") = Nothing
            End If
        End If
End Select

按钮事件

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).Replace("'","''") & "'")
    Dim count As Integer = 0
    Dim ls As new List(Of String)
    If DataTables("包装车间工资表").DataCols.Contains("备注1") = False Then
        DataTables("包装车间工资表").DataCols.add("备注1", Gettype(String))
    End If
    For Each dr As DataRow In drs
        Dim str As String = dr("生产形式")
        If ls.Contains(str) = False Then
            count + = 1
            ls.add(str)
            dr("备注1") = dr("备注1").replace("重复", Nothing)
        Else
            dr("备注1") = "重复" & dr("备注1").replace("重复", Nothing)
        End If
    Next
Next

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


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

下面的代码放到计算按钮里?是能引用了,但结果不对,因为你把计算分开了,计算是判断条件之一,如果当天的集体生产形式只有一种(即只有一条件生产线,以集体、集体1区分),则职位为拉长的系数为:1 + (fdr("系数") - 1)/ 2,否则系直接引用姓名表中的系数。

[此贴子已经被作者于2017/2/14 17:31:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/14 17:59:00 [只看该作者]

改一下就行

 

Select Case e.DataCol.name
    Case "日期","姓名","职位","系数"
        Dim d As Date = e.DataRow("日期")
        d = new Date(d.year, d.month, 1)
        Dim fdr As DataRow = DataTables("姓名").find("姓名 = '" & e.DataRow("姓名") & "' and 日期 >= #" & Format(d,"yyyy-MM-dd") & "# and 日期 < #" & Format(d.AddMonths(1),"yyyy -MM-dd") & "#", "日期 desc")
        If fdr IsNot Nothing
            e.DataRow("职位") = fdr("职位")
            If e.DataTable.GetValues("生产形式", "日期 = #" & e.DataRow("日期") & "# and 生产形式 <> '个人'").Count > 1 Then
                If e.DataRow("职位") Like "*拉长*" Then
                    e.DataRow("系数") = 1 + (fdr("系数") - 1)/ 2
                Else
                    e.DataRow("系数") = fdr("系数")
                End If
            Else
                e.DataRow("职位") = Nothing
                e.DataRow("系数") = Nothing
            End If
        End If
End Select
[此贴子已经被作者于2017/2/14 18:01:32编辑过]

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


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

  结果不对,我改成下面的公式,结果没安月份把相应月的系数引用。
[此贴子已经被作者于2017/2/14 20:25:58编辑过]

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


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

改为这样,结果把曾经是拉长的系数都引过去了!
Select Case e.DataCol.name
    Case "日期","姓名","职位","系数"
        Dim d As Date = e.DataRow("日期")
        d = new Date(d.year, d.month, 1)
        Dim fdr As DataRow = DataTables("姓名").find("姓名 = '" & e.DataRow("姓名") & "' and 日期 >= #" & Format(d,"yyyy-MM-dd") & "# and 日期 < #" & Format(d.AddMonths(1),"yyyy -MM-dd") & "#", "日期 desc")
        If fdr IsNot Nothing
            e.DataRow("职位") = fdr("职位")
            If e.DataTable.GetValues("生产形式", "日期 = #" & e.DataRow("日期") & "# and 生产形式 <> '个人'").Count = 1 Then
                If e.DataRow("职位") Like "*拉长*" Then
                    e.DataRow("系数") = 1 + (fdr("系数") - 1)/ 2
                Else
                    e.DataRow("系数") = fdr("系数")
                End If
            Else
                e.DataRow("职位") = Nothing
                e.DataRow("系数") = Nothing
            End If
        End If
End Select
[此贴子已经被作者于2017/2/14 20:33:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106665 积分:542508 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/14 20:30:00 [只看该作者]

搞不懂你的业务逻辑。

建议你网上找点数据库设计的知识看看。不要想着把所有的业务都能一个表格里处理完,那是Excel的作法,不是狐表的用法。

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


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

这是喷涂车间的工资表,姓名列同样有程序安所在行年月引用系数表对应年月岗位、系数,包装车间的工资表的系数引用原理与喷涂差不多,只是多了一个条件,同一天不重复的集体生产形式只有一种时,拉长的系数等于当前行所对应年月引用姓名表相应年月系数:1 + (fdr("系数") - 1)/ 2,否则直接引用与当前行年月对应的姓名表的系数 fdr("系数"),现在安照你说的做成这样,不安计算窗口中的关闭姓名重置错误按钮直接重置姓名列就掉线,按了不掉线,但执行姓名重置没反应,应如何解决这问题。
foxtabl是不能完全完成工资计算,还有二资分配,加班费、水电扣减、个人所得税等要在excel中完成,但目录树查找、同步录入、引用,运行程序进行初次分配还是foxtable强,目前完成工资分配要二者结合。
[此贴子已经被作者于2017/2/15 14:43:22编辑过]

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


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

  真正要把生产管好,还要核对ERP软件的上的数据,看计划、生产、进仓数据,所以小小的工资计算涉及了计划、生产、仓库管理。
[此贴子已经被作者于2017/2/14 21:29:19编辑过]

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


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

  如果实在不行我考虑加条件,改程序吧!

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


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

在生产形式列属性添加一个集体(单组)下拉选项,然后在包装车间工资表表属性DataColChanged事件加入这段代码,引用成功了!

Select Case e.DataCol.name
    Case "姓名","职位"
        Dim d As Date = e.DataRow("日期")
        d = new Date(d.year, d.month, 1)
        Dim fdr As DataRow = DataTables("姓名").find("姓名 = '" & e.DataRow("姓名") & "' and 日期 >= #" & Format(d,"yyyy-MM-dd") & "# and 日期 < #" & Format(d.AddMonths(1),"yyyy -MM-dd") & "#", "日期 desc")
        If fdr IsNot Nothing
            e.DataRow("职位") = fdr("职位")
            If e.DataRow("生产形式") Like "*集体(单组)*" And e.DataRow("职位") Like "*拉长*"  Then
                  e.DataRow("系数") = 1 + (fdr("系数") - 1)/ 2
            Else
                e.DataRow("系数") = fdr("系数")
            End If
        Else
            e.DataRow("职位") = Nothing
            e.DataRow("系数") = Nothing
        End If
End Select


 回到顶部
总数 20 上一页 1 2