Шаблон небольшой и, возможно, пригодится еще кому, так что - "кидаю" прямо в рассылку.
ШВС С55, последняя версия.
Одно замечание - не помню точно есть-ли в них нужные точки вставки, так что перед установкой шаблона следует проверить их наличие:
- файл CTLBROW.TPW
  - рутинка %InstancePrefix:FillRecord ROUTINE
Код: Выделить всё
    ...
    #EMBED(%FillRecordStartLoop,'FillRecord ROUTINE - Начало цикла считывания
записей'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),HIDE
    ...
    #EMBED(%FillRecordEndLoop,'FillRecord ROUTINE - Конец цикла считывания
записей'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,%ActiveTemplateinstanceDescription),HIDE
Можно данный шаблон "засунуть" в один из TPW-файлов
из стандартного набора ШВС, например в конец файла EXTENS.TPW.
Или создать новый набор шаблонов, создав новый TPL-файл:
#!------------------------------------------------------------------------------
#TEMPLATE(Browse_Extensions,'Дополнительные шаблоны для BROWSE')
#!------------------------------------------------------------------------------
и вставить в него нижеприведенный код.
Только не забудьте после этого зарегистрировать этот новый
набор шаблонов.
    
#!------------------------------------------------------------------------------
#!------------------------------------------------------------------------------
#EXTENSION(BrowseViewRead,'Чтение записей в BrowseBox'),DESCRIPTION('Чтение записей в BrowseBox для ' &
%Primary),REQ(BrowseBox(Clarion))
#!------------------------------------------------------------------------------
#BOXED('')
  #DISPLAY('Данный шаблон генерит рутинки, которые позволяют')
  #DISPLAY('легко организовать чтение записей из текущего View,')
  #DISPLAY('учитывая все рукописные фильтры во вставках.')
#ENDBOXED
#SHEET
  #TAB('Рутинки')
    #BOXED('')
      #DISPLAY('BRWx::ViewRead:Init - Инициализация')
      #DISPLAY('    Запоминает текущую позицию во View.')
      #DISPLAY('    Инициализирует View для последующего чтения.')
      #DISPLAY('BRWx::ViewRead:Next - Следующая запись')
      #DISPLAY('    Читает в буфер следующую запись, которая')
      #DISPLAY('    удовлетворяет всем условиям фильтрации.')
      #DISPLAY('BRWx::ViewRead:Prev - Предыдущая запись')
      #DISPLAY('    Читает в буфер предыдущую запись, которая')
      #DISPLAY('    удовлетворяет всем условиям фильтрации.')
      #DISPLAY('BRWx::ViewRead:Done - Завершение')
      #DISPLAY('    Возвращает указатель во View в позицию')
      #DISPLAY('    перед инициализацией.')
    #ENDBOXED
  #ENDTAB
  #TAB('Переменные')
    #BOXED('')
      #DISPLAY('Перед чтением можно задать кол-во записей,')
      #DISPLAY('которые следует пропустить - BRWx::ViewRead:Skip.')
      #DISPLAY('При инициализации и после каждого чтения данная')
      #DISPLAY('переменная обнуляется.')
      #DISPLAY('')
      #DISPLAY('После операций чтения следует проверять')
      #DISPLAY('переменную BRWx::ViewRead:Complete.')
      #DISPLAY('Данная переменная выставляется в True при')
      #DISPLAY('достижении конца или начала текущего View.')
      #DISPLAY('')
      #DISPLAY('Можно, так-же, использовать:')
      #DISPLAY('BRWx::ViewRead:TotalRecs - Всего записей во View')
      #DISPLAY('BRWx::ViewRead:Counter - Считано записей')
    #ENDBOXED
  #ENDTAB
#ENDSHEET
#!
#ATSTART
  #DECLARE(%ReadPrefix)
  #SET(%ReadPrefix,%InstancePrefix&':ViewRead')
  #COMMENT(50)
#ENDAT
#!
#AT(%DataSectionAfterWindow)
!-------------------------------------------------------------------------------
#SET(%ValueConstruct,%ReadPrefix&':Complete')
%[20]ValueConstruct BYTE                         #<! Конец или начало View
#SET(%ValueConstruct,%ReadPrefix&':TotalRecs')
%[20]ValueConstruct LONG                         #<! Кол-во записей во View
#SET(%ValueConstruct,%ReadPrefix&':Counter')
%[20]ValueConstruct LONG                         #<! Всего считано записей
#SET(%ValueConstruct,%ReadPrefix&':Skip')
%[20]ValueConstruct LONG                         #<! Перескочить столько записей
#SET(%ValueConstruct,%ReadPrefix&':SaveViewPos')
%[20]ValueConstruct STRING(1024)                 #<! Позиция во View перед инициализацией
!-------------------------------------------------------------------------------
#ENDAT
#!
#AT(%FillRecordStartLoop),WHERE(%Control = %ListControl)
%ReadPrefix:Complete = True
#ENDAT
#!
#AT(%FillRecordEndLoop),WHERE(%Control = %ListControl)
%ReadPrefix:Complete = False
#ENDAT
#!
#AT(%ProcedureRoutines)
!-------------------------------------------------------------------------------
! Реализация "ручного" чтения записей из %ListView
!-------------------------------------------------------------------------------
#SET(%ValueConstruct,%ReadPrefix & ':Init')
%[20]ValueConstruct ROUTINE
  %ReadPrefix:Complete = False
  %ReadPrefix:SaveViewPos = POSITION(%ListView)
  DO %InstancePrefix:Reset
  %ReadPrefix:TotalRecs = RECORDS(%ListView)
  %ReadPrefix:Counter = 0
  %ReadPrefix:Skip = 0
#SET(%ValueConstruct,%ReadPrefix & ':Next')
%[20]ValueConstruct ROUTINE
  %InstancePrefix:FillDirection = FillForward
  %InstancePrefix:ItemsToFill = %ReadPrefix:Skip + 1
  CLEAR(%InstancePrefix:RecordCount)
  %InstancePrefix:AddQueue = False
  DO %InstancePrefix:FillRecord
  IF ~%ReadPrefix:Complete
     %ReadPrefix:Counter += %ReadPrefix:Skip + 1 - %InstancePrefix:ItemsToFill
  END
  %ReadPrefix:Skip = 0
#SET(%ValueConstruct,%ReadPrefix & ':Prev')
%[20]ValueConstruct ROUTINE
  %InstancePrefix:FillDirection = FillBackward
  %InstancePrefix:ItemsToFill = %ReadPrefix:Skip + 1
  CLEAR(%InstancePrefix:RecordCount)
  %InstancePrefix:AddQueue = False
  DO %InstancePrefix:FillRecord
  IF ~%ReadPrefix:Complete
     %ReadPrefix:Counter += %ReadPrefix:Skip + 1 - %InstancePrefix:ItemsToFill
  END
  %ReadPrefix:Skip = 0
#SET(%ValueConstruct,%ReadPrefix & ':Done')
%[20]ValueConstruct ROUTINE
  REGET(%ListView,%ReadPrefix:SaveViewPos)
  DO %InstancePrefix:RefreshPage
!-------------------------------------------------------------------------------
#ENDAT
Удачи!
=============================
С уважением, 
Олег А. Руденко
Вариант без шаблона работает, (правда если как говорилось выше нет фильтров и т.п.)
А вот вариант с шаблоном не пашет.
Все вроде сделал как написано, а не работает 

Вот embed на accepte у кнопки, может чего не так??:
Код: Выделить всё
XLS.ShowError = True
XLS.CreateFile('booksall.xls')
XLS.SetTblFormat(?list)
XLS.Write:Header()
do BRW2::ViewRead:Init
  Loop
    do BRW2::ViewRead:Next
    if BRW2::ViewRead:Complete then Break.
        xls.Write:Row(Clip(Queue:Browse.BRW2::all:title) &'!'& Queue:Browse.BRW2::ser:seria &'!'& !
                      Queue:Browse.BRW2::pub:publ &'!'& Queue:Browse.BRW2::all:year)
  .
do BRW2::ViewRead:Done
Шаблон записал в tpl все зарегистрировал, вроде все нормально, может еще какие вставки надо сделать?
В xls-файл пихается только выбранная строка, 
но столько раз сколько записей в View(т.е например 5000 одинаковых записей в xls-таблице получается),фильтры учитываються, тут все нормально.
Что не так подскажите пожалуйста. 
"
Дмитрий Гудков"  <
gudkov_net@mail.ru>
Написал: ClaList(2)