U8 知识库文档
U8 单据列表控件
摘要
单据列表控件是供业务单据展示列表数据以及编辑处理的,并且集成了部分单据列表公
共按钮、快捷过滤、翻页功能。同时也支持直接通过单据列表编辑录入数据。
概念说明
公共按钮是指单据列表固有的一些操作,如:查询、条件格式设置、布局等等;快捷过
滤是一种更加直接快速的常用查询项目过滤,主要区别在于可以直接在列表主界面录入常用
过滤项目内容进行查询;翻页功能集成则是指列表控件自带了翻页处理,业务模块使用时可
以不用专门处理翻页的逻辑。
目标
本文主要介绍单据列表控件的业务应用及相关注意事项,方便各类 U8 产品开发人员更
好的使用高效开发产品。
文档内容
一、 列表控件(V11.0)增加的特性:
1. 集成【快捷过滤】功能;类似原来各列表界面里 toolbar
上的查询\刷新\[滤设]功能。
查询按钮下拉查询方案:默认操作兼容原有功能。
www.yonyou.com
U8 知识库文档
查询支持方案和快捷条件详细设置:
【快捷过滤】相关的业务组代码调整:调整过滤对象的查询方法
(UFGeneralFilter.FilterSrv.OpenFilter)调用,修改为调用过滤对象初始化方法
www.yonyou.com
U8 知识库文档
(UFGeneralFilter.FilterSrv. InitBaseVarValue),参数传递与过滤对象查询原来的方法
(UFGeneralFilter.FilterSrv.OpenFilter)兼容。然后调用新单据列表控件的快捷过滤初始
化方法(VouchList.InitFlt),把初始化好的过滤对象传入(如果没有过滤对象,也可以
直接传入过滤对象 ID 或过滤对象名称+子系统号)。 代码修改前后对比示例如下(灰
色字体部分是已经被注释的修改前的代码,下同):
…(引用的是服务协议列表代码修改模型)
Set m_opub = CreateObject("UFGeneralFilter.FilterSrv")
' bSuccess = m_opub.OpenFilter(g_Login,
"6729D410-233A-4674-A48A-2C34C17B82F6", "", "", ErrInfo)
'lliang_2011-11-22_[单据列表]:快捷过滤
bSuccess = m_opub.InitBaseVarValue(g_Login,
"6729D410-233A-4674-A48A-2C34C17B82F6", "", "", ErrInfo)
…
Call VouchList.InitFlt (g_Login, m_opub, "", "", "", "", Err)
参数 1:Login 对象
参数 2:过滤对象
参数 3:条件的 Key
参数 4:过滤的名称
参数 5:子产品号
参数 6:返回的错误信息
返回值:如果返回为 False 表明出现失败
说明:你可以用参数 2,忽略参数 3、4、5 或用参数 3 而忽略参数 2 和 4、5 或用
参数 4、5 而忽略 2 和 3.
注意事项:调用此初始化方法的时机要求在 Form_Load 事件里,目前大部分产品
的过滤对象调用(m_opub.OpenFilter)都是在相应的类模块或其他非窗体模块处理,
所以需要各模块根据实际情况把过滤对象变量有效传递到窗体然后在 Form_Load 事件
里调用。推荐的方法是事前在窗体模块声明全局变量,然后在调用过滤对象的地方把
已经初始化好的过滤对象暂时赋值给窗体的全局变量,最后在 Form_Unload 事件里即
时的释放该全局变量。
www.yonyou.com
…
// 直接在列表控件(V11.0)新增的查询事件中(FilterClick)调用原来的“查询”
功能即可,同时把此事件返回的过滤对象参数一并传递到原查询功能。
U8 知识库文档
…
Private Sub VouchList_FilterClick(fldsrv As Object)
Operating ("filter",fldsrv)
End Sub
…
注:是否显示快捷过滤依据的是原列表是否支持查询功能。
附:快捷过滤预置表:Data 库 的 flt_quickconditionset 表
对应字段说明:
filterid 过滤编号
userid 用户编号,业务组预置用固定的 system
itemName 用于快捷过滤的项的名称 如:cDepName
2. 集成【翻页】功能;取代原来各列表界面手工翻页或采用
平台翻页控件的功能。
【翻页】相关的业务组代码调整:
1) 业务代码原列表界面中使用平台的翻页控件(PagedivCtl)的情况:在调用平台翻页控件
绑定分页引擎的地方直接修改为用列表控件(V11.0)绑定分页引擎,接口方法和传递参
数完全兼容,同时删除原平台翻页控件并把相关的代码注释(包括原翻页控件涉及的事
件),同时把原翻页控件对应的事件实现在列表控件对应的事件中实现(事件兼容 )。
…(引用的是销售订单列表代码修改模型)
'Call PagedivCtl1.BindPagediv(m_pagediv)
'lliang_2011-11-22_[单据列表]: 翻页
Call VchLst.BindPagediv(m_pagediv)
…
'Private Sub PagedivCtl1_BeforeSendCommand(cmdType As U8VouchList.UFCommandType,
pageSize As Long, pageCurrent As Long)
' Me.VchLst.SetVchLstRst Nothing
' Me.VchLst.FillMode = FillOverwrite
www.yonyou.com
U8 知识库文档
'End Sub
Private Sub VchLst_BeforeSendCommand(cmdType As U8VouchList.UFCommandType, pageSize
As Long, pageCurrent As Long)
Me.VchLst.SetVchLstRst Nothing
Me.VchLst.FillMode = FillOverwrite
End Sub
…
2) 业务代码原列表界面没有采用平台的翻页控件,是自己处理的翻页功能的情况,时还
不想采用先前到翻页控件的方式(原因:代码改动太大,可能出错的情况也多,而且
直接影响由列表导航出的单据卡片翻页的界定范围),只是希望直接借用列表控件
(V11.0)的翻页框架,而列表数据的获取保持不变(还是由业务组直接获取传递给列表
控件)。就此方案代码模板示例如下:
//1、申明分页引擎变量
…(引用的是库存所有单据列表代码修改模型)
'lliang_2011-12-02_[新单据列表]:
Private WithEvents m_pagediv As Pagediv
…
//2、FormLoad 事件里初始化分页引擎并绑定到列表控件(V11.0)上(列表数据的加载过程保
持不变,并且此必须放到列表数据加载之前执行,并且确认列表数据加载后给原有的列表属
性 RecordCount 正确赋值了-应该是总记录数,而不是当前页显示的记录数)
'分页引擎
Set m_pagediv = New Pagediv
m_pagediv.PageInfo.CurrentPage = txtPage.Text
m_pagediv.PageInfo.pageSize = txtSize.Text
‘注:此两处代码赋值逻辑需要在运行期检查
原控件值是否存在
Call VouchList1.BindPagediv(m_pagediv)
…
//3、在列表控件新增的翻页相关的事件中实现原来的手工翻页逻辑。
Private Sub VouchList1_BeforeSendCommand(cmdType As U8VouchList.UFCommandType,
pageSize As Long, pageCurrent As Long)
txtSize.Text = pageSize
Select Case cmdType
Case UFFirst
cmdFirst_Click
Case UFPrevious
cmdPer_Click
Case UFNext
cmdNext_Click
Case UFLast
cmdLast_Click
Case UFOK
cmdOK_Click
Case Else
'
End Select
www.yonyou.com
U8 知识库文档
End Sub
注:是否显示翻页依据的是原列表是否支持翻页功能。
3) 业务代码原列表界面没有采用平台的翻页控件,而是自己处理的翻页功能的情况:这
种情况需要首先把业务组手工增加的列表翻页功能到平台翻页控件,然后再根据第 1)
种情况对应的方法到列表控件(V11.0),也可由手工的列表翻页功能直接到列表控件
(V11.0)的翻页。至于如何从手工翻页功能到平台的翻页控件,这个可以咨询目前已经
采用平台翻页控件的业务组成员处理(其中由列表导航出的单据卡片翻页的界定范围
需要通过列表过滤条件串约束),在此也简单就代码修改过程示例说明一下:(新作单
据列表时必须使用)
…(引用的是库存的其他入库单列表代码修改模型)
Private WithEvents m_pagediv As Pagediv
Private m_coni As IPagedivConi
…
//增加如下列表分页初始化方法,一个分页引擎事件。
Private Sub InitPagedivCtl(oColSet As Object, mCnn As Connection, VouchList As Object,
strWhere As String)
'分页引擎
'条件,基本上都是从 U8Colset 中进行初始化
‘初始化分页控件
Call InitConi(oColSet, strWhere , m_coni)
Set m_pagediv = New Pagediv
Call m_pagediv.Initialize(mCnn, m_coni)
‘Call PagedivCtl1.BindPagediv(m_pagediv)
Call VouchList.BindPagediv(m_pagediv)
Call m_pagediv.LoadData
End Sub
…
'初始化分页条件
Public Sub InitConi(ByVal oColSet As Object, strWhere As String, m_coni As IPagedivConi)
On Error GoTo ErrHandler
If m_coni Is Nothing Then
Set m_coni = New DefaultPagedivConi
End If
m_coni.From = "KCOtherInList"
源(视图)名称
'此处需要通过一个专门的方法获取列表对应的数据
If bGroupBy Then '是否查看汇总信息
m_coni.SelectConi = Replace(oColSet.GetSqlSumString, "''", "' '")
If strWhere = "" Then strWhere = "1=1"
m_coni.Where = strWhere
m_coni.GroupBy = oColSet.GetSqlGroupString
m_coni.OrderID = oColSet.GetOrderStringEx
m_coni.RealTableName = clsVoucherLst.GetVoucherListSet("maintbl")
m_coni.RealPrimaryKey = clsVoucherLst.GetVoucherListSet("mainkey")
'
'
Else
m_coni.SelectConi = oColSet.GetSqlString
m_coni.OrderID = oColSet.GetOrderStringEx
www.yonyou.com
U8 知识库文档
m_coni.Where = strWhere '相当于 where 部分
m_coni.GroupBy = ""
m_coni.RealTableName = "" ' clsVoucherLst.GetVoucherListSet("detailtbl")
m_coni.RealPrimaryKey = "" 'clsVoucherLst.GetVoucherListSet("detailkey")
m_coni.SumConi = ""
End If
ExitFnc:
Exit Sub
ErrHandler:
End Sub
…
Private Sub m_pagediv_AfterGetData(rst As ADODB.Recordset, cnt As Long)
VouchList1.SetVchLstRst Nothing
VouchList1.FillMode = FillOverwrite
ST_SetFormat VouchList1, CvouType
VouchList1.DoFormat
VouchList1.SumStyle = vlRecordAndGridsum
VouchList1.SetVchLstRst rst
If Not IsNull(ColSet) Then
VouchList1.InitHead ColSet.getColInfo
End If
VouchList1.RecordCount = cnt
getListData VouchList1, ClsBill, CvouType, nPages, 1, txtSize.Text, sWhere, True, , , , bGroupBy,
End Sub
…
//在所有以前手工调用查询列表数据的地方修改为调用此列表初始化方法:InitPagedivCtl
'
m_strGUID
'
Call InitPagedivCtl(ColSet, moLogin.AccountConnection, VouchList1, sWhere)
…
VouchList1.RecordCount = ClsBill.ListCount
3. 改变【行选择】功能;取代原来各列表界面里 toolbar 上
的全选/全消功能,同时取代以前双击列表选择列打”Y”
的功能。
选择:用列表头 check 方式取代原来的全选/消功能
www.yonyou.com
U8 知识库文档
【行选择】相关的业务组代码无需调整:以前判断行选择状态的方法(VouchList.TextMatrix(i,
oCols("selcol").iColPos) = "Y")完全兼容。
注:列表控件(V11.0)GRID 的左上角(0 行 0 列)是否显示复选框(即:是否支持全选/消)依据的是
原列表(toolbar)上是否支持“全选/全消”功能。
4. 调整【筛选】功能;取代原来列表控件自带的小漏斗按钮
‘筛选’功能。
移到了 toolbar 功能按钮区域,对应的筛选结果以红色字体在列表下文翻页区域显示。
www.yonyou.com