Программы

Отчёты для СКД

С 2000 года я работаю в Московском ГТУ Банка России. Для одного из новых объектов этой организацией была приобретена за большие деньги система контроля доступа XSM известной фирмы Honeywell. Система оказалась барахлом.

Передо мной немедленно встал вопрос о создании собственной системы отчётов, лишённой недостатков штатной: неумения работать с данными за большой период времени и отсутствия возможности создавать сложные отчёты. Впрочем, сложность вызвана в первую очередь безобразной структурой встроенной базы данных, поменять которую нельзя.

Для решения задачи был установлен Oracle, в котором один в один была повторена схема встроенной базы. В то время, как встроенная база данных хранит актуальную оперативную информацию, база в Oraclе используется в качестве хранилища данных и обновляется раз в несколько дней, разрастаясь за год до 10 Г. Отчёты обращаются одинаковым образом к одной из этих баз с помощью ODBC.

Собственно программы я писал на Perlе, что позволило создать большой набор необходимых отчётов в короткие сроки. Недаром всё-таки это Practicle Extracting and Reporting Language. А помимо прочего, он позволяет эффективно бороться с  криво (т. е. неформализованно) введённой пользователями информацией вроде номеров машин.

Для доступа к системе отчётов с любого компьютера сети пользователи работают с браузером (Microsoft Internet Explorer), обращаясь к веб-серверу Apache, установленному вместе с Oracle на выделенном сервере. Отчёты имеют удобный html-интерфейс, щедро сдобренный javascriptом для возможности ввода дат и времени в практически любом виде, создания комбобоксов и т. п. Результаты каждого отчёта могут рассматриваться пользователем в различных видах, а также вставляться по необходимости в Word или Excel.

Для обновления информации в хранилище данных была написана специальная программа на Tcl/Tk, которой приходится черпать необходимые данные аж из трёх источников, ни один из которых Honeywell не потрудилась документировать. Выбор пал на достаточно экзотический Tcl/Tk потому, что приходится интенсивно вызывать внешние программы (вроде SQL*Loader) и мои собственные утилиты на C. Этот язык оправдал ожидания, позволив легко объединить отдельные программы графическим интерфейсом.

Кроме того, он же с успехом применялся мной и для написания ряда утилит, автоматизирующих ручной труд операторов системы безопасности. Введение одной из них позволило сократить время, затрачиваемое ежедневно на поддержку системы, с часа напряжённой работы двух операторов до 15 минут кликанья мышью одним человеком.