разработка информационных систем
Banner  
О нас О нас
Наши продукты Наши продукты
Clip CLIP
R2D2 R2D2
Статьи Статьи
Контакты Контакты
Карта
English English
R2D2 - ОО КИС платформа

Cчетчик

Концепция


Серверная часть. Основой программы является объектно-ориентированная база данных CODB и язык программирования CLIP. Собственно R2D2 представляет собой метаданные, загруженные в CODB и  CGI скрипты для доступа к этим данным.

Клиентская часть ACCORD . Реализована на основе механизма GUI интерфесов Firefox1.5 - XPFE (XUL, XBL, JavaScript, CSS). Передача даных от сервера осуществляется по протоколу HTTP в форматах RDF, XML и объектах JavaScript. С выходом стабильной версии Xulrunner, будет осуществлен переход на эту платформу. Проект  E/AS  также разрабатывает своего клиента на сходной технологии.

В основе системы лежит "объектная модель" предприятия.  "Описание" этой модели хранится в ядре CODB и загружается в него в момент компиляции из XML - файлов.

Что такое "Объектная модель предприятия" вообще? Это такая модель, которая позволяет вычислить неразрывную цепочку ссылок классов и их атрибутов по любым информационным сущностям занесенным в систему. Собственно создание модели не особо отличается от оптимизации реляционных данных. Нужно лишь четко себе представлять задачи, которые будет решть информационная система. Отличаются лишь принципы работы с СУБД, сервера с клиентом. В момент загрузки ACCORD'а, эта модель в виде XML-описания загружается в память клиента. По этой модели динамически строится универсальный редактор классов. То есть, мы можем выбрать для редактирования,  поиска  и составления  таблиц любой класс и производить на нем любые операции по аналогии с любой СУБД. Любому классу мы можем присвоить первичный документ - текстовое представление экземпляра класса. 

Балансовое ядро. . Для регистрации и отслеживания динамических изменений информационной системы служит балансовое ядро . В первую очередь оно предназначено для бухгалтерского учета и анализа. Но не только. На нем можно отслеживать любые изменения имеющие единицы измерения. Например задача отдела кадров - отследить степень заполнения штатного расписания, также решается в этом балансовом ядре. В ядре реализована "сетевая" модель аналитики.

В чем ее суть. Ядро поддерживает 6 иерархических уровней аналитики. То есть каждый нижний уровень, входит в один верхний. Например, аналитика по расчетам с поставщиками делится на аналитику по счетам фактурам. Система позволяет получить оборотно - сальдовую ведомость как по поставщикам так и по всем счетам-фактурам, в зависимости от уровня заказанного пользователем. Возникает вопрос, а как быть с договорами. С объектной точки зрения - между поставщиком и счет-фактурой должна стоять аналитика по договорам и тогда получится трехуровневая аналитика. Но в этом нет необходимости. Договор - это атрибут счет фактуры, если исходить из того, что счет-фактура принадлежит одному договору. Поэтому достаточно в объектной модели прописать вывод атрибута "Договор" в запрос по счетам-фактурам оборотно-сальдовой ведомости и, на клиенте легко делается свертка по договорам из первого уровня по счет-фактурам. Неискушенный читатель задаст вопрос - "Но ведь тогда из этого запроса таже можно получить свертку по поставщикам?" Совершенно верно, а еще по городам и регионам, так как это атрибуты поставщика. Таким образом имея только один уровень аналитики - по счетам фактурам, мы можем получить анализ по четырем срезам - "поставщикам-договорам-регионам-городам". Итак, имеем иерархические уровни и паралельные срезы на каждом уровне. Но и это еще не все. Запросив любой объект, который может находиться на любом уровне иерархической аналитики любого счета, мы также можем получить по нему всю оборотно-сальдовую картину. Например, запросив работника - увидим и его зарплату и подотчет и материальную ответственность.


Как работает клиент-сервер. В отличие от классической схемы с SQL гораздо проще. Во-первых, нет необходимости писать сложные SQL-запросы. Обмен построен на технологии асинхронных запросов AJAX. Рассмотрим простейший запрос на поиск по индексу. Клиент формирует HTTP запрос cgi-скрипту с указанием класса, индексного атрибута и искомого значения. В запросе нет необходимости указывать в каком виде выводить ответ. Ответ возвращается со значениями всех атрибутов и ссылок в двух видах RDF или объектах JavaScript.

Предвижу вопрос о скорости. Мол, если заказать вывод не всех атрибутов, запрос будет выполнен быстрее. "Отнюдь" (С) ИТК. Особенности CODB. А вот что делать с этим выводом, решает клиент в виде XSLT шаблона, XUL шаблона (RDF) или динамического дерева (JavaScript) или рисования графики в SVG. Возможно объединение нескольких запросов в один шаблон или сценарий JavaScript и вывод результата в редактируемый документ - HTML (в перспективе ODF ) или преобразование этого запроса в часть клиентского интерфейса (дерева, меню XUL и т.д.). Во-вторых. Какая разница где ждать преобразования - на сервере приложений или на своем клиентском рабочем месте? Всего сервер поддерживает два десятка запросов, которые покрывают всю потребность в обмене между клиентом и сервером. И конечно не вся логика делается на клиенте. На сервере работают триггера. В процессе проектирования очень увлекательно переносить одну и ту же задачу с сервера на клиент и обратно, выбирая - "а где же эффективнее работать будет?".

О том, что по одному аналитическому объекту можно выудить всю его бухгалтерскую жизнь и состояние уже говорилось. Но есть еще один уникальный запрос. По идентификатору объекта или нескольких объектов можно получить циклическую развертку всех ссылок (до пресечения рекурсии). Например, я задаю объект "Накладная N 36" - возвращается не только ее состав, но и всех поставщиков всех товаров этой накладной с их адресами и накладными по которым эти товары поставлялись. Скорость? Самый упругий, который приходилось отслеживать -1.5-3 сек вместе с XSLT преобразованием. Объем XML - 2 МБ. Не трудно себе представить, что на таком материале можно сделать.

Общее резюме. Для работы в комплексе r2d2-ACCORD нет необходимости изучать какой-то новый или специфический язык. Разве что XUL. Имеется объектная СУБД, API которой, ограничен двумя десятками (а реально и того меньше запросами). Все остальное широко распространенная web-технология XML и JavaScript. Имеется универсальное балансовое ядро с сетевой аналитикой. Осталось приложить опыт системного аналитика и получается неплохой симбиоз для создания информационных систем управления широкого круга задач.

© ООО "Инженерно-Техническая Компания" (ИТК) 2006
426072, Удмуртская республика, Ижевск а/я 1247, uri at itk dot ru