Формулировка проблемы: реестр настроен таким образом, что таймер запускается по дате и времени, задаваемому компонентом формы "Дата/время", находящемуся в динамической таблице. При каждом изменении этой динамической таблицы все таймеры, включая просроченные, запускаются каждый раз снова.
Используется: процесс "Таймер", реестры.
Решение: необходимо добавить новое условие в настройки процесса "Таймер": флажок «Не дублировать и не запускать просроченные таймеры» (по умолчанию выключен). Расположение: Настройки таймера -> после группы опций «Время запуска».
Для отключенного флажка поведение системы на момент реализации данной задачи не меняется, т.е. каждый раз запускаются все таймеры.
Для включенного флажка запуск таймеров должен осуществляться по следующему алгоритму:
на каждую новую строку в динамическую таблицу, из которой берутся значения даты/времени для таймера, запускается один новый таймер;
на каждое изменение строки в динамической таблице, из которой ранее был запущен таймер (но не маршрут по таймеру), аннулировать соответствующий таймер с автокомментарием:
Автоматически удалено в связи с запуском нового таймера
и запускать новый;
на каждое изменение строки в динамической таблице, из которой ранее был запущен таймер и маршрут по таймеру, запускать новый таймер (предыдущий таймер и маршрут по нему не трогать);
на каждое удаление строки в динамической таблице, из которой ранее был запущен таймер (но не маршрут по таймеру), аннулировать соответствующий таймер с автокомментарием:
Автоматически удалено
на каждое удаление строки в динамической таблице, из которой ранее был запущен таймер и маршрут по таймеру, ничего не трогать и не запускать;
общее для всех пунктов выше: если новый запускаемый таймер будет являться просроченным, запускать его не нужно.
Если в результате новых настроек случится, что на этапе с процессом "Таймер" будут отсутствовать таймеры для запуска (например, все таймеры просроченные при включенной новой настройке), этап необходимо завершить успешно с автокомментарием:
Отсутствуют таймеры для запуска
Примечание:
События активации и изменения могут быть настроены так, что будут содержать в себе этапы с таймерами, которые ссылаются на один и тот же компонент в форме, при этом в изменении настроена относительная дата (за/через). В результате такой конфигурации возможна ситуация, что даты таймера на форме не изменяли, но при наступлении события изменения предыдущие таймеры автоматически аннулируются, запустятся новые (т.к. фактически по настройкам процесса "Таймер" итоговые даты изменились). Всё это не будет являться ошибкой Synergy.
Доработка уведомлений таймера
В связи с тем, что в одном процессе может быть запущено несколько таймеров, есть необходимость более однозначного их отображения в ходе выполнения документа. Теперь названия этапов в ходе выполнения документа должны быть следующими:
аннулированный таймер:
Таймер "%название_таймера%" на "%исходная-дата-запуска- маршрута-по-таймеру%" был аннулирован пользователем %Фамилия И.О.%
успешный запуск маршрута по таймеру:
Запущен маршрут "%название_шаблона_маршрута%" по таймеру "%название_таймера%" на "%исходная-дата-запуска-маршрута-по- таймеру%"
неуспешный запуск маршрута по таймеру (без изменений):
Ошибка запуска маршрута "%название_шаблона_маршрута%" по таймеру "%название_таймера%": %причина_ошибки%
Действия при обновлении системы
При обновлении системы в настройках таймера всех маршрутов, где он настроен, добавится новая опция «Не дублировать и не запускать просроченные таймеры», флажок выключен. Других видимых изменений произойти не должно.
Пример использования
Условия: наличие Методолога системы, Группы1 и Пользователя1, принадлежащего этой группе.
Методолог создает новую Форму1:
статическая таблица (table
) содержит
компонент «Дата/время» с вводом времени
(date
);
динамическая таблица (dyntable
) содержит
компонент «Дата/время» с вводом времени
(dyndate
).
Методолог создает Реестр1 на основе Формы1:
заполняет название, форму и т.д.;
в событии «Активация маршрута» в действия добавляет этап с
таймером, дата и время запуска которого из компонента
date
;
в событии «Изменение маршрута» в действия добавляет этап с
таймером, дата и время запуска которого из компонента
dyntable.dyndate
, тут же включает новую
галочку «Не дублировать и не запускать просроченные
таймеры»;
дает все права Группе1.
01.01.2016 г. в 09:00 Пользователь1 открывает модуль «Реестры» → Реестр1, создает новую запись, заполняет дату и время в статической таблице (например 01.01.2016 14:00) и нажимает на кнопку активации.
Запускается таймер активации. В момент наступления даты/времени таймера активации (1 января в 14:00) запускается маршрут по таймеру. Ответственные за этапы маршрута завершают свои работы.
01.02.2016 г. в 09:00 Пользователь1 открывает модуль «Реестры» → Реестр1, открывает на редактирование запись из п.3, добавляет новую строчку в динамическую таблицу и заполняет в ней дату и время (например 01.02.2016 14:00), нажимает на кнопку сохранения.
Запускается таймер изменения. В момент наступления даты/времени таймера изменения (1 февраля в 14:00) запускается маршрут по таймеру. Ответственные за этапы маршрута завершают свои работы.
01.03.2016 г. в 09:00 Пользователь1 открывает модуль «Реестры» → Реестр1, открывает на редактирование запись из п.3, добавляет новые 2 строки в динамическую таблицу и заполняет в них дату и время (например, оба 01.03.2016 14:00), нажимает на кнопку сохранения.
Запускается 2 таймера изменения (только по новым строкам из п.5). В момент наступления даты/времени этих двух таймеров изменения (1 марта в 14:00) запускаются 2 маршрута по таймерам. Ответственные за этапы маршрута завершают свои работы.