-- 作者: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编辑过]
|