Форум Кладовочки АЛьФ`а

Обсуждение проектов => FormEx => Тема начата: Arbuz от 27 августа 2024, 15:37

Название: ОбработкаОжидания
Отправлено: Arbuz от 27 августа 2024, 15:37
А подскажите, у одного объекта Сервис может быть только одна обработка ожидания? т.е. если, к примеру, установлена одна обработка и пока она не сработала у того же объекта задана другая, то первая не сработает?
Название: Re: ОбработкаОжидания
Отправлено: Злоп от 28 августа 2024, 01:07
Насколько я понимаю - одна.
Посмотри в сторону РасшФормы.ОО и Таймер.
Хотя РасшФормы - это те же грабли вид сбоку...
.
Посмотри у Васи Душелова, написал ее по моему заказу и у меня работало успешно, генерит события в заданным интервалом, можно нацеплять разных событий с разными интервалами и разруливать по имени события при срабатывании
.
https://infostart.ru/1c/tools/19248/
Название: Re: ОбработкаОжидания
Отправлено: Arbuz от 29 августа 2024, 16:06
Лень было что-то добавлять, даже писать КОП. И в конфе, в которой использовались разные ОО в ГМ от одного объекта Сервис (что, соответственно, вызывало непредсказуемые глюки) была добавлена одна глобальная переменная и одна функция:
Функция глТаймер(пТаймер = 0, пИнтервал = 0) Экспорт
   
    Если ТипЗначенияСтр(прТаймер) <> "АссоциативныйВектор" Тогда // глобальная переменная
        прТаймер = СоздатьОбъект("АссоциативныйВектор");
    КонецЕсли;
   
    Если пТаймер = 0 Тогда
        прТаймер.Очистить();
        Возврат 0;
    КонецЕсли;
   
    Если ТипЗначения(пТаймер) = 2 Тогда // строка
        _Поз = прТаймер.НайтиКлюч(пТаймер, 1);
        Если _Поз < 0 Тогда
            прТаймер.Добавить(СоздатьОбъект("Таймер"), пТаймер);
            прТаймер.Получить(_Поз).ЗадатьОбработчикВГлобальномМодуле(пТаймер);
        КонецЕсли;
       
        Если прТаймер.Получить(_Поз).Запущен = 1 Тогда
            прТаймер.Получить(_Поз).Остановить();
        КонецЕсли;
       
        Если пИнтервал > 0 Тогда
            прТаймер.Получить(_Поз).Запустить(пИнтервал);
        ИначеЕсли пИнтервал = -1 Тогда
            прТаймер.Удалить(_Поз);
        КонецЕсли;
    КонецЕсли;
   
    Возврат прТаймер.Количество();
   
КонецФункции // глТаймер


И просто вызовы Сервис.ОбработкаОжидания("Обработчик", Интервал) были заменены на глТаймер("Обработчик", Интервал). Кстати, обнаружилось, что таймер в отличие от сервисной ОО не принимает обработчик с необязательными параметрами.
Название: Re: ОбработкаОжидания
Отправлено: Злоп от 29 августа 2024, 17:53
навскиду не понял что там в функции, не вдумывался.
что в итоге то функция делает по существу?
Название: Re: ОбработкаОжидания
Отправлено: Злоп от 30 августа 2024, 14:07
Можно не отвечать.
Вдумался.
Тяжелый код по названиям переменных.
пТаймер - ну ладно, ПараметрТаймер
прТаймер..?
Название: Re: ОбработкаОжидания
Отправлено: Arbuz от 30 августа 2024, 14:33
Она уже была. Лень было исправлять. И колорер у меня подсвечивает разные переменные. А так да... это чтобы враги не разобрались )))

ЗЫ: Убедил — сменил прТаймер на ПулТаймеров  %)