Позиционирование в Browse
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Позиционирование в Browse
Как в С-5.5 при открытии многостраничного списка в процедуре Browse спозиционировать начальное положение,
т.е. выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список.
т.е. выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Позиционирование в Browse
Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.
"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
Make Clarion Great Again ! 
Re: Позиционирование в Browse
Шаблон - стандартный class Clarion. Указатель получить - не проблема, и спозиционировать в пределах открытой страницы (последней) получается, а вот если нужная запись находится на другой странице - никак.Игорь Столяров писал(а):Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.
"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Позиционирование в Browse
А что если воспользоваться локатором? Сначала естественно найти нужную запись в таблице, а потом создать переменную, отвечающую за локатор, как надо, вызвать нужный метод класса локатора. Сложновато, конечно. Проще, действительно, отказаться от постраничной закачки.
We are hard at work… for you. 

Re: Позиционирование в Browse
не знаю как в ABC, а в легаси, чтобы при входе в Browse спозиционироваться на нужную запись:
после открытия файлов:
GET(File,...) ! нужную запись на которую хотим спозиционироваться
LocalRequest = SelectRecord (предварительно запомните LocateRequest и востановите на EVENT:OpenWindow - в самом конце)
всё
после открытия файлов:
GET(File,...) ! нужную запись на которую хотим спозиционироваться
LocalRequest = SelectRecord (предварительно запомните LocateRequest и востановите на EVENT:OpenWindow - в самом конце)
всё
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Позиционирование в Browse
Судя по тому, что господин DIK1970 упоминает "стандартный class Clarion", его интересует ABC, а не Legacy (в которых классов нет) ...
Варииантов несколько. Опишу самый простой.
1. Делаем в списке скрытую кнопку ?SelectRecord (с атрибутом HIDE), и в нужном месте позицирования вставляем код POST(Event:Accepted,?SelectRecord).
2. В Embed кнопки ?SelectRecord, секция Accepted после генерации стандартного кода добавляем текст:
! Я предполагаю, что в Browse показывается содержание списка MyFile по некоторому уникальному ключу MyFile.By_ID который может состоять из любого кол-ва полей.
! Как я описывал ранее, Вы находите нужную запись и получаете для нее значения полей ключа MyFile.By_ID (предположим ключ из одного поля MyFile.ID)
! В переменную Loc:ID Like(MyFile.ID) запоминаем значение поля для того, что бы впоследствии спозицировать указатель на запись по ключу просмотра
Loc:ID = MyFile.ID
! Делаем это (считываем запись из списка по ключу просмотра BROWSE) и позицируем указатель на записи.
Clear(MyFile.Record)
MyFile.ID = Loc:ID
If ~Access:MyFile.Fetch(MyFile.By_ID) then BRW??.ResetFromBuffer(); Select(?List).
! Все.
Варииантов несколько. Опишу самый простой.
1. Делаем в списке скрытую кнопку ?SelectRecord (с атрибутом HIDE), и в нужном месте позицирования вставляем код POST(Event:Accepted,?SelectRecord).
2. В Embed кнопки ?SelectRecord, секция Accepted после генерации стандартного кода добавляем текст:
! Я предполагаю, что в Browse показывается содержание списка MyFile по некоторому уникальному ключу MyFile.By_ID который может состоять из любого кол-ва полей.
! Как я описывал ранее, Вы находите нужную запись и получаете для нее значения полей ключа MyFile.By_ID (предположим ключ из одного поля MyFile.ID)
! В переменную Loc:ID Like(MyFile.ID) запоминаем значение поля для того, что бы впоследствии спозицировать указатель на запись по ключу просмотра
Loc:ID = MyFile.ID
! Делаем это (считываем запись из списка по ключу просмотра BROWSE) и позицируем указатель на записи.
Clear(MyFile.Record)
MyFile.ID = Loc:ID
If ~Access:MyFile.Fetch(MyFile.By_ID) then BRW??.ResetFromBuffer(); Select(?List).
! Все.
Make Clarion Great Again ! 
Re: Позиционирование в Browse
Спасибо всем неравнодушным.
Существуют два списка Gornal и Ostatki, проще говоря шапки документов и движения этих документов. В нормальном режиме первый список отражается в обычном Browse отсортированный по ключу Дата(long), неуникальному. Связь между списками - по уникальному для Gornal полю Code.
А вот в режиме сервиса есть необходимость следующих действий: Если в просмотре списка Ostatki выбирается какая-либо запись , то должен открываться просмотр Gornal ( отсортированный по Дата) и в нем должен быть выделена запись с тем же значением Code - т.е. "родительская" запись. Городить две разные процедуры для просмотра Gornal не хочется. Используя вот такую конструкцию :
BRW1::Jor:Code= obmen[3] ! искомый код передаем через глобальную переменную
GET(Queue:Browse:1,BRW1::Jor:Code)
BRW1::CurrentChoice=BRW1::Position
REGET(BRW1::View:Browse,BRW1::Position)
BRW1::RefreshMode = RefreshOnPosition
удается спозиционировать на нужный документ,только если он находится на последней странице, иначе выделяется последняя запись в списке.
Советовали отказаться от страничного вывода, но как это сделать?
Все таки меня интересует не ABS - значит "Legasy" ( нигде почему то такой термин не встретился ранее). А почему написал "стандартный class Clarion", -вставляю я например Embed - и вижу - Class Clarion - Clarion RElease Template. Ну да ладно, с терминологией понятно, теперь все таки о проблемке.Игорь Столяров писал(а):Судя по тому, что господин DIK1970 упоминаетСудя по тому, что господин DIK1970 упоминает "стандартный class Clarion", его интересует ABC, а не Legacy (в которых классов нет) ... его интересует ABC, а не Legacy (в которых классов нет) ...
Существуют два списка Gornal и Ostatki, проще говоря шапки документов и движения этих документов. В нормальном режиме первый список отражается в обычном Browse отсортированный по ключу Дата(long), неуникальному. Связь между списками - по уникальному для Gornal полю Code.
А вот в режиме сервиса есть необходимость следующих действий: Если в просмотре списка Ostatki выбирается какая-либо запись , то должен открываться просмотр Gornal ( отсортированный по Дата) и в нем должен быть выделена запись с тем же значением Code - т.е. "родительская" запись. Городить две разные процедуры для просмотра Gornal не хочется. Используя вот такую конструкцию :
BRW1::Jor:Code= obmen[3] ! искомый код передаем через глобальную переменную
GET(Queue:Browse:1,BRW1::Jor:Code)
BRW1::CurrentChoice=BRW1::Position
REGET(BRW1::View:Browse,BRW1::Position)
BRW1::RefreshMode = RefreshOnPosition
удается спозиционировать на нужный документ,только если он находится на последней странице, иначе выделяется последняя запись в списке.
Советовали отказаться от страничного вывода, но как это сделать?
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Позиционирование в Browse
Сорри, но я здесь пас ... с Legacy шаблонами уже не работал несколько лет.dik1970 писал(а):Все таки меня интересует не ABS - значит "Legasy"
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5159
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Позиционирование в Browse
Вообще мне задача не ясна. Пробую понять. Есть две таблицы, связанные в словаре по какому-то полю. Но в экранной форме отображаются два Browse без наложения условий связи, т.е. отображаются таблицы целиком. При выборе записи одной таблицы надо спозиционировать курсор на запись другой таблицы, связанной с первой, вручную. И наоборот, соответственно. Предлагается сделать так. Во-первых, включить загрузку всего файл (в свойствах Browse, закладка Actions, закладка Default Behavior, Loading Method - File). Потом, при выборе записи одной таблицы (событие NewSelection) надо пробежаться по очереди второй таблицы (типа Queue:Browse:1, если все же ABC, то BRW1.Q), найти нужную запись и сделать select(?Browse:1,N), где N - номер записи в очереди. Все.
We are hard at work… for you. 
