МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Межбанковский клиринг

    p> 3.2. Модуль « АРМ оператора клиринговой палаты»

    Модуль «АРМ оператора клиринговой палаты» устанавливается на сервере клиринговой палаты и обеспечивает добавление и удаление банков-участников клиринговой системы, прием, обработку платежных документов, проверку их на наличие ошибок и проведение окончательных взаиморасчетов между банками- членами клиринговой палаты. Кроме того, данный модуль инициирует начало клирингового сеанса, ведет статистику платежей и закрывает сеанс по истечению заданного срока. Работой модуля управляет один человек – оператор клиринговой палаты, наделенный особыми полномочиями.

    Главное окно модуля «АРМ оператора клиринговой палаты» выглядит следующим образом:

    Рис.3.1. Главное окно модуля «АРМ оператора клиринговой палаты».

    Пункт меню «Банки» содержит подпункты «Просмотреть» для просмотра списка текущих участников системы и удаления любого из них и
    «Зарегистрировать нового участника» для добавления новых банков. Список банков выглядит, как на Рис.3.2.


    Рис.3.2. Окно со списком банков-членов клиринговой палаты.

    При выборе подпункта «Регистрация нового участника» на экран выводится диалоговое окно для ввода необходимой информации об участнике.
    Его вид приведен на Рис.3.3.

    Рис.3.3. Окно регистрации нового банка.

    После выполнения регистрации на сервере новый банк-участник может запускать на своей рабочей станции модуль «АРМ оператора банка» и входить в систему указав необходимые имя пользователя и пароль.

    Пункт меню «Сообщения» содержит один элемент – подпункт
    «Просмотреть». При выборе этого подпункта на экран выводится диалоговое окно следующего вида:


    Рис. 3.4. Окно со списком полученных сообщений.

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

    Меню главного окна «Сеанс» содержит три подпункта «Начать сеанс»,
    «Завершить сеанс» и «Показать текущие позиции» для инициализации клирингового сеанса, его завершения и для просмотра текущих чистых позиций соответственно.

    3.2. Модуль « АРМ оператора банка»

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

    Главное окно модуля «АРМ оператора клиринговой палаты» выглядит следующим образом:


    Рис. 3.5. Главное окно модуля «АРМ оператора банка».

    Данное окно содержит два основных пункта меню «Клиринговый сеанс» и
    «Сообщения». Первый из них имеет два подпункта для входа в клиринговый сеанс и выхода из него соответственно. Наиболее важным является пункт меню
    «Сообщения». Он имеет подпункты «Отправить сообщение» и «Показать сообщения». При выборе подпункта «Отправить сообщение» на экран выводится диалоговое окно для ввода параметров сообщения. Его вид показан на Рис.
    3.6.


    Рис. 3.6. Диалоговое окно отправки платежного сообщения.

    Выбор подпункта «Показать сообщения» приводит к выводу на экран диалогового окна со списком сообщений, которые относятся к банку-владельцу запущенной копии модуля. Можно выбрать для показа входящие платежи, исходящие платежи или оба типа одновременно. Показываются лишь те сообщения, которые были подтверждены клиринговой палатой в модуле «АРМ оператора клиринговой палаты». Вид этого окна приведен на Рис. 3.7.


    Рис 3.7. Окно со списком подтвержденных сообщений.

    ЗАКЛЮЧЕНИЕ

    В данном дипломном проекте освещены проблемы межбанковского клиринга и методы их решения, приведены реальные модели клиринговых систем. Кроме того, поставлена, математически сформулирована и решена проблема оптимизации важнейшего параметра клирингового цикла – лага клиринга. На основе реальных статистических данных получена статистическая оценка искомого параметра. Также приводится математическая модель обобщения полученных результатов для максимизации прибыли каждого из участников клиринговой системы.

    Существенной частью работы в дипломном проекте является разработка пакета программных продуктов «Система межбанковского клиринга». Этот программный продукт является попыткой комплексной автоматизации клирингового процесса. Пакет полностью готов для тестового использования и сбора статистической информации, планируется его доработка в областях сохранности целостности данных, управления доступом и оптимизации производительности до уровня реальной системы.

    СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


    1. Березина М.П., Крупнов Ю.С. Межбанковские расчеты. – М.: АО

    “Финстатинформ”, 1993.-142с.
    2. Тосунян Г.А. Клиринг и межбанковские финансовые операции: основные понятия и финансовые инструменты. – М.: “Дело”, 1994.-56с.
    3. Тосунян Г.А. Операционные технологии межбанковского финансового рынка. –

    М.: “Дело”, 1994.-122с.
    4. Усоскин В.М. Современный коммерческий банк: управление и операции. – М.:

    ИПЦ “Вазар-Ферро”, 1994.-320с.
    5. Каллаур П.В. Осуществление межбанковских расчетов по прочим платежам //

    Банкаўскі веснік – 1998. №1.
    6. Жуков В.В. Модернизация платежной системы Беларуси // Банкаўскі веснік –

    1997. №9. – С.3-6.

    ПРИЛОЖЕНИЕ 1.

    SQL-КОД ППП «СИСТЕМА МЕЖБАНКОВСКОГО КЛИРИНГА»

    ----------------------------------------------------
    -- Модуль Banks
    -- Содержимое :

    -- 1. Sequence BankID_Seq
    -- 2. Table Banks
    ----------------------------------------------------

    PROMPT Creating sequence BankID_Seq...

    -- Последовательность уникальных идентификаторов для банков-участников
    CREATE SEQUENCE BankID_Seq
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 99999999
    MINVALUE 1
    NOCACHE
    CYCLE;


    PROMPT Creating table Banks...

    -- Таблица банков, зарегистрированных в клиринговой палате
    CREATE TABLE Banks
    (
    BankID Number(8) -- Индентификационный № банка

    CONSTRAINT bankno_pk PRIMARY KEY,
    BankName VARCHAR2(100) NOT NULL -- Наименование банка

    CONSTRAINT bankname UNIQUE,
    UserName VARCHAR(20) NOT NULL -- Имя пользователя для входа

    CONSTRAINT username UNIQUE
    );

    -----------------------------------------------
    -- Модуль BankState
    -- Таблица состояния банков-участников в текущем сеансе
    -----------------------------------------------

    PROMPT Creating table BankState...

    CREATE TABLE BankState
    (
    BankID NUMBER(8) -- Идентификатор банка

    CONSTRAINT sessionbankid_fk REFERENCES Banks ON DELETE CASCADE,
    BankStatus NUMBER(3) NOT NULL -- Статус банка в текущем сеансе
    );

    -----------------------------------------------
    -- Пакет ClientUtils
    -- Интерфейс модуля "АРМ оператора банка"
    -----------------------------------------------

    PROMPT Creating package ClientUtils...

    CREATE OR REPLACE PACKAGE ClientUtils
    AS

    -- Возвращает флаг состояния текущей сессии
    FUNCTION GetSessionStatus RETURN INT;


    -- Процедура начала клирингового сеанса для банка-участника
    FUNCTION StartBankSession(aBankID IN INT) RETURN INT;


    -- Процедура завершения клирингового сеанса для банка-участника
    PROCEDURE StopBankSession(aBankID IN INT);


    -- Возвращает уникальный номер вызвавшего банка
    FUNCTION GetOurID RETURN INT;


    -- Возвращает окончательног сальдо банка
    FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT;

    -- Процедура отсылки в клиринговую палату платежа в "электронном" виде
    PROCEDURE SendMessage(aSourceBankID IN INT, aDebitBankID IN INT, aCreditBankID IN INT, aAmount IN INT);

    END ClientUtils;

    /
    SHOW ERROR;

    -----------------------------------------------
    -- Пакет процедур для работы банков-клиентов клиринговой палаты
    -----------------------------------------------

    PROMPT Creating package body ClientUtils...

    CREATE OR REPLACE PACKAGE BODY ClientUtils
    AS

    -- Функция возвращает флаг состояния текущей сессии

    FUNCTION GetSessionStatus RETURN INT
    IS
    BEGIN

    RETURN ServerUtils.SessionState;

    END GetSessionStatus;


    -- Процедура подключения банка к очередной сессии клиринговой палаты
    -- Выполняется каждый рабочий день в определенное время после выполнения
    -- на сервере КП процедуры инициализации клирингового сеанса

    FUNCTION StartBankSession(aBankID IN INT) RETURN INT
    IS
    BEGIN

    IF ServerUtils.SessionState = GlobalConst.cSessionActive THEN

    UPDATE BankState

    SET BankStatus = GlobalConst.cBankWork

    WHERE BankID = aBankID;

    END IF;

    RETURN ServerUtils.SessionState;

    END StartBankSession;


    -- Процедура выхода банка из текущего клирингового сеанса
    -- Выполняется кажый день в определенное время до закрытия сеанса
    -- на сервере КП

    PROCEDURE StopBankSession(aBankID IN INT)
    IS
    BEGIN

    UPDATE BankState

    SET BankStatus = GlobalConst.cBankStopWork

    WHERE BankId = aBankID;

    END StopBankSession;


    -- Функция возвращает уникальный номер вызывающего банка

    FUNCTION GetOurID RETURN INT
    IS

    Res INT;

    BEGIN

    SELECT BankID INTO Res FROM Banks

    WHERE UserName = USER;

    END GetOurID;


    -- Функция возвращает чистую позицию банка по окончанию сеанса

    FUNCTION GetFinalSaldo(aBankID IN INT) RETURN INT
    IS

    aSaldo INT;

    BEGIN

    BEGIN

    SELECT DebitPos-CreditPos INTO aSaldo FROM Results

    WHERE BankID = aBankID;

    EXCEPTION

    WHEN No_Data_Found THEN aSaldo := NULL;

    END;

    RETURN aSaldo;

    END GetFinalSaldo;


    -- Процедура отсылки на сервер КП "электронного" платежа

    PROCEDURE SendMessage(aSourceBankID IN INT, aDebitBankID IN INT, aCreditBankID IN INT, aAmount IN INT)
    IS

    aMsgID INT;

    BEGIN

    SELECT Msg_Seq.NextVal INTO aMsgID FROM Dual;

    INSERT INTO Messages

    VALUES (aMsgID, aSourceBankID, aDebitBankID, aCreditBankID, aAmount, GlobalConst.cMsgNotProcessed);

    END SendMessage;

    END ClientUtils;

    /
    SHOW ERROR;

    -----------------------------------------------
    -- Пакет CommonUtils
    -- Интерфейс общих подпрограмм
    -----------------------------------------------

    PROMPT Creating package CommonUtils...

    CREATE OR REPLACE PACKAGE CommonUtils
    AS

    -- Возвращает уникальный номер банка по его имени
    FUNCTION GetBankID(aBankName IN VARCHAR2) RETURN INT;


    -- Возвращает текущее дебетовое сальдо
    FUNCTION GetCurrentDebitSaldo(aBankID IN INT) RETURN INT;


    -- Возвращает текущее кредитовое сальдо
    FUNCTION GetCurrentCreditSaldo(aBankID IN INT) RETURN INT;

    END CommonUtils;

    /
    SHOW ERROR;

    -----------------------------------------------
    -- Процедуры и функции общего пользования
    -----------------------------------------------

    PROMPT Creating package CommonUtils...

    CREATE OR REPLACE PACKAGE BODY CommonUtils
    AS


    -- Возвращает уникальный идентификатор банка-участника по его имени

    FUNCTION GetBankID(aBankName IN VARCHAR2) RETURN INT
    IS

    Res INT;

    BEGIN

    BEGIN

    SELECT BankID INTO Res FROM Banks

    WHERE BankName = aBankName;

    EXCEPTION

    WHEN No_Data_Found THEN Res := NULL;

    END;

    RETURN Res;

    END GetBankID;


    -- Возвращает текущее дебетовое сальдо банка-участника

    FUNCTION GetCurrentDebitSaldo(aBankID IN INT) RETURN INT
    IS

    Res INT;

    BEGIN

    BEGIN

    SELECT DebitPos INTO Res FROM TmpRes

    WHERE BankID = aBankID;

    EXCEPTION

    WHEN No_Data_Found THEN

    Res := 0;

    END;

    RETURN Res;

    END GetCurrentDebitSaldo;


    -- Возвращает текущее кредитовое сальдо банка-участника

    FUNCTION GetCurrentCreditSaldo(aBankID IN INT) RETURN INT
    IS

    Res INT;

    BEGIN

    BEGIN

    SELECT CreditPos INTO Res FROM TmpRes

    WHERE BankID = aBankID;

    EXCEPTION

    WHEN No_Data_Found THEN

    Res := 0;

    END;

    RETURN Res;

    END GetCurrentCreditSaldo;

    END CommonUtils;

    /
    SHOW ERROR;

    --------------------------------------------------------
    -- Модуль содержит глобальные константы
    --------------------------------------------------------

    PROMPT Creating package GlobalConst

    CREATE OR REPLACE PACKAGE GlobalConst
    AS

    cStatusClass CONSTANT INT := -1;

    cBankWork CONSTANT INT := 1; cBankStopWork CONSTANT INT := 2; cBankNotWork CONSTANT INT := 3;

    cMsgNotProcessed CONSTANT INT := 1; cMsgAccepted CONSTANT INT := 2; cMsgSourceError CONSTANT INT := 3; cMsgDebitError CONSTANT INT := 4; cMsgCreditError CONSTANT INT := 5; cMsgProcessed CONSTANT INT := 6;

    cSessionUnActive CONSTANT INT := 1; cSessionActive CONSTANT INT := 2;

    END GlobalConst;

    /
    SHOW ERROR;

    ------------------------------------------------------
    -- Модуль инициализации системы в СУБД Oracle 7.3.3
    ------------------------------------------------------

    CONNECT INTERNAL

    SPOOL createdb.log

    SET ECHO ON

    CREATE TABLESPACE "CLEARING" DATAFILE 'C:ORAWIN95DATABASEclearing.dbf'
    SIZE 5M REUSE DEFAULT STORAGE (INITIAL 10K NEXT 10K MINEXTENTS 1
    MAXEXTENTS 120 PCTINCREASE 0);

    CREATE USER "ALEX" IDENTIFIED BY "ALEX"
    DEFAULT TABLESPACE "CLEARING";

    GRANT "DBA" TO "ALEX" WITH ADMIN OPTION;
    GRANT UNLIMITED TABLESPACE to "ALEX" WITH ADMIN OPTION;
    GRANT SELECT ANY TABLE to "ALEX" WITH ADMIN OPTION;
    GRANT GRANT ANY ROLE to "ALEX" WITH ADMIN OPTION;
    GRANT CREATE ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
    GRANT DROP ANY SYNONYM to "ALEX" WITH ADMIN OPTION;
    GRANT EXECUTE ANY PROCEDURE to "ALEX";
    GRANT CREATE USER to "ALEX";
    GRANT ALTER USER to "ALEX";
    GRANT DROP USER to "ALEX";
    GRANT GRANT ANY PRIVILEGE to "ALEX";

    SPOOL OFF

    EXIT

    --------------------------------------------------
    -- Начальное создание объектов системы
    --------------------------------------------------

    PROMPT Creating databases and sequences...

    @@consts.pkg
    @@banks
    @@messages
    @@status
    @@statinit
    @@bnkstate
    @@results
    @@tmpres
    @@statist

    PROMPT Creating packages...

    @@srvrutil.pkg
    @@srvrutil.bdy

    @@clntutil.pkg
    @@clntutil.bdy

    @@commutil.pkg
    @@commutil.bdy

    -------------------------------------------------------------
    -- Таблица и последовательность для обработки сообщений
    -------------------------------------------------------------

    PROMPT Creating sequence Msg_Seq...

    CREATE SEQUENCE Msg_Seq
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 99999999
    MINVALUE 1
    NOCACHE
    CYCLE;

    PROMPT Creating table Messages...

    CREATE TABLE Messages
    (
    MessageID NUMBER(8) -- Номер сообщения

    CONSTRAINT message_pk PRIMARY KEY,
    SourceBankID NUMBER(8) -- Банк-источник сообщения

    CONSTRAINT sourcebank_fk REFERENCES Banks ON DELETE CASCADE,
    DebitBankID NUMBER(8) -- Банк-получатель

    CONSTRAINT debitbank_fk REFERENCES Banks ON DELETE CASCADE,
    CreditBankID NUMBER(8) -- Банк-плательщик

    CONSTRAINT creditbank_fk REFERENCES Banks ON DELETE CASCADE,
    Amount INT NOT NULL, -- Сумма
    MsgStatus INT NOT NULL -- Статус сообщения
    );

    --------------------------------------------------------------
    -- Таблица окончательных результатов клирингового сеанса
    --------------------------------------------------------------

    PROMPT Creating table Results...

    CREATE TABLE RESULTS
    (
    BankID NUMBER(8)

    CONSTRAINT resultbankid_fk REFERENCES Banks ON DELETE CASCADE,
    DebitPos INT,
    CreditPos INT
    );

    -------------------------------------------------------
    -- Интерфейс модуля "АРМ оператора клиринговой палаты"
    -------------------------------------------------------

    PROMPT Creating package ServerUtils...

    CREATE OR REPLACE PACKAGE ServerUtils
    AS

    SessionState INT DEFAULT GlobalConst.cSessionUnActive;

    PROCEDURE StartClearingSession;

    PROCEDURE StopClearingSession;


    FUNCTION GetActiveBanksCountInSession RETURN INT;

    -- Процедура регистрации банка-участника клиринговой системы
    FUNCTION RegisterBank(aBankName IN VARCHAR2, aUserName IN VARCHAR2, aPassword IN VARCHAR2) RETURN INT;

    PROCEDURE UnRegisterBank(aBankName IN VARCHAR2);

    -- Процедура выхода банка из клиринговой системы
    PROCEDURE UnRegisterBank(aBankID IN INT);


    FUNCTION CheckMessage(aMessageID IN INT) RETURN INT;

    PROCEDURE ConfirmMessage(aMessageID IN INT);


    END ServerUtils;

    /
    SHOW ERROR;

    -----------------------------------------------
    -- Процедуры и функции сервера КП
    -----------------------------------------------

    PROMPT Creating package body ServerUtils...

    CREATE OR REPLACE PACKAGE BODY ServerUtils
    AS


    -- Процедура инициализации клирингового сенса в клиринговой палате
    -- Выполняется каждый день в определенное время

    PROCEDURE StartClearingSession
    IS

    BEGIN

    DELETE FROM Messages;
    DELETE FROM BankState;
    DELETE FROM Results;
    DELETE FROM TmpRes;

    FOR x IN

    (

    SELECT BankID

    FROM Banks

    )
    LOOP

    INSERT INTO BankState (BankID, BankStatus)

    VALUES (x.BankID, GlobalConst.cBankNotWork);

    END LOOP;

    SessionState := GlobalConst.cSessionActive;

    END StartClearingSession;


    -- Процедура завершения клирингового сеанса
    -- Выполняется каждый день

    PROCEDURE StopClearingSession
    IS

    aDebitSum INT; aCreditSum INT;

    BEGIN

    SessionState := GlobalConst.cSessionUnActive;

    UPDATE BankState

    SET BankStatus = GlobalConst.cBankStopWork

    WHERE BankStatus = GlobalConst.cBankWork;

    FOR x IN

    (

    SELECT BankID

    FROM BankState

    WHERE BankStatus = GlobalConst.cBankStopWork

    )
    LOOP

    BEGIN

    SELECT Sum(Amount) INTO aDebitSum

    FROM Messages

    WHERE MsgStatus = GlobalConst.cMsgAccepted AND DebitBankID = x.BankID;

    EXCEPTION

    WHEN No_Data_Found THEN aDebitSum := 0;

    END;

    BEGIN

    SELECT Sum(Amount) INTO aCreditSum

    FROM Messages

    WHERE MsgStatus = GlobalConst.cMsgAccepted AND CreditBankID = x.BankID;

    EXCEPTION

    WHEN No_Data_Found THEN aCreditSum := 0;

    END;

    INSERT INTO Results(BankID, DebitPos, CreditPos)

    VALUES(x.BankID, aDebitSum, aCreditSum);

    END LOOP;


    INSERT INTO Statistics(ItemNo, WorkDay, BankID, DebitPos, CreditPos)

    SELECT Stat_Seq.NextVal, SYSDATE, BankID, DebitPos, CreditPos

    FROM Results;


    DELETE FROM Messages;
    DELETE FROM BankState;
    DELETE FROM Results;
    DELETE FROM TmpRes;

    END StopClearingSession;


    -- Возвращает количество активных участников текущего сеанса

    FUNCTION GetActiveBanksCountInSession RETURN INT

    IS

    Res INT;

    BEGIN

    BEGIN

    SELECT Count(*) INTO Res FROM BankState

    WHERE BankStatus = GlobalConst.cBankWork;

    EXCEPTION

    WHEN No_Data_Found THEN

    Res :=0;

    END;

    RETURN Res;

    END GetActiveBanksCountInSession;


    -- Регистрирует новый банк в клиринговой системе

    FUNCTION RegisterBank(aBankName IN VARCHAR2, aUserName IN VARCHAR2, aPassword IN VARCHAR2) RETURN INT

    IS

    Res INT;

    Cur INT;

    Col INT;

    BEGIN

    BEGIN

    SELECT BankID INTO Res FROM Banks

    WHERE BankName = aBankName;

    EXCEPTION

    WHEN No_Data_Found THEN

    SELECT BankID_Seq.NextVal INTO Res FROM Dual;

    INSERT INTO Banks(BankID, BankName, UserName)

    VALUES (Res, aBankName, aUserName);

    cur:=dbms_sql.open_cursor;

    dbms_sql.parse(cur,

    'CREATE USER '||aUserName||' IDENTIFIED BY '||aPassword, dbms_sql.v7);

    Col := dbms_sql.execute(Cur); dbms_sql.parse(cur,

    'GRANT CREATE SESSION to '||aUserName, dbms_sql.v7);

    Col := dbms_sql.execute(Cur); dbms_sql.close_cursor(cur);

    END;

    RETURN Res;

    END RegisterBank;


    -- Удаляет банк из числа участников по его номеру

    PROCEDURE UnRegisterBank(aBankID IN INT)
    IS

    BEGIN

    DELETE FROM Banks

    WHERE BankID = aBankID;

    END UnRegisterBank;


    -- Удаляет банк из числа участников по его имени

    PROCEDURE UnRegisterBank(aBankName IN VARCHAR2)
    IS

    BEGIN

    DELETE FROM Banks

    WHERE BankName = aBankName;

    END UnRegisterBank;


    -- Проверяет допустимость поступившего платежного документа

    FUNCTION CheckMessage(aMessageID IN INT) RETURN INT
    IS

    aMsgStatus INT; aBankStatus INT; aSourceBank INT; aDebitBank INT; aCreditBank INT;

    BEGIN

    SELECT SourceBankID INTO aSourceBank FROM Messages

    WHERE MessageID = aMessageID;

    SELECT DebitBankID INTO aDebitBank FROM Messages

    WHERE MessageID = aMessageID;

    SELECT CreditBankID INTO aCreditBank FROM Messages

    WHERE MessageID = aMessageID;

    BEGIN

    SELECT BankStatus INTO aBankStatus FROM BankState

    WHERE BankID = aSourceBank;

    EXCEPTION

    WHEN No_Data_Found THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgSourceError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgSourceError;

    END;

    IF aBankStatus = GlobalConst.cBankNotWork THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgSourceError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgSourceError;

    END IF;

    BEGIN

    SELECT BankStatus INTO aBankStatus FROM BankState

    WHERE BankID = aDebitBank;

    EXCEPTION

    WHEN No_Data_Found THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgDebitError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgDebitError;

    END;

    IF aBankStatus = GlobalConst.cBankNotWork THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgDebitError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgDebitError;

    END IF;

    BEGIN

    SELECT BankStatus INTO aBankStatus FROM BankState

    WHERE BankID = aCreditBank;

    EXCEPTION

    WHEN No_Data_Found THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgCreditError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgCreditError;

    END;

    IF aBankStatus = GlobalConst.cBankNotWork THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgCreditError

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgCreditError;

    END IF;

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgProcessed

    WHERE MessageID = aMessageID;

    RETURN GlobalConst.cMsgProcessed;

    END CheckMessage;


    -- Подтверждает платежный документ, вызывается при наличии необходимых
    -- документов

    PROCEDURE ConfirmMessage(aMessageID IN INT)
    IS

    aMsgStatus INT; aTmpID INT; aAmount INT; aDebitBank INT; aCreditBank INT;

    BEGIN

    SELECT MsgStatus, DebitBankID, CreditBankID

    INTO aMsgStatus, aDebitBank, aCreditBank

    FROM Messages

    WHERE MessageID = aMessageID;

    IF aMessageID = GlobalConst.cMsgProcessed THEN

    UPDATE Messages

    SET MsgStatus = GlobalConst.cMsgAccepted

    WHERE MessageID = aMessageID;

    SELECT Amount INTO aAmount FROM Messages

    WHERE MessageID = aMessageID;

    BEGIN

    SELECT BankID INTO aTmpID FROM TmpRes

    WHERE BankID = aDebitBank;

    EXCEPTION

    WHEN No_Data_Found THEN

    INSERT INTO TmpRes (BankID, DebitPos, CreditPos)

    VALUES (aDebitBank, 0, 0);

    END;

    UPDATE TmpRes

    SET DebitPos = DebitPos + aAmount

    WHERE BankID = aDebitBank;

    BEGIN

    SELECT BankID INTO aTmpID FROM TmpRes

    WHERE BankID = aCreditBank;

    EXCEPTION

    WHEN No_Data_Found THEN

    INSERT INTO TmpRes (BankID, DebitPos, CreditPos)

    VALUES (aCreditBank, 0, 0);

    END;

    UPDATE TmpRes

    SET CreditPos = CreditPos - aAmount

    WHERE BankID = aCreditBank;

    END IF;

    END ConfirmMessage;

    END ServerUtils;

    /
    SHOW ERROR;

    ---------------------------------------------------------
    -- Таблица и последовательность для ведения статистики
    ---------------------------------------------------------

    PROMPT Create table Statistics...

    PROMPT Creating sequence Stat_Seq...

    CREATE SEQUENCE Stat_Seq
    INCREMENT BY 1
    START WITH 1
    MAXVALUE 99999999
    MINVALUE 1
    NOCACHE
    CYCLE;

    CREATE TABLE Statistics
    (
    ItemNo NUMBER(8) -- Номер элемента выборки

    CONSTRAINT itemno_pk PRIMARY KEY,
    WorkDay DATE, -- Дата и время платежа
    BankID NUMBER(8) -- Номер банка
    DebitPos INT, -- Дебетовая позиция
    CreditPos INT -- Кредитовая позиция
    );

    -----------------------------------------------
    -- Заполнение таблицы классификаторов
    -----------------------------------------------

    PROMPT Inserting data into table Status ...

    BEGIN

    DELETE FROM Status WHERE StatusClass = 1;
    INSERT INTO Status VALUES (1, GlobalConst.cStatusClass,
    'Статус банка в текущем сеансе');
    INSERT INTO Status VALUES (1, GlobalConst.cBankWork,
    'Банк участвует в текущем сеансе');
    INSERT INTO Status VALUES (1, GlobalConst.cBankStopWork,
    'Банк закончил текущий сенс');
    INSERT INTO Status VALUES (1, GlobalConst.cBankNotWork,
    'Банк не участвует в текущем сенсе');
    COMMIT;


    DELETE FROM Status WHERE StatusClass = 2;
    INSERT INTO Status VALUES (2, GlobalConst.cStatusClass,
    'Статус сообщения о платеже');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgNotProcessed,
    'Сообщение не обработано');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgSourceError,
    'Банк-источник не работает');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgDebitError,
    'Банк по дебету счета не работает');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgCreditError,
    'Банк по кредиту счета не работает');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgProcessed,
    'Сообщение обработано и требует документального подтверждения');
    INSERT INTO Status VALUES (2, GlobalConst.cMsgAccepted,
    'Сообщение обработано и принято в систему взаимозачета');

    COMMIT;

    END;
    /

    -----------------------------------------------
    -- Таблица классификаторов
    -----------------------------------------------

    PROMPT Create table Status ...

    CREATE TABLE Status
    (

    StatusClass NUMBER(3),

    StatusNo NUMBER(3),

    StatusText VARCHAR2(70) NOT NULL,

    CONSTRAINT status_pk PRIMARY KEY (StatusClass, StatusNo)
    );

    -------------------------------------------------------
    -- Таблица текущих результатов клирингового сеанса
    -------------------------------------------------------

    PROMPT Creating table TmpRes...

    CREATE TABLE TmpRes
    (
    BankID NUMBER(8)

    CONSTRAINT tmpresbankid_fk REFERENCES Banks ON DELETE CASCADE,
    DebitPos INT,
    CreditPos INT
    );

    ---------------------------------------------------
    -- Удаление объектов системы
    ---------------------------------------------------

    PROMPT Deleting databases...

    SET ECHO ON;

    DROP SEQUENCE Stat_Seq;
    DROP TABLE Statistics;
    DROP TABLE BankState;
    DROP TABLE Status;
    DROP SEQUENCE Msg_Seq;
    DROP TABLE Messages;
    DROP TABLE Results;
    DROP TABLE TmpRes;
    DROP SEQUENCE BankID_Seq;
    DROP TABLE Banks;


    PROMPT Deleting packages...

    DROP PACKAGE BODY ServerUtils;
    DROP PACKAGE ServerUtils;

    DROP PACKAGE BODY ClientUtils;
    DROP PACKAGE ClientUtils;

    DROP PACKAGE BODY CommonUtils;
    DROP PACKAGE CommonUtils;

    SET ECHO OFF;

    ----------------------------------------------------------------

    -----------------------
    [pic]

    [pic]

    [pic]



    Страницы: 1, 2, 3, 4


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.