Входные условия :
Есть в клиент-серверной базе предопределенное регламентное задание с методом МойОбщийМодуль.МояПроцедура1, которое раз в N минут должно что-то делать в базе. Периодически по непонятным причинам фоновое задание, порождаемое регламентным, зависает. Как уже сказано выше, снять его проблематично. Но что еще хуже, новое фоновое задание стартовать не хочет. А зачем? Одно ведь уже выполняется!
Таким образом, очень важные процедуры просто прекращают выполняться.
Как я с этим боролся:
1) Регламентное задание убираем из конфигурации
2) Вводим пользователя специально для выполнения этой процедуры.
3) В Процедуре ПриНачалеРаботыСистемы пишем примерно так:
Если ИмяПользователя()="ЭтоСамоеИмя" Тогда
МойОбщийМодуль.МояПроцедура2();
ПрекратитьРаботуСистемы();
КонецЕсли;
4) В общем модуле МойОбщийМодуль
Процедура МояПроцедура2() Экспорт
МоеФЗ=ФоновыеЗадания.Выполнить("МойОбщийМодуль.МояПроцедура1",,Строка(ТекущаяДата()));
КонецПроцедуры
5) В Планировщике Windows делаем задание на запуск базы с этим пользователем с нужным расписанием.
Что мы этим достигаем? Того же, что и в первом случае, за исключением того, что каждое фоновое задание запускается с уникальным ключом (см. третий параметр в методе выполнить). Поэтому зависшее фоновое задание не мешает стартовать следующим.
И контрольный выстрел : чтобы почистить зависшие фоновые задания раз в сутки ночью выполняем с помощью планировщика задание на
net stop... net start...
Решение громоздкое, некрасивое и не нравится мне. Прошу сильно не пинать. Это больше приглашение к дискуссии. Буду рад, если кто-то предложит лучше.