发布时间 : 星期日 文章K - 3开发积累更新完毕开始阅读d3a77c3067ec102de3bd8905
Private Function CallRpt() Dim objReport As Object Dim objRptView As Object On Error GoTo HErr
'创建\生产任务单执行明细表\
Set objReport = CreateObject(\
objReport.ExtFirter = \ '显示过滤界面
objReport.ShowFilter '取数
objReport.GetReportData
If Not objReport.Result(\ If objReport.Result(\
MsgBox \报表调用错误:\vbInformation, \金蝶提示\ End If
Screen.MousePointer = 0 GoTo HExit End If
'显示报表
Set objRptView = CreateObject(\ objRptView.Show objReport, 401 GoTo HExit HErr:
MsgBox \报表调用错误:\金蝶提示\ HExit:
Set objRptView = Nothing Set objReport = Nothing End Function
然后在m_BillTransfer对象的RetEvents事件中添加调用这个方法的代码:
Private Sub m_BillTransfer_RetEvents(ByVal Para As KFO.IDictionary) If Para(\ If Para(\ CallRpt End If
End If End Sub
现在重编译组件后就可以正常使用了。
顺便说一句,所有的工业报表的组件和编号可以通过以下SQL语句查询:
Select * From ICReport
在我们这个例子中,调用“生产任务单执行明细表”前需要先调用过滤界面来设置查询条件,因为“生产任务单执行明细表”没有开放直接传递过滤参数的接口,因此必须在调用取数前显示过滤界面。
有些报表开放了直接传递过滤参数的接口,因此可以简单的将objReport.ShowFilter语句替换为objReport.Filter = dctFilter即可,这样可以实现将单据编号等过滤信息直接传递生成报表的方式。对于要调用的报表是否支持.Filter接口,二次开发人员需要向总部相关的开发人员咨询,并获得dctFilter数据包相应的结构才能运行正常。
10. 如何在工业单据中修改一个表体K3值字段?
刚刚接到上海分公司二次开发同事的电话,询问如何在BOM插件中修改子项的内码和显示值,这是一个常见的工序工业单据中修改一个表体3值字段的问题,只要进行如下编写即可:
Private Const OperNo = 22 'FOperID的FCtlOrder
Private Sub SetOperID(ByVal Row As Long, ByRef dctResult As KFO.Dictionary) On Error GoTo HErr Dim EntryCtl As Variant
EntryCtl = m_BillTransfer.EntryCtl
EntryCtl(OperNo).DInterID(Row) = dctResult.GetValue(\ EntryCtl(OperNo).DNumber(Row) = dctResult.GetValue(\ EntryCtl(OperNo).DName(Row) = dctResult.GetValue(\ m_BillTransfer.EntryCtl = EntryCtl
m_BillTransfer.SetGridText Row, OperNo, dctResult.GetValue(\ HErr: .... End Sub
其中OperNo是单据模版中FOperID的FCtlOrder字段的值,m_BillTransfer对象参见《如何在工业单据中添加自定义的工具栏按钮及相应相关操作?》
11. 如何在工业单据中填充多行自定义数据?
刚刚接到重庆分公司二次开发同事的电话,询问如何在工业单据插件中填充多行自定义数据,这行数据来源于一个通过SQL获取的记录集,结合前面几篇文章可以进行如下编写实现: Private Sub FillDataToEntry(ByVal bClearFirst As Boolean) Dim objSrv As Object
Dim rs As ADODB.Recordset
On Error GoTo HErr
'访问中间层取数,返回要填充的记录集 Set objSrv = CreateObject(\ Set rs = objSrv.GetYYY(MMTS.PropsString)
If Not rs Is Nothing Then If rs.RecordCount > 0 Then rs.MoveFirst
If bClearFirst Then
m_BillTransfer.BillFunc.ClearFillData
'由于K3BILLS清除后没有修改MaxEntry,需要手动修改为1(默认1行) m_BillTransfer.BillFunc.MaxEntry = 1 End If
m_BillTransfer.BillFunc.FillBillDataExt rs, \ End If End If
GoTo HExit HErr: HExit:
Set objSrv = Nothing Set rs = Nothing End Sub
其中m_BillTransfer.BillFunc.FillBillDataExt是填充的方法,将rs的内容填充到表体中,第一个参数是需要填充的记录集,第二个参数为单据模版的FTemplateID,第三个参数是内码字段,后面2个参数可以不填。m_BillTransfer对象参见《如何在工业单据中添加自定义的工具栏按钮及相应相关操作?》
另外要注意中间层方法GetYYY返回的rs中字段的名称要按照单据模版的字段定义,这样才能正确将数据对应到相应的表体列上显示。
12. 菜单设置
--一级菜单
Select * from t_DataFlowTopClass where fTopClassName Like '供应链%' --二级菜单
Select * from t_DataFlowSubSystem where fName Like '%采购管理%'