表一往来单位有五个字段,单位名称,单位编号,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编辑过]