Отчёты для СКД
С 2000 года я работаю в Московском ГТУ Банка России. Для одного из новых объектов этой организацией была приобретена за большие деньги система контроля доступа XSM известной фирмы
Передо мной немедленно встал вопрос о создании собственной системы отчётов, лишённой недостатков штатной: неумения работать с данными за большой период времени и отсутствия возможности создавать сложные отчёты. Впрочем, сложность вызвана в первую очередь безобразной структурой встроенной базы данных, поменять которую нельзя.
Для решения задачи был установлен 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 минут кликанья мышью одним человеком.