Позиционирование в Browse

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
dik1970
Посетитель
Сообщения: 43
Зарегистрирован: 06 Август 2009, 23:39

Позиционирование в Browse

Сообщение dik1970 »

Как в С-5.5 при открытии многостраничного списка в процедуре Browse спозиционировать начальное положение,
т.е. выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8028
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Позиционирование в Browse

Сообщение Игорь Столяров »

Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.

"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
Make Clarion Great Again ! 😎
dik1970
Посетитель
Сообщения: 43
Зарегистрирован: 06 Август 2009, 23:39

Re: Позиционирование в Browse

Сообщение dik1970 »

Игорь Столяров писал(а):Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.

"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
Шаблон - стандартный class Clarion. Указатель получить - не проблема, и спозиционировать в пределах открытой страницы (последней) получается, а вот если нужная запись находится на другой странице - никак.
nik190994
Активист
Сообщения: 196
Зарегистрирован: 28 Сентябрь 2009, 16:19

Re: Позиционирование в Browse

Сообщение nik190994 »

Откажитесь от страничной закачки...
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Позиционирование в Browse

Сообщение kreator »

А что если воспользоваться локатором? Сначала естественно найти нужную запись в таблице, а потом создать переменную, отвечающую за локатор, как надо, вызвать нужный метод класса локатора. Сложновато, конечно. Проще, действительно, отказаться от постраничной закачки.
We are hard at work… for you. :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Позиционирование в Browse

Сообщение Andrew™ »

не знаю как в ABC, а в легаси, чтобы при входе в Browse спозиционироваться на нужную запись:

после открытия файлов:

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).

! Все.
Make Clarion Great Again ! 😎
dik1970
Посетитель
Сообщения: 43
Зарегистрирован: 06 Август 2009, 23:39

Re: Позиционирование в Browse

Сообщение dik1970 »

Спасибо всем неравнодушным.
Игорь Столяров писал(а):Судя по тому, что господин DIK1970 упоминаетСудя по тому, что господин DIK1970 упоминает "стандартный class Clarion", его интересует ABC, а не Legacy (в которых классов нет) ... его интересует ABC, а не Legacy (в которых классов нет) ...
Все таки меня интересует не ABS - значит "Legasy" ( нигде почему то такой термин не встретился ранее). А почему написал "стандартный class Clarion", -вставляю я например Embed - и вижу - Class Clarion - Clarion RElease Template. Ну да ладно, с терминологией понятно, теперь все таки о проблемке.

Существуют два списка 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

Сообщение Игорь Столяров »

dik1970 писал(а):Все таки меня интересует не ABS - значит "Legasy"
Сорри, но я здесь пас ... с Legacy шаблонами уже не работал несколько лет.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Позиционирование в Browse

Сообщение kreator »

Вообще мне задача не ясна. Пробую понять. Есть две таблицы, связанные в словаре по какому-то полю. Но в экранной форме отображаются два 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. :)
Ответить