以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]已使用的不是末级的部门编码不允许增加下级  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=55544)

--  作者:blsu33
--  发布时间:2014/8/19 7:26:00
--  [求助]已使用的不是末级的部门编码不允许增加下级

老师,

    如何实现,已使用的不是末级的部门编码不允许增加下级,除非删除已使用的职员档案资料,才可以修改。

举例:

   部门档案 01财务      职员档案 0001 某某 属于01财务

 

现在增加了部门0101 财务下的结算部    在职员档案中找到 了已经使用的 01 财务 不允许增加。例子如下:

 

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:部门档案.foxdb


--  作者:有点甜
--  发布时间:2014/8/19 9:41:00
--  

   

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:部门档案.foxdb


--  作者:blsu33
--  发布时间:2014/8/20 8:18:00
--  

有点甜老师,

     还是不行,没达到目标,好似没有变化。


--  作者:有点甜
--  发布时间:2014/8/20 9:10:00
--  

关键是不明白你的需求是什么,数据表改变了,生成的树一定会改变的,2楼的例子只是限制录入子部门。

 

你给的需求不合理。


--  作者:blsu33
--  发布时间:2014/8/20 16:49:00
--  
老师 例子是这样 

部门档案 编码级次2级 ** **例如(01财务部 0101结算部)
职员档案 编码级次1级 ****例如 0001 张三

6月
部门档案增加财务部01  是否末级定义为末级                                                    
职员档案,新建了张三0001 ,属于财务部,部门列选择了01 财务部

7月
由于分工的增加
部门档案中 的财务部01 下 要增加一个结算部0101

以上部分,我上传的例子已经实现
想要老师帮助下面部分 
在部门档案中,需要提示 01财务部作为末级数据已经使用,不允许增加下级0101 结算部




--  作者:有点甜
--  发布时间:2014/8/20 17:14:00
--  

DatacolChanging代码替换一下

 

If e.DataCol.Name = "编码规则" Then
    Dim dr As DataRow
    dr = e.DataTable.Find("编码规则 = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
        MessageBox.Show("编码重复!")
        e.Cancel = True
        dr.Delete
    End If
End If


If e.DataCol.Name = "编码规则" AndAlso e.NewValue <> Nothing Then
    Dim fdr As DataRow = DataTables("分类编码方案").Find("基础档案名称 = \'" & e.DataTable.Name & "\'")
    If fdr IsNot Nothing Then
        Dim reg As new System.Text.RegularExpressions.Regex(fdr("正则"))
        If reg.Ismatch(e.NewValue) = False Then
            e.Cancel = True
        Else
            e.DataRow("是否末级") = (fdr("字符数") = e.NewValue.length)\'我加的
            Dim count As Integer = 0
            Dim prev As String = ""
            For i As Integer = 0 To fdr("编码规则").length - 1
                count += val(fdr("编码规则").chars(i))
               
                Dim str As String = e.NewValue.Substring(0, count)
               
                If DataTables("职员档案").Find("编码规则 = \'" & str & "\'") IsNot Nothing Then
                    msgbox("已使用,不能添加")
                    e.NewValue = Nothing
                    Exit For
                Else
                   
                   
                    If count < e.NewValue.length Then
                        If e.DataTable.Find("编码规则 = \'" & str & "\'") Is Nothing Then
                            MessageBox.Show("缺少上级科目:" & str,"提示",MessageBoxButtons.OK)
                            e.Cancel = True
                            e.DataRow("是否末级")=False
                            Exit For
                        End If
                    Else If count = e.NewValue.length  Then
                        If i = fdr("编码规则").length - 1 Then
                            e.DataRow("是否末级") = True
                            e.DataTable.ReplaceFor("是否末级", False, "编码规则 = \'" & prev & "\'")
                        Else
                            Dim filter As String = "编码规则 <> \'" & str & "\' and 编码规则 like \'" & str & "*\'"
                            If  e.DataTable.Find(filter) Is Nothing Then
                                e.DataRow("是否末级") = True
                                filter = "编码规则 = \'" & prev & "\'"
                                e.DataTable.ReplaceFor("是否末级", False, filter)
                            Else
                                e.DataRow("是否末级") = False
                            End If
                           
                            Exit For
                        End If
                    End If
                    prev = str
                End If
            Next
           
        End If
    End If
End If


--  作者:blsu33
--  发布时间:2014/10/20 11:37:00
--  已使用的部门,不允许修改部门名称
老师,
    已使用的部门,怎么写代码能达到在职员中使用的部门,不允许在部门档案中修改部门名称,谢谢。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:部门档案.foxdb


--  作者:有点甜
--  发布时间:2014/10/20 11:43:00
--  

 datacolchanging事件,代码

 

If e.DataCol.Name = "编码名称" Then
    Dim dr As DataRow
    dr = e.DataTable.Find("编码名称 = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
        MessageBox.Show("部门名称重复是否正确!","请确认")
        e.Cancel = True
    Else
        dr = DataTables("职员档案").Find("编码名称 = \'" & e.OldValue & "\'")
        If dr IsNot Nothing Then
            msgbox("已使用,不能重命名")
        End If
    End If
End If


--  作者:blsu33
--  发布时间:2014/10/25 21:40:00
--  
有点甜 老师

出现了一个问题,增加了一条记录05 财务部门 保存退出;
再进去使用修改 将05 改为0501 提示不存在05 一级科目 但是“e.Cancel = True”好似没有执行,如下图,这是为什么呢?
求老师帮忙解一下。


图片点击可在新窗口打开查看此主题相关图片如下:一级改为二级,末级有问题.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2014/10/26 9:38:00
--  

If e.DataCol.Name = "编码规则" Then
    Dim dr As DataRow
    dr = e.DataTable.Find("编码规则 = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
        MessageBox.Show("编码重复!")
        e.Cancel = True
        dr.Delete
    End If
End If


If e.DataCol.Name = "编码规则" AndAlso e.NewValue <> Nothing Then
    Dim fdr As DataRow = DataTables("分类编码方案").Find("基础档案名称 = \'" & e.DataTable.Name & "\'")
    If fdr IsNot Nothing Then
        Dim reg As new System.Text.RegularExpressions.Regex(fdr("正则"))
        If reg.Ismatch(e.NewValue) = False Then
            e.Cancel = True
        Else
            e.DataRow("是否末级") = (fdr("字符数") = e.NewValue.length)\'我加的
            Dim count As Integer = 0
            Dim prev As String = ""
            For i As Integer = 0 To fdr("编码规则").length - 1
                count += val(fdr("编码规则").chars(i))
               
                Dim str As String = e.NewValue.Substring(0, count)
                If count < e.NewValue.length Then
                    If e.DataTable.Find("编码规则 = \'" & str & "\'") Is Nothing Then
                        MessageBox.Show("缺少上级科目:" & str,"提示",MessageBoxButtons.OK)
                        e.Cancel = True
                        e.DataRow("是否末级")=False
                        Exit For
                    Else If e.OldValue = str Then
                        MessageBox.Show("缺少上级科目:" & str,"提示",MessageBoxButtons.OK)
                        e.Cancel = True
                        Exit For
                    End If
                Else If count = e.NewValue.length  Then
                    If i = fdr("编码规则").length - 1 Then
                        e.DataRow("是否末级") = True
                        e.DataTable.ReplaceFor("是否末级", False, "编码规则 = \'" & prev & "\'")
                    Else
                        Dim filter As String = "编码规则 <> \'" & str & "\' and 编码规则 like \'" & str & "*\'"
                        If  e.DataTable.Find(filter) Is Nothing Then
                            e.DataRow("是否末级") = True
                            filter = "编码规则 = \'" & prev & "\'"
                            e.DataTable.ReplaceFor("是否末级", False, filter)
                        Else
                            e.DataRow("是否末级") = False
                        End If
                       
                        Exit For
                    End If
                End If
                prev = str
            Next
        End If
    End If
End If