K3 销售合同开发
1.实现销售合同中【直接客户】信息的录入后,自动带出关联【省份】的信息,根据BOS单据的基本设置不能将省份信息写成字
段进行推送,故需要在BOS单据中进行插件开发;
开发过程中有个关键表:
1)选择直接用户的表结构 为新增添的核算项目,查询表语句为:
select b.fid from t_Item_3030 a inner join t_submessage b on a.f_102=b.finterid where a.fitemid = 196918
--t_Item_3030 :核算项目存储表;--t_submessage 辅助资料基础表
2)选择购货客户的表结构,查询语句为:
select B.fid from t_Organization a inner join t_submessage b on a.F_107=b.finterid where fitemid=12316
--客户信息表为:t_Organization; --t_submessage 辅助资料基础表
2.利用K3 wise与VB6.0插件开发工具进行插件开发;开发代码如下:
'定义 BillEvent 接口. 必须具有的声明, 以此来获得事件 Private WithEvents m_BillInterface As BillEvent Public Sub Show(ByVal oBillInterface As Object) 'BillEvent 接口实现 '注意: 此方法必须存在, 请勿修改 Set m_BillInterface = oBillInterface End Sub Private Sub Class_Terminate() '释放接口对象 '注意: 此方法必须存在, 请勿修改 Set m_BillInterface = Nothing End Sub Private Sub m_BillInterface_Change(ByVal Dct As KFO.IDictionary, ByVal dctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean) 'TODO: 请在此处添加代码响应事件 On Error GoTo Handle Dim LDct As KFO.Dictionary Dim LdctFld As KFO.Dictionary Dim LCol As Long, LRow As Long, Fieldname As String Dim FItemID As Long Dim SQL(2) As String Dim obj As Object Set LDct = Dct Set LdctFld = dctFld LCol = Col LRow = Row FItemID = Val(LdctFld("FFld")) ''直接用户 If LDct("ctlindex") = 42 And FItemID > 0 Then SQL(0) = "select b.fid from t_Item_3030 a inner join t_submessage b on a.f_102=b.finterid where a.fitemid = " SQL(0) = SQL(0) & FItemID Set obj = m_BillInterface.K3Lib.GetData(SQL(0)) If obj.bof = True Then Exit Sub Else m_BillInterface.SetFieldValue "FBase3", obj!FID Set obj = Nothing End If ''购货单位 ElseIf LDct("ctlindex") = 46 And FItemID > 0 Then SQL(1) = "select b.FID from t_Organization a inner join t_submessage b on a.F_107=b.finterid where fitemid= " & FItemID Set obj = m_BillInterface.K3Lib.GetData(SQL(1)) If obj.bof = True Then Exit Sub Else m_BillInterface.SetFieldValue "FBase5", obj!FID Set obj = Nothing End If ElseIf UCase(LDct("ffieldname")) = UCase("FProductID") And FItemID > 0 Then ''产品代码-包装类别、物料大类 SQL(2) = "select b.fname MatrType,c.fname PackType from t_icitem a inner join t_item b on a.F_128=b.fitemid inner join t_item c on a.F_142=c.fitemid where a.fitemid= " SQL(2) = SQL(2) & FItemID Set obj = m_BillInterface.K3Lib.GetData(SQL(2)) If obj.bof = True Then Exit Sub Else m_BillInterface.SetFieldValue "PackType", obj!PackType m_BillInterface.SetFieldValue "MatrType", obj!MatrType Set obj = Nothing End If End If Exit Sub Handle: MsgBox Error.Description Set obj = Nothing End Sub
程序中出现个人问题,导致时间浪费,主要问题归纳总结为:
On Error GoTo Handle 使用问题 错误处理程序必须在程序结束后,挂上后程序执行未出现错误就不会报错,本次因对该方法运用不熟练导致调试过程中浪费时间较长,后续将on error goto 进行总结;
On Error GoTo
On Error GoTo 0
表示禁止当前过程中任何已启动的错误处理程序。
On Error Resume Next
说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo。
On Error GoTo line
启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。
一般情况下,如果在对我们创建的对象或控件进行错误捕捉,需要使用On Error Resume Next ,然后在判断它的Err.Number,根据错误类型来做相应的处理。