Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 13:16

Проблема с обработчиком ожидания

Автор RUFFRYDA, 03 окт 2014, 11:54

0 Пользователей и 1 гость просматривают эту тему.

RUFFRYDA

Столкнулся с такой проблемой при использовании обработчика ожидания:
Таймер - реквизит, число, имеет на форме поле индикатора
Мессаж - реквизит, строка, имеет на форме поле надписи, только чтение.

При обработки кода обработчика ожидания (в данном случае каждую секунду) сбрасывается ввод информации в поля ввода реквизитов на форме, причем в различных ситуациях (зависит от событий обработчика ожидания) по-разному.
Например: если в обработчике ожидания будет присутствовать изменение заголовка какого-то поля реквизита [Элементы.Реквизит1.Заголовок = "asd" + Время(Таймер)], то выбрать элемент в всплывающем принажатии на КнопкуВыбора списке будет возможно только если между открытием списка и кликом на элемент не будет выполнен этот обработчик ожидания. Проблему решил тем, что заменил изменения заголовка в обработчике ожиданий на изменение значения (дополнительного) реквизита, но теперь появилась другая проблема, описаная ниже.

Еще пример: в обработчике изменяется лишь значение одного реквизита формы типа число ---> выбрать элемент для поля реквизита типа Справочник.Ссылка.<ИмяСправочника> при помощи КнопкиВыбора в сплывающем списке теперь можно, но при заполнении этого поля вручную, каждую секунду (интервал обработчика ожидания) значение сбрасывается.
Эту проблему решить не смог, пришел в тупик.

Кто-то может подтвердить, что это баг 1С или дать информацию по этому поводу? Прикладываю код формы:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
Таймер = 120;
Мессаж = "Время на вход: " + Время(Таймер);
ПодключитьОбработчикОжидания("МинусСекунда", 1, 0);
КонецПроцедуры

&НаКлиенте
Процедура МинусСекунда()
Если (Таймер > 0) Тогда
Таймер = Таймер - 1;
Мессаж = "Время на вход: " + Время(Таймер);
//Элементы.Таймер.Заголовок = "Время на вход: " + Время(Таймер);
Иначе
Элементы.Вход.Доступность = 0;
Элементы.ЛогинФормы.Доступность = 0;
Элементы.ПарольФормы.Доступность = 0;
ОтключитьОбработчикОжидания("МинусСекунда");
Мессаж = "Время для логина вышло, преезапустите 1С: Предприятие";
КонецЕсли;
КонецПроцедуры

// число -> время
&НаКлиенте
Функция Время(Значение)
Если Значение < 60 Тогда
  Возврат Строка(Значение) + " сек.";
ИначеЕсли Значение >= 60 и Значение < 60*60 Тогда
Возврат Строка(Цел(Значение/60)) + " мин. " + Строка(Значение-Цел(Значение/60)*60) + " сек.";
ИначеЕсли Значение >= 60*60 и Значение < 60*60*24 Тогда
    Возврат Строка(Цел(Значение/(60*60))) + " час. "
    +  Строка(Цел((Значение - (Цел(Значение/(60*60))*60*60))/60)) + " мин. "
    + Строка(Значение-Цел(Значение/60)*60) + " сек.";
КонецЕсли;
КонецФункции


Просьба не критиковать прикладную часть концепции и т.д. все, что я хочу извлечь из этой ситуации - опыт и понятие взаимодействия различных событий и объектов в 1С.

RUFFRYDA

Выяснил и решил проблему сам ~_~
Решается изменением значения "ОбновлениеТекстаРедактирования", которое при значении "Авто" творит ад, на "Не использовать"

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск