K - 3开发积累 联系客服

发布时间 : 星期日 文章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 '%采购管理%'