Как встать на заданную строку при открытии MAVBrowse
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- StillZero
- Ветеран
- Сообщения: 454
- Зарегистрирован: 06 Июль 2005, 2:17
- Откуда: Хабаровск
- Контактная информация:
не совсем полный вопрос...данные в браузе могут быть, а могут и не быть...
если данные есть, то на раз два, грузится же все в обычную очередь
точку вставки я думаю не проблема найти, типо "после открытия окна" где нибудь там
а если данных нет, то это типо фильтр получается, который в where условие надо вставлять и в условия (condition) флажок какой нить например, а потом флажок сбрасывать, чтобы постоянно этот фильтр не работал
если данные есть, то на раз два, грузится же все в обычную очередь
Код: Выделить всё
Browse:Queue.Field = Нужные данные
get(Browse:Queue,Browse:Queue.Field) ! берем значение в очереди
if not errorocode()
select(?List,pointer(Browse:Queue)) ! встаем на нужную запись
end
а если данных нет, то это типо фильтр получается, который в where условие надо вставлять и в условия (condition) флажок какой нить например, а потом флажок сбрасывать, чтобы постоянно этот фильтр не работал
добавляю
1. данные есть всегда от 1 до 20 строк
2. поле NOM0 = "Нужные данные" в MAVBrowse объявлено как Hot Field, в ?List не выводится.
Хотелось бы сделать аналогично тому как делается произвольная сортировка, то есть через точки вставки ClassEmbeds через конструкцию SELF.Rec.NOM0
MAVBrowse генерирует две очереди Queue:Browse для вывода в ?List и BRW:Reciever, которая используется через MAVBrowse.Rec. У меня скорее и каша в голове из-за этих двух очередей.
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
- Откуда: Хабаровск
- Контактная информация:
агаскорее и каша в голове из-за этих двух очередей
смотри у листа стоит очередь откуда (FROM), обычно там стоит очередь вида Queue:Browse:1
именно эта очередь и отображается
какие у нее есть поля можно посмотреть заглянув в source
ты увидишь, что hot field-ы также присутствуют в этой очереди, соответственно обратиться к ним можно на раз два
удачи
В 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.NOM0 = "НужныеДанные"
get(SELF.Rec,+SELF.Rec.NOM0)
if not errorcode()
select(?List,pointer(SELF.Rec))
end
! если необходимо сделать MAVGET()
и работает только при добавлении поля NOM0 в ListBoxFormat, добавил с Width=0 и сортировка установлена по NOM0.
Может Andrew Myalin прокомментирует насчет правильности ?
Re: Как встать на заданную строку при открытии MAVBrowse
а тут всё просто, есть метод .Load, после PARENT.Loaddadmitrii писал(а):Что и в каком Embedе надо прописать ?
ищем требуемую запись в 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 раз.
две очереди это для специфичных операций, когда на каждый NEXT нужно, что то параллельно подкачивать из БД, т е имеет место быть более одного активного запроса к БД при заливки в Browse, вот для этих целей и нужна доп. очередь Receiver, в которую сначало заливаются данные , а мотом уже идёт LOOP по ней и заливка в Browse Queuedadmitrii писал(а):MAVBrowse генерирует две очереди Queue:Browse для вывода в ?List и BRW:Reciever, которая используется через MAVBrowse.Rec. У меня скорее и каша в голове из-за этих двух очередей.
в 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
SELF.Rec это вторая очередь приёмник, не по ней надо делать GET, т к в ней последовательность записей может не совпадать с последовательностью в Queue Browse, Queue Browse сортируется же после формирования, по ней надо делать соответвующие поиски.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 прокомментирует насчет правильности ?