№ п/п | Поле | Тип | Назначение |
1 | NPP | SMALLINT | Код |
2 | NAME | VARCHAR(хх) | Название |
SQL-текст команды создания таблицы Vecsel
CREATE TABLE VECSEL (NPP INTEGER NOT NULL,
ACTNUM SMALLINT NOT NULL,
VECNUM INTEGER NOT NULL,
EMITENT SMALLINT NOT NULL,
RUBSUM DOUBLE PRECISION NOT NULL,
EMISDATE DATE NOT NULL,
SENDDATE DATE,
VECHOLDER INTEGER,
SUPPLIER INTEGER,
CONTRACT INTEGER,
EXECUTED SMALLINT NOT NULL,
NOTE VARCHAR(50) CHARACTER SET WIN1251,
REGION SMALLINT);
CREATE GENERATOR VECSEL_GEN;
CREATE TRIGGER SET_VECSEL FOR VECSEL
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN NEW.NPP=GEN_ID(VECSEL_GEN,1);END;
Текст основного SQL-запроса реестра векселей:
SELECT A.NPP, A.ACTNUM, A.VECNUM, B.NAME EMITENT, A.RUBSUM, A.EMISDATE,
A.SENDDATE, C.NAME VECHOLDER, D.NAME SUPPLIER, E.NOMER_OUR,
F.NAME SUBJECT, G.NAME SERVICE,
A.EXECUTED, A.NOTE, H.NAME REGION
FROM VECSEL A
LEFT OUTER JOIN EMITENT B
ON (A.EMITENT = B.NPP)
LEFT OUTER JOIN COMPANY C
ON (A.VECHOLDER = C.NPP)
LEFT OUTER JOIN COMPANY D
ON (A.SUPPLIER = D.NPP)
LEFT OUTER JOIN CONTRACT E
ON (A.CONTRACT = E.NPP)
LEFT OUTER JOIN REGION H
ON (A.REGION = H.NPP)
LEFT OUTER JOIN SUBJECT F
ON (E.SUBJECT = F.NPP)
LEFT OUTER JOIN DEPARTMENT G
ON (E.DEPARTMENT = G.NPP)
ORDER BY A.NPP
Запрос выводит информацию из таблицы VECSEL и тех таблиц, коды из которых использованы:
COMPANY – справочник по компаниям;
CONTRACT – таблица активных договоров;
REGION – справочник по регионам и энергосистемам;
SUBJECT – справочник по предмету договора;
DEPARTMENT – иерархический справочник по подразделениям компании.
Листинг основного модуля программы vecsel.exe
program Vecsel;
uses Forms, Windows, …
{$R *.RES}
const ProductTitle='Реестр векселей';
var FormPointer:PChar;
hD : HWND;
begin
Application.ShowMainForm:=false;
FormPointer:=PChar(ProductTitle);
hD:=FindWindow('TApplication',FormPointer);
If hD<>0 then
// если программа уже запущена, то вывести главное окно на первый план
SetForegroundWindow(hD)
else
//иначе запустить новый экземпляр программы
begin
Application.ShowMainForm:=true;
Application.Initialize;
Application.CreateForm(TCSTForm, CSTForm);
Application.CreateForm(TMainDM, MainDM);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TExcangeForm, ExcangeForm);
Application.Run;
end;
end.
Созданы справочники на все однородные группы данных. Каждая рабочая таблица хранит код везде, где возможно унифицировать данные. Т.о. были выделены следующие справочники:
- страны;
- города;
- службы;
- виды валют;
- компании;
- банки;
- предмет договора;
- пользователи.
Когда пользователь вводит информацию, это, как правило, стандартная операция с определенным контуром входных данных. Поэтому выгодно реализовать ввод всех финансовых операций в виде хранимых процедур в базе данных. Приложение-клиент передает по сети, в таком случае, только параметры этой процедуре, а она в свою очередь сама выполняет SQL-запросы. Это дает три хороших момента:
1) Трафик сети снижен до порогового минимума – следовательно, быстрее будет совместная работа нескольких пользователей;
2) Одни и те же хранимые процедуры могут использовать разные приложения, сокращается объем кода;
3) Хранимые процедуры выполняются в рамках одной транзакции – отпадает необходимость программно реализовывать механизм транзакций в каждом приложении.
Вводимая информация не только хранится в таблицах. При каждом изменении данных в одних таблицах необходимо по определенным правилам изменять данные в других таблицах.
Например, при поступлении счет фактуры за выполненные работы или услуги приложение, отвечающее за регистрацию данного документа, должно параллельно внести изменения:
- в таблицу “Договора” – об исполнении поставщиком своей части контракта;
- в главную таблицу – об изменении оперативной задолженности данного контрагента.
И это один из самых простых и очевидных примеров. Число каскадных изменений в БД зависит от уровня желаемой автоматизации системы. Для упрощения системы и “прозрачного” программного управления событиями, вводят механизм “бизнес-правил”. Это внутренний аппарат сервера баз данных Interbase, он позволяет перенести управление целостностью данных из приложений на сервер.
Бизнес-правила реализуются в виде процедур в базе данных finance.gdb, и при внесении изменений в одни таблицы, они автоматически обновляют данные в других. Образно говоря, бизнес-правила организуют взаимодействие между отдельными таблицами, которые хранят обособленную информацию. Этим мы достигаем цели каждый момент иметь самую последнюю информацию в главной таблице оперативной дебиторско-кредиторской задолженности.[6]
Структура входной информации осталась неизменной. Таким образом, на входе нашей централизованной системы управления будут “бумажные” данные. Главной функцией клиентских приложений будет обеспечение работоспособного и быстрого интерфейса по вводу данных. За обработку же информации будет отвечать база данных со всеми ее внутренними механизмами.
Каждое приложение, читай, каждый экономист – пользователь системы, имеет в своем распоряжении отдельную таблицу, в которую только он может вносить данные, а всем остальным таблицам приложение должно иметь ограниченный доступ (обычно это чтение данных) для проведения таких финансовых операций, где требуется работа нескольких экономистов. Например, для регистрации векселя необходимо знать, по какому договору выполняется индоссирование, а эту информацию вводит другой экономист.
Таблицы взаимодействуют между собой (изменяют свое содержимое в зависимости от других таблиц) при помощи механизма бизнес правил. Главной целью всего этого является центральная таблица. В ней каждый момент отображается текущее состояние задолженности каждой компании или организации, с которыми мы имеем дело. Полный доступ на все виды выборок из этой таблицы имеет приложение начальника финотдела, которое не вводит никакой информации. При обнаружении роста задолженности какой-либо компании приложение по связям между таблицами находит, на основании каких операций и документов произошел данный рост, определяет динамику его развития, дату образования, долю среди всего остального объема задолженности.
Мы видим, что не требуется промежуточных сведений цифр, сопоставления работы нескольких финансистов. В существующей системе для вывода итоговых данных, на основании которых можно было сделать некоторый анализ, требовалось группировать данные по различным критериям, сводить их во все более общие цифры, а затем проводить их обратную расшифровку. При этом в процессе получения итоговых отчетностей участвовало несколько экономистов, которые не обрабатывали входные документы и не проводили конечный анализ, а обрабатывали цифры – путем их переноса “из одной ведомости в другую”.
В автоматизированной системе управления финансовым учетом, как видно из схемы, потоки информации вводятся в базу пользователями – специалистами финотдела, затем они оперативно обрабатываются в БД, и уже в различном разрезе выводятся теми экономистами, которые отвечают за отчетные цифры и их анализ.
Данная схема учитывает возникновение потребности смежных отделов в доступе к информации, за которую отвечает финансовый отдел. На практике эта ситуация проявится с первого же дня работы системы. Другим отделам могут понадобиться либо входные данные по различным операциям, либо уже готовые финансовые отчетности по различным показателям. При данной схеме обработки информации, для доступа к ней достаточно будет организовать небольшие клиентские приложения, подключающиеся к БД системы финотдела, с правом производить выборки “только для чтения”. Для использования выходных таблиц можно применить автоматическое конвертирование данных из одного формата в другой (Excel).
Создание информационной системы финотдела является реальной задачей ОИС ТОО “БАК ”. Для ее выполнения создана группа, в состав которой входят специалист по финансовому учету, системный инженер по информационным потокам, специалист по удаленным БД, 2 программиста. Я разработал данный дипломный проект в составе этой группы во время практики.
Существующая система финансового учета имеет архив данных по всем операциям и различные отчетности за два года. Это огромный объем информации, который организован в виде электронных таблиц Excel. В этих таблицах данные хранятся в не типизированном виде. С другой стороны, БД системы клиент/сервер предполагает четкую структуризацию всех таблиц, строгое описание формата данных, которые будут в них храниться. Поэтому, если рассматривать возможность перевода всей старой информации из существующей системы в новую, единственным способом будет ручной ввод всех данных. Учитывая специфику работы автоматизированной системы, для этого придется отключать некоторые элементы автоматизации и внутреннего контроля, что для сохранения целостности данных потребует дополнительного программирования.
Существует 2 пути внедрения системы финансового учета в работу компании:
1 – перенести все данные из архивов и активных рабочих таблиц в БД новой системы. Это потребует дополнительного программирования, использования специально обученных операторов для ввода большого количества разнородных данных;
2 – перенести только активные данные, такие как незавершенные договора, все данные по операциям за незаконченный отчетный период, и т.д.
Первый путь предполагает необходимость использования старых данных для выполнения некоторых видов финансового анализа – таких как сравнение текущего состояния фирмы за аналогичный отчетный период. Второй способ позволит ввести систему в работу с минимальными издержками и с самого начала вести базу данных в единообразной манере.
Настоящее положение фирмы таково, что каждый год ставится задача понести как можно меньше убытков. В этом плане такие сложные виды анализа не являются актуальными, а более необходимой является задача улучшить управление финансовым учетом ценой рациональных затрат.
4. ЭКОНОМИЧЕСКАЯ ЧАСТЬ
Создание автоматизированной системы – это мероприятие в хозяйственной деятельности предприятия, которое является многоэтапным, зависящим от множества факторов и влияющим на все элементы производственной системы. Поэтому оно требует комплексного, системного подхода.