以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  两个表部分字段同步的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144901)

--  作者:keli0917
--  发布时间:2020/1/2 12:53:00
--  两个表部分字段同步的问题

表一往来单位有五个字段,单位名称,单位编号,C1,D1,E1

表二GLOBJ有六个字段,FOBJNAME,FOBJID,G2,H2,I2,j2

 

 

 

表一,表二,都有可能录入新数据,但是数据录入多数时候都是在表一中录入。表一录入在FT中完成,表二的录入在KIS财务软件中完成。

表一和表二数据不一致时,以表二数据为准。

表二的表事件不准使用。只能用表一的表事件。

应该怎么办?

 

初步思路:

1.表一中先录入单位名称,然后自动生成单位编号。生成编号前先在GLOBJ中查找,找到就取过来。找不到就自动生成编号。录入保存前,BEFORESAVEDATAROW事件中

 

Dim dre  As  DataRow = e.DataRow
If dre.RowState <> DataRowState.Added  Then  \'如果不是新增行
    Return \'那么返回
ElseIf dre.IsNull("单位名称") Then  \'如果没有输入单位名称
    e.Cancel =  True \'取消保存此行
    MessageBox.Show("必须输入往来单位名称!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
Else     \'------------------------如果往来单位里的单位名称有值
   
   
    \'If e.DataRow.IsNull("单位编号") = True Then      \'------------------------且单位编号为空,则自动生成FObjID---开始----------------------------
    Dim dr2 As DataRow
    dr2 =  DataTables("GLObj").sqlFind("[FObjName] = \'" & e.DataRow("单位名称") &  "\'")
    If dr2 IsNot Nothing Then   \'如果在金碟KIS数据库的GLOBJ表里找到FOBJNAEM
        e.DataRow("单位编号") =  dr2("FObjID") \'那就把GLOBJ里的FOBJid复制到往来单位里.
    Else
       
        Dim lb,pye,pya,pyt,pyz As String
        Dim kh As String = dre("单位名称")
        \'Dim kh As String = al.Replace(" ","")
       
        \'------------------------单位编号自动生成单位编号---开始----------------------------
        \'如果找不到,就用下面的代码自动生成
        Dim fb As String = StrToNarrow(kh) \'把kh转换成半角
        \'If kh.Contains("省") = True Then
        \' kh = kh.Replace("省"," ")
        \' End If
        \'MessageBox.show(fb)
       
       
        If fb.Contains("(") = True And fb.Contains(")") = True  Then \'处理(,)等中文格式或者英文格式的字符
            pyt = fb.SubString(0,fb.IndexOf("(")) + fb.SubString(fb.IndexOf("(")+1, fb.IndexOf(")") - fb.IndexOf("(")-1) + fb.SubString(fb.IndexOf(")")+1,fb.length - fb.IndexOf(")")-1)
           
        Else
            pyt= fb.trim()
           
        End If
        \'MessageBox.show(pyt)
        \'MessageBox.Show(pye.IndexOf("("))
        \' If PY.IsHanzi(pyt) Then
        pya = PY.GetPY(pyt, True, 3)
        \'Else
        \'pya = pya
        \' End If
        Dim Len As Integer
        Len = pya.length
        \' MessageBox.show(pya)
        If Len < 5 Then
            LB =  pya.Substring(0,Len)
        Else
            LB =  pya.Substring(0,5)
        End If
       
        \'  MessageBox.show(lb)
        Dim dr As DataRow
        dr =  DataTables("往来单位").sqlFind("[单位编号] = \'" & lb &  "\'")
        If dr Is Nothing Then               \'如果单位编号在往来单位表里不存在
            dre("单位编号") = lb.ToUpper()
            \'    MessageBox.show(2)
        Else
            Dim max,txt As String
            Dim idx As Integer
            max = e.DataTable.SQLCompute("Max(单位编号)","[单位编号]  like \'% " & lb & " %\' And [_Identify] <> " & dre("_Identify")) \'取得该类别的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(5,2)) + 1 \'获得最大编号的后2位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End If
            dre("单位编号") = lb.ToUpper() & Format(idx,"00")
        End If
    End If
    \'------------------------------------------自动生成单位编号---结束---------------------
 
 

End  If

 

 

2.每次保存后同步到金碟中,应该在哪儿写代码?是DATAROWADDED吗?

 

 

 

 

 

[此贴子已经被作者于2020/1/2 12:57:19编辑过]

--  作者:有点蓝
--  发布时间:2020/1/2 13:47:00
--  
就在上面代码里保存即可

            Else
                idx = 1 \'否则顺序号等于1
            End If
            dre("单位编号") = lb.ToUpper() & Format(idx,"00")
        End If

‘这里添加同步到金碟中的代码

    End If
    \'------------------------------------------自动生成单位编号---结束---------------------
 
 

End  If