Создание временной задержки в 1С 7.7
23.09.2009
12:42
#1
В форме справочника товаров "Для подбора" реализована концепция аналогов товара. Т.е. при установке курсора на один из элементов справочника внизу появляется список аналогов. Процедура поиска аналогов привязана к обновлению (перерисовке) формы. Поскольку товара много и аналогов соответственно тоже, при прокрутке возникает подтормаживание работы. Если мне с помощью клавиш курсора хочется перейти например с 1-го на 10-й элемент, то пока программа поочередно не найдет и не покажет мне все аналоги на второй, третий, ... девятый элементы, к десятому элементу я не попаду. Хотелось бы, чтобы процедура поиска аналогов запускалась не сразу в момент перехода курсора к другому элементу справочника, а только после задержки курсора на этом элементе хотя бы на 5-7 секунд. Теоретически существует возможность использовать предопределенную процедуру "ОбработкаОжидания". Но она запускает только процедуру, которая находится в глобальном модуле. А мне нужно обработать форму "Для Подбора". Для того, чтобы обрабатывать формы процедурами глобального модуля эти формы передаются в глобальную процедуру как "Контекст". Но в процедуру "ОбработкаОжидания" "Контекст" передать нельзя. Что посоветуете? Может кто сталкивался?.
23.09.2009
13:25
#3
Создать глобальную переменную "БуферАналогов", в которую заносить найденную номенклатуру. После занесения из "БуфераАналогов" номенклатуры в форму, очищать эту переменную.
23.09.2009
13:49
#4
А если просто создать кнопку "Показать аналоги" , и показывать аналоги только после нажатия на эту кнопку. Нужно выбирает из аналога, а нет, то и показывать не надо.
23.09.2009
14:28
#5
Кнопка -это самый простой и очевидный вариант - беда в том, что пользователи постоянно забывают о необходимости заглянуть в справочник аналогов.
Кроме того, у кнопки есть серьезный недостаток. После ее нажатия фокус остается на ней, а не возвращается в список товаров. Если пользователь привык работать только мышью, то он этого не заметит. А если продвинутый пользователь работает клавиатурой, то возникают неудобства в работе. Может и эту проблемму уже решили? Тогда остановлюсь на варианте с кнопкой, поскольку первый совет требует серьезного изучения примера, а второй я не очень понял как можно приспособить. Но в любом случае, спасибо откликнувшимся.
Кроме того, у кнопки есть серьезный недостаток. После ее нажатия фокус остается на ней, а не возвращается в список товаров. Если пользователь привык работать только мышью, то он этого не заметит. А если продвинутый пользователь работает клавиатурой, то возникают неудобства в работе. Может и эту проблемму уже решили? Тогда остановлюсь на варианте с кнопкой, поскольку первый совет требует серьезного изучения примера, а второй я не очень понял как можно приспособить. Но в любом случае, спасибо откликнувшимся.
23.09.2009
17:54
#7
"Почему-то не работает. Делаю так:
На модульном уровне объявляю переменную, которая хранит текущий элемент таблицы (обновляется в функции "УстановитьДоступность")
Затем переключаюсь на процедуру нажатия кнопки. Внутри этой процедуры прописываю команду активизации объекта. Но фокус с кнопки не уходит (:
Перем ПозицияСписка;
Функция УстДоступность() //привязана к пустому Реквизиту диалога, запускается при любом обновлении формы
Если ТекущийЭлемент().Выбран()=1 Тогда
ПозицияСписка=ТекущийЭлемент();
КонецЕсли;
Возврат """";
КонецФункции
Процедура ПоКнВывестиАналоги() //процедура срабатывает при щелчке на кнопке.
Сообщить("Щелкнули по кнопке");
АктивизироватьОбъект(ПозицияСписка); // попытка отправить фокус обратно в таблицу. Не работает(:
КонецПроцедуры"
На модульном уровне объявляю переменную, которая хранит текущий элемент таблицы (обновляется в функции "УстановитьДоступность")
Затем переключаюсь на процедуру нажатия кнопки. Внутри этой процедуры прописываю команду активизации объекта. Но фокус с кнопки не уходит (:
Перем ПозицияСписка;
Функция УстДоступность() //привязана к пустому Реквизиту диалога, запускается при любом обновлении формы
Если ТекущийЭлемент().Выбран()=1 Тогда
ПозицияСписка=ТекущийЭлемент();
КонецЕсли;
Возврат """";
КонецФункции
Процедура ПоКнВывестиАналоги() //процедура срабатывает при щелчке на кнопке.
Сообщить("Щелкнули по кнопке");
АктивизироватьОбъект(ПозицияСписка); // попытка отправить фокус обратно в таблицу. Не работает(:
КонецПроцедуры"
23.09.2009
18:11
#8
И кстати я кажется нашел способ обращения к Контексту активной формы из Глобального модуля. Должно подойти Сервис.АктивныйКонтекст(Контекст) Альфовской разработки. Но я пока не экспериментировал. И если поможете отладить возврат от кнопки обратно в таблицу, то и заморачиваться не буду. Останавлюсь на этом, хотя такое решение не совсем эстетично.
Читают тему
(гостей: 1)