Страница 1 из 1
Позиционирование в Browse
Добавлено: 05 Июнь 2010, 16:45
dik1970
Как в С-5.5 при открытии многостраничного списка в процедуре Browse спозиционировать начальное положение,
т.е. выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список.
Re: Позиционирование в Browse
Добавлено: 07 Июнь 2010, 9:35
Игорь Столяров
Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.
"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
Re: Позиционирование в Browse
Добавлено: 07 Июнь 2010, 17:05
dik1970
Игорь Столяров писал(а):Позицирование указателя в Browse зависит от типа используемых шаблонов и про это неоднократно писалось в форуме.
"выделить нужную запись, по значению поля, не входящего в состав ключа, по которому отсортирован список".
Как минимум сначала нужно получить указатель на запись по этим условиям и значения полей ключа по которому построен список для этой записи.
Но главное не это. А если таких записей несколько .... ?
Шаблон - стандартный class Clarion. Указатель получить - не проблема, и спозиционировать в пределах открытой страницы (последней) получается, а вот если нужная запись находится на другой странице - никак.
Re: Позиционирование в Browse
Добавлено: 07 Июнь 2010, 19:35
nik190994
Откажитесь от страничной закачки...
Re: Позиционирование в Browse
Добавлено: 08 Июнь 2010, 18:18
kreator
А что если воспользоваться локатором? Сначала естественно найти нужную запись в таблице, а потом создать переменную, отвечающую за локатор, как надо, вызвать нужный метод класса локатора. Сложновато, конечно. Проще, действительно, отказаться от постраничной закачки.
Re: Позиционирование в Browse
Добавлено: 09 Июнь 2010, 7:50
Andrew™
не знаю как в ABC, а в легаси, чтобы при входе в Browse спозиционироваться на нужную запись:
после открытия файлов:
GET(File,...) ! нужную запись на которую хотим спозиционироваться
LocalRequest = SelectRecord (предварительно запомните LocateRequest и востановите на EVENT:OpenWindow - в самом конце)
всё
Re: Позиционирование в Browse
Добавлено: 09 Июнь 2010, 10:38
Игорь Столяров
Судя по тому, что господин 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).
! Все.
Re: Позиционирование в Browse
Добавлено: 09 Июнь 2010, 20:20
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
удается спозиционировать на нужный документ,только если он находится на последней странице, иначе выделяется последняя запись в списке.
Советовали отказаться от страничного вывода, но как это сделать?
Re: Позиционирование в Browse
Добавлено: 09 Июнь 2010, 20:33
Игорь Столяров
dik1970 писал(а):Все таки меня интересует не ABS - значит "Legasy"
Сорри, но я здесь пас ... с Legacy шаблонами уже не работал несколько лет.
Re: Позиционирование в Browse
Добавлено: 10 Июнь 2010, 19:18
kreator
Вообще мне задача не ясна. Пробую понять. Есть две таблицы, связанные в словаре по какому-то полю. Но в экранной форме отображаются два Browse без наложения условий связи, т.е. отображаются таблицы целиком. При выборе записи одной таблицы надо спозиционировать курсор на запись другой таблицы, связанной с первой, вручную. И наоборот, соответственно. Предлагается сделать так. Во-первых, включить загрузку всего файл (в свойствах Browse, закладка Actions, закладка Default Behavior, Loading Method - File). Потом, при выборе записи одной таблицы (событие NewSelection) надо пробежаться по очереди второй таблицы (типа Queue:Browse:1, если все же ABC, то BRW1.Q), найти нужную запись и сделать select(?Browse:1,N), где N - номер записи в очереди. Все.