如何仅循环页面中从选中行到最后一行的记录?
解决方案
要实现仅循环页面显示范围内从选中行到最后一行的记录,核心是让循环的记录对象继承页面的筛选、排序规则,或者针对分页场景获取当前页的记录集合,以下分两种场景处理:
场景1:循环页面筛选后的所有记录(从选中行到最后一行)
你的代码未应用页面的筛选逻辑,导致遍历了全表记录。通过复制页面视图并定位到选中记录,即可实现目标范围的循环:
var ProdOrderLine: Record "Production Order Line"; begin // 复制当前页面的筛选条件与排序规则到目标记录 ProdOrderLine.CopyView(Rec); // 根据选中记录的主键定位到目标行(需根据你的表结构调整主键字段) if ProdOrderLine.Get(Rec."No.", Rec."Line No.") then begin REPEAT // 在此添加对每条记录的处理逻辑 Message('正在处理生产订单行:%1', ProdOrderLine."Line No."); UNTIL ProdOrderLine.NEXT = 0; end; end;
关键说明
CopyView(Rec):将页面的筛选条件、排序方式完全同步到ProdOrderLine,确保循环范围与页面显示的记录一致。Get(...):通过选中记录的主键字段定位到起始行,保证循环从选中行开始。REPEAT...UNTIL:按页面排序规则向后遍历所有符合筛选的记录,直到最后一行。
场景2:仅循环当前分页内从选中行到末尾的记录
如果你的页面是分页显示,且只需要处理当前分页内的后续记录,可通过页面的记录ID集合实现:
var CurrentPage: Page "Production Order Lines"; // 替换为你的页面名称/ID ProdOrderLine: Record "Production Order Line"; RecordIds: List of RecordId; startIndex: Integer; begin CurrentPage := CurrPage; // 获取当前分页所有记录的ID列表 CurrentPage.GetRecordIds(RecordIds); // 找到选中记录在列表中的起始索引 startIndex := RecordIds.IndexOf(Rec.RecordId); if startIndex <> 0 then begin // 从选中行的索引开始遍历到分页末尾 for startIndex from startIndex to RecordIds.Count do begin ProdOrderLine.Get(RecordIds.Get(startIndex)); // 添加你的处理逻辑 Message('处理当前分页记录:%1', ProdOrderLine."Line No."); end; end; end;
关键说明
GetRecordIds:获取当前分页显示的所有记录ID,仅包含页面当前可见的行。IndexOf:定位选中记录在分页列表中的位置,确保从选中行开始遍历。
内容的提问来源于stack exchange,提问作者kuhi
相关产品推荐
相关产品推荐

