以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教如何改  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96152)

--  作者:意悠心轻
--  发布时间:2017/2/14 13:00:00
--  请教如何改


图片点击可在新窗口打开查看此主题相关图片如下:捕获333.png
图片点击可在新窗口打开查看


 

我在包装车间工资表的表属性DataColChanged事件中修改了程序,因为要添加一个条件,如果当天的集体生产形式只有一种(即只有一条件生产线,以集体、集体1区分),则职位为拉长的系数为:1 + (fdr("系数") - 1)/ 2,否则系直接引用姓名表中的系数,程序修改后报错,请教如何修改。


 

[此贴子已经被作者于2017/2/15 11:58:51编辑过]

--  作者:有点色
--  发布时间:2017/2/14 13:17:00
--  

 不是很明显吗?你设置的条件应该是 #日期#

 

 而你后面的#改成了单引号\'

 


--  作者:意悠心轻
--  发布时间:2017/2/14 14:03:00
--  

日期格式我修改过来没报错了,但对包装车间工资表姓名列重置列,软件消失,程序有问题,麻烦帮我看看怎么改,谢谢。

[此贴子已经被作者于2017/2/14 14:04:52编辑过]

--  作者:有点色
--  发布时间:2017/2/14 14:11:00
--  

重置列,如果程序消失,说明死循环。自己调试下。

 

http://www.foxtable.com/webhelp/scr/1522.htm

 


--  作者:意悠心轻
--  发布时间:2017/2/14 15:04: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).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
    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 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
Next

[此贴子已经被作者于2017/2/14 15:11:32编辑过]

--  作者:有点色
--  发布时间:2017/2/14 15:06:00
--  
这段代码为什么要写在datacolchanged事件?单独做一个按钮不行?
--  作者:意悠心轻
--  发布时间:2017/2/14 15:10:00
--  

我的本意是自动引用,哦写到按钮里啊?让我想想怎么改。


--  作者:有点色
--  发布时间:2017/2/14 15:12:00
--  

如果你想写在datacolchanged事件,那就加载systemready,避免重复触发代码

 

http://www.foxtable.com/webhelp/scr/2218.htm

 


--  作者:意悠心轻
--  发布时间:2017/2/14 15:55:00
--  

我加了这段代码了,点重置列软件没消失了,但没实现自动引用系数。我在计算窗口里加了两个暂停执行事件代码按钮,一个执行的,一个关闭的,但并不明白它们在此的作用。


 

[此贴子已经被作者于2017/2/15 11:59:09编辑过]

--  作者:客人
--  发布时间:2017/2/14 16:40:00
--  
哦,明白了,设了这个按钮,安重置列不掉线,否则掉线。不过自动引用现在还没实现。