http://www.gaapinvest.com  Распечатать

Основные сведения о системе Allegro

Что такое Allegro?

Клиент-серверная технология: выбор сервера баз данных

Мгновенный баланс компании: выбор модели бухгалтерского учета

Шаблоны проводок: автоматическая генерация текстов хранимых процедур

Справочники: наследование атрибутов, форматирование наименований

Программирование оконного интерфейса: выбор скриптового движка

Разделение проектирования метаданных и оконного интерфейса

Создание новой базы данных: автоматический перенос остатков

Резюме


ЧТО ТАКОЕ ALLEGRO?


Нам часто задают этот вопрос, но сразу ответить исчерпывающе на него довольно трудно. Легче сначала ответить на вопрос: что с помощью Allegro можно сделать?

Ответ звучит так: найдите программиста, знакомого с Delphi и языком SQL, дайте ему в руки Allegro и он Вам создаст нормальную систему финансового учета, заточенную именно под Ваш бизнес: быстро и с удовольствием. Цифры, которые будет выдавать такая система, окажутся надежными, а способ их получения - Вам понятным. Система не будет "тормозить", а менеджеры не станут с такой системой воевать, так как каждый менеджер обнаружит, что эта система лично ему упрощает жизнь, а не усложняет ее.

Если Вас заинтересовал такой ответ, то можно переходить к краткому описанию того, что же представляет собой система Allegro и из чего она состоит.


КЛИЕНТ-СЕРВЕРНАЯ ТЕХНОЛОГИЯ: ВЫБОР СЕРВЕРА БАЗ ДАННЫХ


Allegro - это классическая (двухзвенная) клиент-серверная система. На компьютере-сервере размещается файл базы данных и устанавливается программа - сервер баз данных InterBase, который работает с этим файлом базы данных. На клиентских компьютерах запускается программа Allegro, которая связывается с сервером баз данных по локальной сети и посылает ему запросы на языке SQL (язык структурированных запросов - Structured Query Language). Сервер воспринимает эти запросы и исполняет их, организуя совместную работу многих пользователей с одной и той же базой данных. Язык SQL позволяет работать с данными (вставлять, удалять, изменять и извлекать строки таблиц) и с метаданными (добавлять в базу данных новые таблицы, изменять структуру существующих, удалять таблицы и т.д.). Каждая база может одновременно содержать множество таблиц, индексов, хранимых процедур и других объектов. Важной особенностью клиент-серверной архитектуры является то обстоятельство, что обработка данных ведется сервером. Это позволяет избежать передачи больших объемов данных по сети. Например, если у нас имеется таблица в миллион строк, и мы хотим просуммировать значения каких-то строк в этой таблице, мы просто посылаем соответствующий SQL-запрос серверу баз данных InterBase, он сразу обращается к файлу базы, который расположен физически на том же компьютере, где работает сервер, быстро суммирует нужные строки и возвращает нам по сети результат - одну строку. Если бы не работа сервера баз данных, нам пришлось бы сначала перекачать по сети всю таблицу в миллион строк на клиентский компьютер и только затем выбирать и суммировать нужные строки на клиентском компьютере (именно это происходит при так называемой файл-серверной архитектуре). Кроме SQL-запросов, сервер баз данных может исполнять так называемые хранимые процедуры. Тексты этих процедур хранятся непосредственно в базе. Хранимые процедуры позволяют организовать достаточно сложную обработку данных непосредственно на сервере. Мы выбрали сервер баз данных InterBase для системы Allegro по ряду экономических причин, стремясь сократить прежде всего затраты конечного пользователя:

  • это очень компактный и надежный сервер, практически не требующий обслуживания (администрирования)
  • многие версии этого сервера бесплатны, например, сервер Firebird.
  • этот сервер популярен среди разработчиков, пишущих учетные программы.

МГНОВЕННЫЙ БАЛАНС КОМПАНИИ: ВЫБОР МОДЕЛИ БУХГАЛТЕРСКОГО УЧЕТА


Allegro содержит мощный и прозрачный механизм финансового учета. Этот механизм основан на технологии мгновенного бухгалтерского баланса всей компании на любую дату в стиле, похожем на англо-американский бухгалтерский учет GAAP (Общепринятые принципы бухгалтерского учета - Generally Accepted Accounting Principles). В Allegro двустороннему бухгалтерскому балансу компании придается особое значение. Это не просто отчет, как во многих других системах. В Allegro баланс является одновременно навигатором по данным и отображается в специальном окне в двустороннем виде (на левой и правой панелях). Все счета образуют деревья. Суммы на верхних уровнях счетов-каталогов автоматически образуются путем сложения сумм на счетах нижних уровней. Число уровней вложенности счетов не ограничено. Счета создаются непосредственно в окне баланса. Их можно легко переименовывать, перемещать из одного "каталога" в другой прямо в процессе учета. Счета не требуют нумерации и состав их не регламентирован. Выбрав любой счет, можно сразу увидеть все записи по нему, отображая так называемый Т-счет на противоположной панели окна. Выбрав любую запись в Т-счете, можно видеть бухгалтерскую операцию, которая ее породила и вызвать соответствующий документ на экран.

Аналитические счета в Allegro имеют одно аналитическое поле и входят в состав так называемых регистров счетов, привязанных каждый к своему справочнику. Развернутые или простые сальдо аналитических балансовых регистров автоматически входят в состав баланса в виде специфических сальдо-счетов, которые нельзя удалить, но можно переименовывать и перемещать по деревьям регистров баланса.

Такая организация счетов позволила получить чрезвычайно гибкую, наглядную и быстродействующую систему представления текущего финансового положения компании, в которой полный двусторонний баланс получается при помощи всего одного SQL-запроса со скоростью расчета около 100 тыс. проводок/сек. Система Allegro предназначена для учета реального финансового положения дел в компании и поэтому мы выбрали в качестве бухгалтерской модели именно такой международный стиль учета, который справляется с этой задачей наилучшим образом, то есть англо-американский GAAP. Текущий баланс в Allegro соответствует тому, что называется Trial Balance в англо-американской модели.


ШАБЛОНЫ ПРОВОДОК: АВТОМАТИЧЕСКАЯ ГЕНЕРАЦИЯ ТЕКСТА ХРАНИМЫХ ПРОЦЕДУР.


Система Allegro содержит изящный механизм автоматических бухгалтерских операций.

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

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

Перед записью "куска" журнала в таблицу проводок, записи подвергаются суммированию с группировкой по ключевым полям, что сокращает количество вставляемых строк до минимума. Например, накладная, содержащая 20 строк, каждая из которых должна была бы вызвать записи по 4 счетам в соответствии с шаблоном (дебет расходов, кредит склада, дебет покупателя и кредит доходов) после суммирования содержит вместо 80 всего 23 записи, из которых 20 записей содержат списание стоимости различных товаров со склада, а 3 записи содержат уже суммы, начисленные покупателю и на счета доходов расходов правой стороны бухгалтерского баланса. Таким образом, несмотря на 4 строки в шаблоне операции, среднее количество строк, добавленное в таблицу проводок для такой накладной - чуть больше одной строки на каждую строку документа. Записи в таблице проводок хранятся в "вертикальной форме" смешанных проводок, принятой в GAAP. Таким образом, Allegro хранит проводки самым компактным способом из всех возможных. Это позволяет значительно сэкономить место в базе данных и предельно ускорить получение полного баланса компании.


СПРАВОЧНИКИ: НАСЛЕДОВАНИЕ АТРИБУТОВ, ФОРМАТИРОВАНИЕ НАИМЕНОВАНИЙ


Классы справочников создает конфигурирующий, сам назначая имена таблиц и полей для них. Система Allegro поддерживает объектно-ориентированные справочники с высокой степенью нормализации. Для этого все справочники образуют систему классов с наследованием атрибутов старших классов младшими классами. Каждому классу соответствует одна таблица в базе данных, в которой объекты хранят только собственные (не унаследованные) атрибуты. Таким образом, каждый объект хранится одновременно в нескольких таблицах. Атрибуты, унаследованные от класса-предка хранятся в таблице класса предка, а собственные атрибуты - в таблице класса. "Сборка" полного справочника производится автоматическими SQL-запросами, текст которых Allegro генерирует "на лету".

Допустим, нам нужно организовать справочник для товаров бытовой техники, имеющих, как правило, 3 атрибута: "Марка", "Вид", "Артикул", но известно, что иногда попадаются товары, имеющие лишь "Артикул" и "Наименование", например, всякая тара…

Для этого мы сначала создадим класс "Товары" (с колонкой "Артикул"). Это одна таблица. Затем мы создадим еще два класса-потомка:

"Бытовая техника" (с колонками "Марка" и "Вид") и

"Другие товары" (с колонкой "Наименование").

При отображении справочника "Бытовая техника", Allegro объединит таблицу "Товары" с таблицей "Бытовая техника" и мы увидим у каждого объекта все три атрибута: "Артикул", "Марку" и "Вид", а при отображении справочника "Другие товары", Allegro объединит таблицу "Товары" с таблицей "Другие товары" и мы увидим у каждого объекта всего два атрибута: "Артикул" и "Наименование".

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

Мы также можем для поля "Артикул" в таблице "Товары" создать уникальный индекс и таким образом обезопасить справочник от появления нежелательных дубликатов.

Мы можем создать аналитический регистр счетов "Товары на складах" и привязать его к базовому классу "Товары". Это позволит учитывать операции с товарными документами в бухгалтерской системе Allegro, независимо от того, сколько классов-потомков создано у класса "Товары".

Вся система справочников Allegro автоматически снабжается внешними ключами (foreign key) в момент создания каждого нового класса. Это обеспечивает автоматическую ссылочную целостность данных: сервер не позволит удалить из справочника товар, который используется в каких-то документах и не позволит удалить марку товара из справочника "Марки", если она используется какими-то товарами.

Хранение объектов в таких справочниках очень удобно для быстрого создания мощной и разветвленной системы классификации товаров, но требует особого подхода при печати или просмотре документов. Как напечатать накладную, в которую одновременно должны войти товары разных классов, имеющие различную атрибутику? Для этого в Allegro предусмотрена система форматирования наименований, позволяющая задать правила "склеивания" различных атрибутов в пределах класса в отформатированное наименование. Все отформатированные наименования объектов разных классов, созданные по разным правилам "склейки", хранятся в одной общей таблице - "таблице наименований". При печати или отображении документа достаточно объединить "таблицу наименований" с позициями документа простым SQL-запросом и мы получаем читабельный список товаров.


ПРОГРАММИРОВАНИЕ ОКОННОГО ИНТЕРФЕЙСА: ВЫБОР СКРИПТОВОГО ДВИЖКА


Система Allegro содержит в себе интерпретатор скриптовых языков производства компании Dream Controls. Он позволяет тому, кто занимается конфигурированием системы, создавать очень развитые окна пользовательского интерфейса. Этот интерпретатор понимает несколько скриптовых языков: Delphi Script, VB Script, Java Script и Active Perl. При этом он поддерживает VCL-компоненты Delphi и среду разработки оконного интерфейса, очень похожую на Delphi. При использовании языка Delphi Script окна пользовательского интерфейса сохраняются в формате, совместимом с Delphi6 - в привычных для программистов файлах *.dfm и *.pas.

Переключение Allegro из режима исполнения в режим дизайна конфигурации происходит одним нажатием кнопки, что сильно экономит время разработчика.

Использование общепринятых в программировании или знакомых (Delphi Script) языков и компонентов также сильно снижает затраты на разработку, так как практически не требует какого-то особенного обучения программистов. Любой программист, работавший в среде Borland Delphi будет чувствовать себя в своей тарелке, разрабатывая оконный интерфейс в Allegro.

Так как конфигурирующий работает с сервером баз данных напрямую и формат базы данных открыт (имена таблиц и полей назначает он сам), он может использовать язык структурированных запросов SQL очень эффективно и достигать высокого быстродействия всей системы. Как правило любой отчет, созданный в Allegro, срабатывает за считанные секунды.

Система Allegro содержит встроенный популярный генератор печатных отчетов FastReport. Поддерживается также экспорт в Microsoft Excel, который значительно облегчается встроенным в Allegro компонентом XL Report от Afalina Soft. Экспорт в Excel избавляет разработчика от необходимости тратить время на рутинный дизайн печатных форм. Ему достаточно спроектировать шаблоны в Excel и просто иногда вносить изменения в эти шаблоны, если что-то нужно подправить.


РАЗДЕЛЕНИЕ ПРОЕКТИРОВАНИЯ МЕТАДАННЫХ И ОКОННОГО ИНТЕРФЕЙСА


В системе Allegro любая конфигурация состоит из двух частей:

  • метаданных (хранятся в базе данных)
  • оконного интерфейса (модули хранятся в отдельных файлах на диске)

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

Другим важным преимуществом, вытекающим из такого разделения конфигурации является возможность разработки отчетов параллельно с работой пользователей в сети. Дело в том, что для изменения некоторых метаданных требуется монопольное подключение к базе данных. Но для разработки (добавления, изменения) оконного интерфейса такое монопольное подключение не требуется. Также не требуется монопольное подключение при создании или изменении хранимых процедур на сервере, если эти процедуры занимаются только выборкой данных. Поэтому пользователи могут спокойно работать пока программист добавляет в систему новый отчет и отлаживает его.


СОЗДАНИЕ НОВОЙ БАЗЫ ДАННЫХ: АВТОМАТИЧЕСКИЙ ПЕРЕНОС ОСТАТКОВ


Одной из особенностей Allegro является способность этой системы создавать новые базы данных, перенося финансовые остатки на дату "отреза" из старой базы в новую базу в качестве начальных остатков. При этом система Allegro способна осуществить такой перенос данных независимо от конфигурации благодаря тщательно продуманной бухгалтерской модели и идеологии хранения данных. Таким образом, компания может время от времени избавляться от устаревших и потерявших актуальность данных путем создания новой базы данных. При этом никакого дополнительного программирования не требуется.


РЕЗЮМЕ


Создавая систему Allegro мы ставили себе целью получить инструмент, который был бы удобен именно для профессионального разработчика баз данных. Мы предоставили ему мощную скриптовую систему для создания эргономичного оконного интерфейса, дали ему в руки SQL и прямой доступ к базе данных. Мы постарались изначально направить бухгалтерскую подсистему в сторону получения баланса и осмысленных финансовых результатов, избавляя, насколько это возможно, конфигурирующего от разработки этой части организуя сотрудничество и разделяя его участие и участие финансового директора (бухгалтера) в этих вопросах. Мы постарались создать мощную и гибкую систему справочников, избавляя разработчика и от этой рутины. Разработчик может теперь всецело сконцентрироваться на логике бизнес-процессов заказчика, построении быстрых и качественных отчетов и на эргономике интерфейса.

Мы также ставили себе целью создать среду, в которой возможно написание конфигураций на заказ для малого и среднего бизнеса. Для этого мы максимально удешевили совокупную стоимость владения такой системой за счет:

  • ускорения работы программиста
  • использования бесплатного сервера
  • особой политики продаж, не требующей оплаты копий, установленных на компьютерах заказчиков, а лишь лицензии на использование Allegro в качестве средства разработки
  • компактности системы и, в результате, возможности ее эффективной поддержки через Интернет

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

  • переделки не требуют перекомпиляции всей программы
  • большинство переделок не требует остановки функционирования системы
  • определенные идеологические ограничения на способы организации данных в Allegro не располагают к совершению наиболее типичных ошибок при разработке, чреватых затем полным тупиком на какой-то стадии.

Мы постоянно дорабатываем Allegro, поддерживая совместимость версий. И стараемся сделать так, чтобы эта система все лучше и лучше помогала разработчикам коммерческих учетных систем в их нелегкой миссии.