Вот и у меня возникла проблема - одна и та же обработка запускается у нескольких пользователей практически одновременно.
Сначала по понятиям:
"Проверка" - периодический вызов процедуры указанной в ОбработкаОжидания().
"Сработала процедура" - выполнилось в "Проверке" некоторое условие и запустилась вторая процедура, выполнившая некоторую полезную работу.
Какие приемы:
1) Первая ситуация: процедура должна срабатывать каждый час (каждые N минут). Если люди работают в терминале, то надо поставить срабатывание не проверкой часов компьютера: снял ТекущееВремя() и проверил, что минут=0 (думаю, понятно, почему). А по отсчету от момента запуска 1С. Например, если проверка вызывается каждые 10 сек., а полезную работу выполнять каждый час, то сверять, что счетчик вызовов кратен 3600/10. (Вот сдесь и нужен коварный знак "%"!)
2) Вторая ситуация: сработать раз в день, но в установленное время. Чтобы часы на всех компах сработали по-разному, нужно сверять время, но добавить +/- несколько секунд. Например, прибавить "Пользователь.Код".
3) После того как добились асинхронной работы пользователей, боремся с дублированием. Разумеется, надо продумать, что когда проц-ра отработает у одного пользователя, то когда она вызовется у другого пользователя, повторения результата быть не должно, новый док-т не запишется. Так у меня работает снятие резерва. У первого пользователя создался документ СнятиеРезерва, резерв снялся. У второго пытается сделать тоже, но 1С проанализировала, что резерва нет и пустой документ не записывает.
Только нужна разбежка про времени. Считаем, что процедура отрабатыввает 2 сек. Значит проверка должна быть не чаше 5-10 сек.
4) Прием с константой-семафором. Перед отработкой процедуры ставится что-то в константу. Другие программы видят ее и ничего не делают.
5) Способ
Puh14 с "зомби" - реальный. Но ориентирован на большую контору, которую, хорошо бы, и сам программист обслуживал.