Как спозиционировать Browse на определённую запись?

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Как спозиционировать Browse на определённую запись?

Сообщение kreator » 20 Февраль 2016, 11:44

C10, ABC. На окне стандартный броуз с методом загрузки "File". Нужно после его формирования спозиционировать курсор на определённую запись (я её знаю). Когда, в каком методе это сделать?
We are hard at work… for you. :)

Yufil
Ветеран движения
Сообщения: 1075
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Как спозиционировать Browse на определённую запись?

Сообщение Yufil » 20 Февраль 2016, 13:43

Для установки на запись в Browse - ResetFromFile() или ResetFromBuffer() - по вкусу
Спозиционировался на нужную запись в основном файле - и вызываешь метод.

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Как спозиционировать Browse на определённую запись?

Сообщение kreator » 20 Февраль 2016, 16:23

А в какой момент (где) вызвать, допустим, ResetFromBuffer()? Или в этом методе спозиционировать на нужную запись в файле? Я, вообще, что имел в виду. Открывается окно с броузом, я знаю на какую запись поставить курсор. Нужно туда поставить. Если я спозиционирую на запись в файле в методе ResetQueue? Как при Select'е, да?
We are hard at work… for you. :)

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Как спозиционировать Browse на определённую запись?

Сообщение Дед Пахом » 20 Февраль 2016, 16:46

Логично предположить, что где-то в конце WindowManager.Init()
С уважением, ДП

gopstop2007
Ветеран
Сообщения: 1186
Зарегистрирован: 25 Март 2009, 21:55

Как спозиционировать Browse на определённую запись?

Сообщение gopstop2007 » 20 Февраль 2016, 17:17

kreator писал(а): допустим, ResetFromBuffer()?
не удачный вариант
Не совсем ясно какой результат вам необходим, но может это поможет, стать на запись + файл

Код: Выделить всё

WAR:NWARES = EXP:NWARES		
Get(Wares,WAR:NWARESKEY)
BRW1.Q.WAR:WARES = WAR:WARES   		! в данном случае становимся по ключу который используется в  
Get(Queue:Browse,BRW1.Q.WAR:WARES)   ! Queue:Browse (по наименованию) иначе не станет на нужную запись 
BRW1.ResetFromBuffer()
BRW1.TakeNewSelection()
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Как спозиционировать Browse на определённую запись?

Сообщение Игорь Столяров » 20 Февраль 2016, 19:55

kreator писал(а): Открывается окно с броузом, я знаю на какую запись поставить курсор
Пример, что понять как это работает.
Сделай в окне кнопку и повесь на нее код:

Код: Выделить всё

  Clear(File.Record)
  File.ID = MyRecordID
  If ~Access:File.Fetch(File.ByID) then BRW1.ResetFromBuffer().
По ее нажатию - должен получится переход на запись с MyRecordID.
Далее, либо вызывай этот код в нужном месте, либо посылай Post(Event:Accepted,?MySelect) на нажатие этой кнопки ...
«V» значит Вендетта !

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Как спозиционировать Browse на определённую запись?

Сообщение kreator » 24 Февраль 2016, 12:26

ResetFromBuffer() работает. Только пока в голову не возьму - отработали методы ResetQueue, ApplyFilter и т.д., очередь сформирована, при вызове ResetFromBuffer снова запускается ResetQueue ... Получается, что я должен либо искусственно вызвать ResetFromBuffer, либо опять же искусственно сделать get по сформированной очереди (метод загрузки "File" у меня). Рассчитывал на более красивый способ.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Как спозиционировать Browse на определённую запись?

Сообщение Игорь Столяров » 24 Февраль 2016, 12:32

kreator писал(а): при вызове ResetFromBuffer снова запускается ResetQueue ...
Конечно можно залезть внутря метода, разобраться как он переводит засветку списка и исключить все ненужное.
Но это только, если есть непреодолимое желание заниматься оптимизацией этой операции ... ;)
«V» значит Вендетта !

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Как спозиционировать Browse на определённую запись?

Сообщение kreator » 24 Февраль 2016, 12:45

Игорь Столяров писал(а):Но это только, если есть непреодолимое желание заниматься оптимизацией этой операции ... ;)
Ну я посмотрел. Толку чуть. Всё завязано-перевязано. Действительно смысла нет нарушать установленный порядок вещей. Хотя, я ожидал, что, если я просто сделаю Fetch в таблицу, то ResetQueue на автомате отработает. Ан нет, всё сложнее.
We are hard at work… for you. :)

gopstop2007
Ветеран
Сообщения: 1186
Зарегистрирован: 25 Март 2009, 21:55

Как спозиционировать Browse на определённую запись?

Сообщение gopstop2007 » 20 Ноябрь 2018, 16:03

еще вариант, как стать на нужную позицию, перед открытием окна и init() с browse (BRW1)

Код: Выделить всё

BRW1.StartAtCurrent = True
myfile01:prod_id = MyValue
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Как спозиционировать Browse на определённую запись?

Сообщение Игорь Столяров » 20 Ноябрь 2018, 17:00

gopstop2007 писал(а):
20 Ноябрь 2018, 16:03
еще вариант, как стать на нужную позицию
Наверное, здесь следует упомянуть, что "myfile01:prod_id" - это поле сортировки VIEW, а не файла …
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1075
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Как спозиционировать Browse на определённую запись?

Сообщение Yufil » 20 Ноябрь 2018, 22:00

kreator писал(а):
24 Февраль 2016, 12:45
Игорь Столяров писал(а):Но это только, если есть непреодолимое желание заниматься оптимизацией этой операции ... ;)
Ну я посмотрел. Толку чуть. Всё завязано-перевязано. Действительно смысла нет нарушать установленный порядок вещей. Хотя, я ожидал, что, если я просто сделаю Fetch в таблицу, то ResetQueue на автомате отработает. Ан нет, всё сложнее.
Если Browse имеет тип "File" - можно просто пробежаться по очереди, найти подходящую запись
или найти запись по ключу. Наша цель - определить Pointer(Queue), а потом ставим запись в листбоксе.

Код: Выделить всё

 
 ! Курсор на место 
 ?List{Prop:Selected}  = Pointer( Queue ) 
 ! Подкачать связанные 
 ThisWindow.Update() 
 
Как-то так...

gopstop2007
Ветеран
Сообщения: 1186
Зарегистрирован: 25 Март 2009, 21:55

Как спозиционировать Browse на определённую запись?

Сообщение gopstop2007 » 20 Ноябрь 2018, 23:04

Игорь Столяров писал(а):
20 Ноябрь 2018, 17:00
gopstop2007 писал(а):
20 Ноябрь 2018, 16:03
еще вариант, как стать на нужную позицию
Наверное, здесь следует упомянуть, что "myfile01:prod_id" - это поле сортировки VIEW, а не файла …
а результат, не тот же? :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Как спозиционировать Browse на определённую запись?

Сообщение Игорь Столяров » 21 Ноябрь 2018, 9:07

gopstop2007 писал(а):
20 Ноябрь 2018, 23:04
а результат, не тот же?
Результат получается, т.к. в данном случае это тот же самый механизм, что и при открытии BROWSE в режиме SelectRecord.
С этим проблем нет. Но вопрос был совсем другой: "после его формирования" (см. первое сообщение).
«V» значит Вендетта !

Ответить