Как встать на заданную строку при открытии MAVBrowse

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

не совсем полный вопрос...данные в браузе могут быть, а могут и не быть...
если данные есть, то на раз два, грузится же все в обычную очередь

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

Browse:Queue.Field = Нужные данные
get(Browse:Queue,Browse:Queue.Field) ! берем значение в очереди
if not errorocode()
   select(?List,pointer(Browse:Queue)) ! встаем на нужную запись
end
точку вставки я думаю не проблема найти, типо "после открытия окна" где нибудь там

а если данных нет, то это типо фильтр получается, который в where условие надо вставлять и в условия (condition) флажок какой нить например, а потом флажок сбрасывать, чтобы постоянно этот фильтр не работал
dadmitrii

Сообщение dadmitrii »

добавляю
1. данные есть всегда от 1 до 20 строк
2. поле NOM0 = "Нужные данные" в MAVBrowse объявлено как Hot Field, в ?List не выводится.
Хотелось бы сделать аналогично тому как делается произвольная сортировка, то есть через точки вставки ClassEmbeds через конструкцию SELF.Rec.NOM0
MAVBrowse генерирует две очереди Queue:Browse для вывода в ?List и BRW:Reciever, которая используется через MAVBrowse.Rec. У меня скорее и каша в голове из-за этих двух очередей.
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

скорее и каша в голове из-за этих двух очередей
ага :)
смотри у листа стоит очередь откуда (FROM), обычно там стоит очередь вида Queue:Browse:1
именно эта очередь и отображается
какие у нее есть поля можно посмотреть заглянув в source
ты увидишь, что hot field-ы также присутствуют в этой очереди, соответственно обратиться к ним можно на раз два

удачи :)
dadmitrii

Сообщение dadmitrii »

спасибо за ответ
удача не помешала бы :)

Это в стандартных шаблонах так и Embed "После того,как окно открыто" рулит. А в MAV по другому судя по Source...
dadmitrii

Сообщение dadmitrii »

В MAVBrowse кнопка ClassEmbeds -> Load
SELF.Rec.NOM0 = "НужныеДанные"
get(SELF.Rec,+SELF.Rec.NOM0)
if not errorcode()
select(?List,pointer(SELF.Rec))
end
! если необходимо сделать MAVGET()

и работает только при добавлении поля NOM0 в ListBoxFormat, добавил с Width=0 и сортировка установлена по NOM0.

Может Andrew Myalin прокомментирует насчет правильности ?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Как встать на заданную строку при открытии MAVBrowse

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

dadmitrii писал(а):Что и в каком Embedе надо прописать ?
а тут всё просто, есть метод .Load, после PARENT.Load

ищем требуемую запись в Browse Queue по условиям, например по полям первичного ключа

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

 BRW1:Field = 10
 GET(Queue:Browse,BRW1:Field)
и встаём на неё

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

 
  IF NOT ERRORCODE()
   SELF.Selected(POINTER(SELF.Q))
  END
Последний раз редактировалось Andrew™ 15 Май 2006, 9:49, всего редактировалось 1 раз.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

dadmitrii писал(а):MAVBrowse генерирует две очереди Queue:Browse для вывода в ?List и BRW:Reciever, которая используется через MAVBrowse.Rec. У меня скорее и каша в голове из-за этих двух очередей.
две очереди это для специфичных операций, когда на каждый NEXT нужно, что то параллельно подкачивать из БД, т е имеет место быть более одного активного запроса к БД при заливки в Browse, вот для этих целей и нужна доп. очередь Receiver, в которую сначало заливаются данные , а мотом уже идёт LOOP по ней и заливка в Browse Queue

в 99.9%, а у меня в 100% не используется вторая очередь, заливка стразу идёт в Queue Browse, для этого надо в свойствах шаблона Browse на закладке Other кнопарь Optimozation включить крыжит "Not use receiver Queue", вторая очередь исчезает и код инициализации Browse становится на много компактней.

почему у меня в 100% не используется, так потому, что это маразм на каждый NExt делать ещё какие то запросы к БД, это приводит в большим тормозам загрузки данных.
правило номер раз - заливать данные в Browse надо с минимальным количеством запросов к БД

допустим заливаем контрагентов, и хотим на каждый NEXT сделать GET справочника адресов и отобразить адрес контрагента, это может и простой случай, но ,например, объединение в один SELECT контрагенты, и адреса по каким то причинам в одном запросе не катит, так вот, Browse чисто по контрагентам, после .Load один запрос по адресам

select .... from адреса where id in (select id from контрагенты where условие закрузки Browse)

один множественный запрос и заполняем недостающие поля в Queue Browse
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

dadmitrii писал(а):В MAVBrowse кнопка ClassEmbeds -> Load
SELF.Rec.NOM0 = "НужныеДанные"
get(SELF.Rec,+SELF.Rec.NOM0)
if not errorcode()
select(?List,pointer(SELF.Rec))
end
! если необходимо сделать MAVGET()

и работает только при добавлении поля NOM0 в ListBoxFormat, добавил с Width=0 и сортировка установлена по NOM0.

Может Andrew Myalin прокомментирует насчет правильности ?
SELF.Rec это вторая очередь приёмник, не по ней надо делать GET, т к в ней последовательность записей может не совпадать с последовательностью в Queue Browse, Queue Browse сортируется же после формирования, по ней надо делать соответвующие поиски.
dadmitrii

Сообщение dadmitrii »

Спасибо за подробный комментарий.
А крыжик "Not use receiver Queue" лучше было бы взвести в шаблонах по умолчанию.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

dadmitrii писал(а):Спасибо за подробный комментарий.
А крыжик "Not use receiver Queue" лучше было бы взвести в шаблонах по умолчанию.
в свойствах глобального шаблона есть default значение для этого крыжика, там взведи и забудь ;)
Ответить