Исходная ситуация
Если не у каждого, то у многих программистов и администраторов есть в почтовом ящике специальная папочка, в которую стабильным потоком льются служебные сообщения от разнообразных регламентных проверок: файлообменный сервер вдруг стал недоступен, важная служба остановилась, принтер перестал реагировать, ИБП почему-то перешел в режим работы от аккумулятора. Есть и более специфические для 1С: обмен между распределенными базами остановился, обмен между УТ и БП остановился, обмен с ЕГАИС остановился, обмен с оператором ЭДО остановился, обмен с другим оператором ЭДО остановился и в том же духе. По идее это делается для того, чтобы успеть все починить, пока не прибежали разгневанные бухгалтера.
Но от разбора этой самой папочки в почтовом ящике могут отвлечь. Или во время глобального катаклизма с выключением света и дождем из лягушек эта папочка переполняется за пару минут. И тогда становится непонятно, вот это письмо про службу печати прочитано потому, что я его уже отработал, или просто случайно ткнул, но ничего еще не делал? Или, может, его уже отработал коллега? Или вот эти обмены - они уже починились, когда перезагрузился сервер, или все-таки надо каждый проверять?
Идея
Некое табло, которое работает постоянно и проверяет всё это в реальном времени. Есть проблема - горит красным, ушла проблема - погасло.
Реализация
Конфигурация совершенно независима (может работать отдельно, можно встроить в рабочую) и состоит из трех объектов:
-
Справочника для хранения внешних обработок в качестве регламентированных проверок (типа справочника дополнительных отчетов и обработок).
-
Сама обработка табло с предупреждениями.
-
Общий модуль для запуска фоновых заданий.
Справочник "Регламентные проверки"
В него загружаются любые внешние обработки с проверками, какие вам нужны. Главное - чтобы в модуле объекта вашей обработки была экспортная функция ПолучитьРезультатПроверки(), и чтобы она возвращала либо Булево, либо Массив, первый элемент которого Булево. Если функция вернет Истину либо массив, первый элемент которого будет Истина, соответствующая строка на табло запылает красным пламенем, призывая принять срочные меры. Зачем Массив, будет рассказано ниже. Загружаем, называем, устанавливаем расписание. Можно тут же из формы элемента запустить (не в фоновом задании).
Обработка "DashBoard"
При открытии заполняет таблицу проверками из справочника "Регламентные проверки". Исключаются помеченные на удаления. Каждой строке выдается уникальный адрес для хранилища значений, в который будет складываться результат проверки, выполненной в фоновом задании. Затем раз в секунду проходятся все строки и, во-первых, проверяется, не сменилось ли состояние (забирает из соответствующего хранилища значения результат, который там лежит), а во-вторых, запускается очередное фоновое задание с проверкой в случае, если подошло время.
Если ваша функция проверки возвращает массив, то помимо состояния (первый элемент массива, который Булево и отвечает за состояние предупреждения Вкл/Выкл), из хранилища значения забираются все остальные элементы массива, приведенные к типу "Строка". Посмотреть на них можно, тыкнув на строку таблицы. Они появятся в поле в правой части обработки. Это на всякий случай для разной дополнительной информации.
Если в процессе проверки случится исключение, сработает предупреждение, а в дополнительной информации (справа) будет показано описание ошибки.
При выборе строки она мерзко мигает и перестает быть выделенной. Это специально сделано, так как выделенная строка остается голубой поверх любой раскраски, и можно не заметить сработавшее предупреждение.
Заголовок формы переписывается каждую итерацию и работает как часы. Это для того, чтобы быстро можно было понять, что все к чертям повисло, и табло уже полтора часа как не обновляется.
Время последней проверки показывает время запуска последней проверки.
Сверху три кнопки. Кнопка "Перезаполнить" вызывает такси, "Запустить проверки" без ошибок закрывает последний месяц и сдает всю отчетность во все органы, а "Остановить проверки" заполняет за вас заявление на вид на жительство в Австралию.
Остальное
Разработано на версии платформы 8.3.8.1652, пока только для управляемых форм. В приложениях Конфигурация и Демонстрационная база. В демонстрационной базе уже добавлены четыре тестовые проверки для демонстрации поведения обработки в разных ситуациях.
В клиент-серверном режиме работает стабильно - плодит фоновые задания, выполняет проверки, забирает результаты. В файловом режиме, вроде, работает, но черт его знает - фоновое задание появляется только одно, и, похоже, все проверки в его рамках выполняются по очереди. Не совсем то, чего хотелось бы. Но с другой стороны, если нужен такой инструмент, то, скорее всего, сервер имеется.