Шаблон небольшой и, возможно, пригодится еще кому, так что - "кидаю" прямо в рассылку.
ШВС С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)