Установка записи при открытии Browse
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Установка записи при открытии Browse
Добрый день!
Кларион 6, АВС.
Есть Browse с первичным ключом ORD:SurOrd (LONG)
Была задача - установить курсор на требуемую запись при открытии Browse.
Делал так:
ORD:SurOrd= значение
globalrequest=selectrecord
Browseorders
и все прекрасно работало!
Но потребовалось изменить ключ Browse - он стал составным:
ORD:Flag (byte)
ORD:SurOrd (LONG)
После чего перестал работать установка при открытии.
Вопрос очевиден: Как установить курсор на запись в Browse при его открытии по значению ORD:SurOrd ?
Алексей
Кларион 6, АВС.
Есть Browse с первичным ключом ORD:SurOrd (LONG)
Была задача - установить курсор на требуемую запись при открытии Browse.
Делал так:
ORD:SurOrd= значение
globalrequest=selectrecord
Browseorders
и все прекрасно работало!
Но потребовалось изменить ключ Browse - он стал составным:
ORD:Flag (byte)
ORD:SurOrd (LONG)
После чего перестал работать установка при открытии.
Вопрос очевиден: Как установить курсор на запись в Browse при его открытии по значению ORD:SurOrd ?
Алексей
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
Я заранее извиняюсь, за наивный ответ - но нужно инициализировать оба компонента ключа или получается неоднозначность.
Нельзя получить указатель на запись, ели неопределен первый компонент ключа. Или поменяй поля в ключе местами.
Нельзя получить указатель на запись, ели неопределен первый компонент ключа. Или поменяй поля в ключе местами.

Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Установка записи при открытии Browse
Добрый день!
Нет! Инициированы (присвоены конкретные значения) обоим полям ключа.
Не устанавливает на нужную запись.
)
Алексей
Нет! Инициированы (присвоены конкретные значения) обоим полям ключа.
Не устанавливает на нужную запись.
К сожалению, менять нельзя, по причине последовательности вывода в Browse (Да это и не помогаетИли поменяй поля в ключе местами

Алексей
-
- ✯ Ветеран ✯
- Сообщения: 1039
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Re: Установка записи при открытии Browse
Привет! А если ставить по указателю записи который получишь при анализе очереди вывода в бровз при правильных значениях в нужных полях? Имеется ввиду что ключ просмотра тот же оставишь
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
Была у меня как-то проблема с позицированием записи в Browse. Есть два варианта.
1. Считать запись (раз мы знаем оба компонента уникального ключа) и открыть Browse в ркжиме SelectRecord (что не всегда подходит).
2. При открытии окна с Browse, ПЕРЕД SELF.SetAlerts() вставляем POST(Event:Accepted,?ButSelect)
В окно добавляем скрытую кнопку ?ButSelect и на нее вешаем код позицирования указателя на запись в списке:
Clear(MyFile.Record)
MyFile.Field1 = ...
MyFile.Field2 = ...
MyFile.Field3 = ...
...
If ~Access:MyFile.Fetch(MyFile.By_KeyBrowse) then BRW1.ResetFromBuffer().
Select(?Browse)
Все. Работает на все сто ...
1. Считать запись (раз мы знаем оба компонента уникального ключа) и открыть Browse в ркжиме SelectRecord (что не всегда подходит).
2. При открытии окна с Browse, ПЕРЕД SELF.SetAlerts() вставляем POST(Event:Accepted,?ButSelect)
В окно добавляем скрытую кнопку ?ButSelect и на нее вешаем код позицирования указателя на запись в списке:
Clear(MyFile.Record)
MyFile.Field1 = ...
MyFile.Field2 = ...
MyFile.Field3 = ...
...
If ~Access:MyFile.Fetch(MyFile.By_KeyBrowse) then BRW1.ResetFromBuffer().
Select(?Browse)
Все. Работает на все сто ...

Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Установка записи при открытии Browse
Добрый день!
Алексей
Это как раз то чего я и делал:пробывал и считывать до Browse запись и не считывать, а присваивать значения ключу - не пашет. Для одиночного ключа - все работает, для составного-облом!1. Считать запись (раз мы знаем оба компонента уникального ключа) и открыть Browse в ркжиме SelectRecord (что не всегда подходит).
Скрытая - это hide или просто "малюсенькая-прималюсенькая", но unhide ?2. При открытии окна с Browse, ПЕРЕД SELF.SetAlerts() вставляем POST(Event:Accepted,?ButSelect)
В окно добавляем скрытую кнопку ?ButSelect и на нее вешаем код позицирования указателя на запись в списке:
Алексей
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
1. А запись после считывания вообще есть ? Удается ее считвать по этому ключу ? Ошибки нет ?
2. Все равно. Я обычно делаю HIDE - зачем эта кнопка нужна в окне ? Можно открыть ее для тестирования - что бы увидеть производится ли установка засветки на указанную запись при ее нажатии.
2. Все равно. Я обычно делаю HIDE - зачем эта кнопка нужна в окне ? Можно открыть ее для тестирования - что бы увидеть производится ли установка засветки на указанную запись при ее нажатии.
Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Установка записи при открытии Browse
Добрый день!
В кнопку вставил текст:
ORD:SurOrd=1374
ORD:Flag=1
If ~Access:orders.Fetch(orders.K_Flag_sur) then BRW1.ResetFromBuffer().
select(?Tab:2)
Не позиционирует! (запись по этому ключу - существует!)
Алексей
В кнопку вставил текст:
ORD:SurOrd=1374
ORD:Flag=1
If ~Access:orders.Fetch(orders.K_Flag_sur) then BRW1.ResetFromBuffer().
select(?Tab:2)
Не позиционирует! (запись по этому ключу - существует!)
Алексей
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
1. Данная запись в списке есть (нет дополнительных фильтров ее исключающих) ?
2. Список построен по этому ключу ?
3. После обновления данных из буфера - сделай активным список, а не закладку (см. мой пример ниже).
4. И все-таки проверь считывание записи.
If ~Access:orders.Fetch(orders.K_Flag_sur) then Message("Запись есть !"); BRW1.ResetFromBuffer().
2. Список построен по этому ключу ?
3. После обновления данных из буфера - сделай активным список, а не закладку (см. мой пример ниже).
4. И все-таки проверь считывание записи.
If ~Access:orders.Fetch(orders.K_Flag_sur) then Message("Запись есть !"); BRW1.ResetFromBuffer().
Make Clarion Great Again ! 
Re: Установка записи при открытии Browse
Я использую класс локатора
dog:cod1 = cod1 !Задать ключевое поле
BRW1.TakeAcceptedLocator() !вызов метода TakeAccepted локатора
BRW1.Reset(1) !если требуется поиск, переустановить VIEW
BRW1.ResetQueue(Reset:Done) !перенабрать очередь просмотра
BRW1.UpdateWindow()
dog:cod1 = cod1 !Задать ключевое поле
BRW1.TakeAcceptedLocator() !вызов метода TakeAccepted локатора
BRW1.Reset(1) !если требуется поиск, переустановить VIEW
BRW1.ResetQueue(Reset:Done) !перенабрать очередь просмотра
BRW1.UpdateWindow()
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
Вот, кстати, правильная подсказка.
Забыл сказать, что в моем примере локатор в списке должен быть отключен.
Забыл сказать, что в моем примере локатор в списке должен быть отключен.
Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Установка записи при открытии Browse
Добрый день!
Игорю:
Спасибо!
Все заработало. Виноват сам: в embed поставил не POST..., а непосредственно текст, который зашит в кнопке!
nik190994:
Спасибо за второе решение, пока не пробовал, но думаю, что тоже заработает
Алексей
Игорю:
Спасибо!
Все заработало. Виноват сам: в embed поставил не POST..., а непосредственно текст, который зашит в кнопке!
nik190994:
Спасибо за второе решение, пока не пробовал, но думаю, что тоже заработает

Алексей
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Установка записи при открытии Browse
Пожалуйста. Здесь все понятно.Алексей- Софт-Центр писал(а):Спасибо! Все заработало.
Но вот есть другая нерешенная задача на эту тему - как выполнить позицирование записи при выборе из списка если записи показаны в списке по не уникальному ключу ...
Пример: Есть счета, в которых указан уникальный код контрагента в списке (предполжим по полю Shet.Client)
Есть список контрагентов, в котором задан ключ по уникальному номеру (Client.ByNumber) и ключ по неуникальному наименованию (Client.ByName).
В списке есстественно контрагенты отсортированы по наименованию (Client.ByName).
Если мы вызываем теперь список для выбора контрагента - в нем засветка устанавливается на первую запись с подходящим наименованием контрагента, а не Client.Number = Shet.Client. И вот здесь уже танцы с бубном не помогают. Думаю, что решение есть - нужно принудительно выполнить позицирование по уникальному указателю, но сделать пока руки не дошли ...

P/S: Умные идеи с изменением структруры ключа Client.ByName, что бы сделать их уникальным и так понятны, можно не предлагать.
Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Установка записи при открытии Browse
Добрый день!
Игорь! Вы же мне сами подсказали это решение:
вставка в кнопку
(по номеру, а не по имени)
Как-то так:
Clear(MyFile.Record)
MyFile.Num = ...
If ~Access:MyFile.Fetch(MyFile.By_KeyNum) then BRW1.ResetFromBuffer().
Select(?Browse)
-----
Единственно, что в броуз надо кроме имени включить и уникальный номер.
Алексей
Игорь! Вы же мне сами подсказали это решение:
вставка в кнопку
Так вот надо вставить fetch по уникальному ключу, а не по ключу броуза.Clear(MyFile.Record)
MyFile.Field1 = ...
MyFile.Field2 = ...
MyFile.Field3 = ...
...
If ~Access:MyFile.Fetch(MyFile.By_KeyBrowse) then BRW1.ResetFromBuffer().
Select(?Browse)
(по номеру, а не по имени)
Как-то так:
Clear(MyFile.Record)
MyFile.Num = ...
If ~Access:MyFile.Fetch(MyFile.By_KeyNum) then BRW1.ResetFromBuffer().
Select(?Browse)
-----
Единственно, что в броуз надо кроме имени включить и уникальный номер.
А вот это - жизнь заставила! В MySql, если не делать составной ключ в броузе (точно как в Вашем случае -имя и номер), оставить только имя, то при скролинге мышкой - начинает множаться (визуально) записи в броузе. Пришлось во всех броузах, где есть поля не уникальные (типа названий) делать составной ключ, содержащий имя и уникальный номер.P/S: Умные идеи с изменением структруры ключа Client.ByName, что бы сделать их уникальным и так понятны, можно не предлагать.
Алексей