Автоматизация оказания услуг проектным специализированным бюро

Проект и реализация на основе клиент-серверных технологий базы данных работ (услуг), выполняемых МГКУПП "Проектное специализированное бюро". Автоматизация расчета стоимости работ. Организация поиска заказа, контроля выполнения и оплаты, отчетности.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.02.2017
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

SET @Money = -@Money

END

ELSE SET @minus = ''

SET @Source = floor( @Money )

SET @sum = @Minus + dbo.SumStr( @source, 1, 'рубль', 'рубля', 'рублей')

SET @sum = Upper( SubString( @sum,1,1) ) + SubString( @sum, 2, len(@sum)-1)

RETURN @sum

END

17. Преобразование числа из цифрого вида в символьное.

CREATE FUNCTION SumStr(@Source bigint, @Rod int, @w1 varchar(40), @w2to4 varchar(40), @w5to10 varchar(40) )

RETURNS varchar(4000)

AS

BEGIN

DECLARE @Summa varchar(4000)

DECLARE @TempValue bigint

IF @Source = 0 BEGIN

SET @Summa = 'ноль ' + RTrim(@w5to10)

RETURN @Summa

END

SELECT @TempValue = @Source, @Summa = ''

-- единицы

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, @Rod, @w1, @w2to4, @w5to10)

IF @TempValue = 0 RETURN @Summa

-- тысячи

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 2, 'тысяча', 'тысячи', 'тысяч')

IF @TempValue = 0 RETURN @Summa

-- миллионы

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'миллион', 'миллиона', 'миллионов')

IF @TempValue = 0 RETURN @Summa

-- миллиардов

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'миллиард', 'миллиарда', 'миллиардов')

IF @TempValue = 0 RETURN @Summa

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'трилллион', 'триллиона', 'триллионов')

RETURN @Summa

END

18.Формирования строки для трехзначного числа.

CREATE FUNCTION SumStrThree (@Summa varchar(4000), @TempValue bigint, @Rod int, @w1 varchar(40), @w2to4 varchar(40), @w5to10 varchar(40))

RETURNS @tab TABLE (Txt varchar(4000), Rest bigint)

AS

BEGIN

DECLARE @Rest int, @Rest1 int, @ENDWord varchar(100), @s1 varchar(40), @s10 varchar(40), @s100 varchar(40)

SET @Rest = @TempValue % 1000

SET @TempValue = @TempValue / 1000

IF @Rest = 0

BEGIN -- последние три знака нулевые

IF @Summa = ''

SET @Summa = @w5to10 + ' '

INSERT INTO @tab

SELECT @Summa, @TempValue

RETURN

END

-- начинаем подсчет с @Rest

SET @ENDWord = @w5to10

-- сотни

SELECT @s100 = CASe @Rest / 100

WHEN 0 THEN ''

WHEN 1 THEN 'сто '

WHEN 2 THEN 'двести '

WHEN 3 THEN 'триста '

WHEN 4 THEN 'четыреста '

WHEN 5 THEN 'пятьсот '

WHEN 6 THEN 'шестьсот '

WHEN 7 THEN 'семьсот '

WHEN 8 THEN 'восемьсот '

WHEN 9 THEN 'девятьсот '

END

-- десятки

SET @Rest = @Rest % 100

SET @Rest1 = @Rest / 10

SET @s1 = ''

SELECT @s10 = CASe @Rest1

WHEN 0 THEN ''

WHEN 1 THEN

CASe @Rest

WHEN 10 THEN 'десять '

WHEN 11 THEN 'одиннадцать '

WHEN 12 THEN 'двенадцать '

WHEN 13 THEN 'тринадцать '

WHEN 14 THEN 'четырнадцать '

WHEN 15 THEN 'пятнадцать '

WHEN 16 THEN 'шестнадцать '

WHEN 17 THEN 'семнадцать '

WHEN 18 THEN 'восемнадцать '

WHEN 19 THEN 'девятнадцать '

END

WHEN 2 THEN 'двадцать '

WHEN 3 THEN 'тридцать '

WHEN 4 THEN 'сорок '

WHEN 5 THEN 'пятьдесят '

WHEN 6 THEN 'шестьдесят '

WHEN 7 THEN 'семьдесят '

WHEN 8 THEN 'восемьдесят '

WHEN 9 THEN 'девяносто '

END

IF @Rest1 <> 1

BEGIN -- единицы

IF @Rest % 10 = 1

SET @ENDWord = @w1

ELSE IF @Rest % 10 between 2 and 4

SET @ENDWord = @w2to4

SELECT @s1 = CASe @Rest % 10

WHEN 0 THEN ''

WHEN 1 THEN

CASe @Rod

WHEN 1 THEN 'один '

WHEN 2 THEN 'одна '

WHEN 3 THEN 'одно '

END

WHEN 2 THEN

CASe

WHEN @Rod = 2

THEN 'две '

ELSE 'два '

END

WHEN 3 THEN 'три '

WHEN 4 THEN 'четыре '

WHEN 5 THEN 'пять '

WHEN 6 THEN 'шесть '

WHEN 7 THEN 'семь '

WHEN 8 THEN 'восемь '

WHEN 9 THEN 'девять '

END

END

-- сборка строки

INSERT INTO @Tab

SELECT Txt = RTrim(RTrim( @s100 + @s10 + @s1 + @ENDWord) + ' ' + @Summa), @TempValue

RETURN

END

19. Контроль срока на исправление нарушения, дается семь дней, иначе направляется предписание. Возвращает колличество дней на исправление.

CREATE FUNCTION UvedomlenieOut (@date_start datetime)

RETURNS int

AS

BEGIN

DECLARE @дней_исправить int

SET @дней_исправить=7

RETURN (@дней_исправить-DATEDIFF(day, @date_start, GETDATE()))

END

2.4 T-SQL-определения курсоров

1. Курсор для поиска повторных записей в справочнике, используется в процедуре Заказчики_УНП_повтор_cur.

/*Создаём локальный курсор, который будет существовать до завершения выполнения процедуры*/

DECLARE customer_cursor CURSOR LOCAL FOR SELECT

/*Какие поля будут показаны в курсоре*/

УНП,Наименование_краткое

/*Из какой таблицы выбираются данные*/

FROM [Заказчики]

WHERE УНП<>'' --унп=NULL

ORDER BY УНП

/*открываем локальный курсор*/

OPEN customer_cursor

FETCH NEXT FROM customer_cursor INTO @unp, @customer

WHILE @@FETCH_STATUS=0

BEGIN

/* программный код*/

/* переход к следующей записи курсора*/

FETCH NEXT FROM customer_cursor INTO @unp, @customer

END

/*закрываем курсор*/

CLOSE customer_cursor

/*освобождаем курсор*/

DEALLOCATE customer_cursor

END

2. Курсор для поиска и удаления повторных записей в справочнике заказчиков, используется в процедуре Заказчики_УНП_чистка_cur.

DECLARE customer_cursor CURSOR LOCAL FOR SELECT УНП,id_customer

FROM [Заказчики]

WHERE УНП<>'' --унп=NULL

ORDER BY УНП

OPEN customer_cursor

FETCH NEXT FROM customer_cursor INTO @unp, @id_customer

WHILE @@FETCH_STATUS=0

BEGIN

/* программный код*/

/* переход к следующей записи курсора*/

FETCH NEXT FROM customer_cursor

INTO @unp, @id_customer

END

CLOSE customer_cursor

DEALLOCATE customer_cursor

END

3. Курсор для подсчета прибыли от деятельности отделов организации в процедуре Отделы_Прибыль_cur

DECLARE TopOtdel CURSOR LOCAL FOR SELECT номер_отдела, отдел

FROM Отделы ORDER BY номер_отдела

OPEN TopOtdel

FETCH NEXT FROM TopOtdel INTO @номер_отдела, @отдел

WHILE @@FETCH_STATUS=0

BEGIN

/* программный код*/

/* переход к следующей записи курсора*/

FETCH NEXT FROM TopOtdel INTO @номер_отдела, @отдел

END

CLOSE TopOtdel

DEALLOCATE TopOtdel

END

4. Курсор для получения информации о поступлении денежных средств по услугам в процентном сравнении по отношению к предыдущему год, используется в процедуре Услуги_Рост_cur.

DECLARE Usluga CURSOR LOCAL FOR

SELECT id_service, SUM(сумма_договора)AS sum_cur FROM Договора

WHERE YEAR(дата_договора)= YEAR (GETDATE()) --текущий год

GROUP BY id_service

OPEN Usluga

FETCH NEXT FROM Usluga INTO @id_service, @sum_cur

WHILE @@FETCH_STATUS=0

BEGIN

/* программный код*/

/* переход к следующей записи курсора*/

FETCH NEXT FROM Usluga INTO @id_service, @sum_cur

END

CLOSE usluga

DEALLOCATE usluga

END

5. Курсор для функции подсчета прибыли от деятельности отдела BigMoney_cur()

DECLARE Counter CURSOR LOCAL FOR SELECT сумма_договора FROM Договора

WHERE номер_отдела=@номер_отдела

OPEN Counter

FETCH NEXT FROM Counter INTO @сумма_договора

WHILE @@FETCH_STATUS=0

BEGIN

/* программный код*/

/* переход к следующей записи курсора*/

FETCH NEXT FROM Counter INTO @сумма_договора

END

CLOSE Counter

DEALLOCATE Counter

END

3. ПРОЕКТИРОВАНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ. УПРАВЛЕНИЕ АВТОРИЗАЦИЕЙ, УПРАВЛЕНИЕ РОЛЯМИ, УПРАВЛЕНИЕ РАЗРЕШЕНИЯМИ СРЕДСТВАМИ TRANSACT SQL

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

Чтобы пользовательское учетное имя получило доступ к БД, одного ввода имени пользователя и пароля недостаточно. Должно быть разрешение на исполнение SQL-выражений или на работу с объектами.

Назначение разрешений каждому пользователю в отдельности занимает много времени при сопровождении БД со средним и большим числом пользователей. Для облегчения операций по назначению разрешений пользователям SQL Server 2000 поддерживает роли SQL Server.

Роли создаются и сопровождаются в рамках SQL Server. Существует два типа ролей: стандартные и прикладные. Стандартным ролям (standard roles) назначаются привилегии, которые могут наследоваться пользователями, получающими членство в роли. Стандартные роли могут содержать все типы учетных имен: учетные записи пользователей и групп Windows, идентификаторы SQL Server и другие стандартные роли.

Для упрощения администрирования БД и самого сервера в SQL Server предусмотрен ряд стандартных предопределенных ролей. В основном их можно разделить на две категории: фиксированные роли на уровне сервера, или серверные роли (fixed server role), и фиксированные роли на уровне БД (fixed database role). Членство в фиксированных ролях на уровне сервера дает возможность администрирования сервера. Члены фиксированных ролей на уровне БД могут администрировать некоторые БД.

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

4. ПРОКОММЕНТИРОВАННЫЙ СКРИПТ СОЗДАНИЯ БАЗЫ ДАННЫХ

-- Definition for table Услуги :

CREATE TABLE [dbo].[Услуги] (

[id_service] int IDENTITY(1, 1) NOT NULL,

[услуга] varchar(250) COLLATE Cyrillic_General_CI_AS NOT NULL,

[описание] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[тариф] money NULL,

[kod_servise] varchar(10) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

GO

-- Definition for table Заказчики :

CREATE TABLE [dbo].[Заказчики] (

[id_customer] int IDENTITY(1, 1) NOT NULL,

[наименование_полное] varchar(180) COLLATE Cyrillic_General_CI_AS NOT NULL,

[руководитель_ип] text COLLATE Cyrillic_General_CI_AS NULL,

[адрес_почта] varchar(80) COLLATE Cyrillic_General_CI_AS NULL,

[адрес_электронный] varchar(30) COLLATE Cyrillic_General_CI_AS NULL,

[сайт] varchar(30) COLLATE Cyrillic_General_CI_AS NULL,

[телефон] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[мобильный] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[наименование_краткое] varchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL,

[kod] char(5) COLLATE Cyrillic_General_CI_AS NULL,

[руководитель_рп] text COLLATE Cyrillic_General_CI_AS NULL,

[счет_в_банке] varchar(120) COLLATE Cyrillic_General_CI_AS NULL,

[лицензия_ИП] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[УНП] varchar(10) COLLATE Cyrillic_General_CI_AS NULL,

[ОКПО] varchar(10) COLLATE Cyrillic_General_CI_AS NULL,

[основание] text COLLATE Cyrillic_General_CI_AS NULL,

[ID] char(9) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

TEXTIMAGE_ON [PRIMARY]

GO

-- Definition for table Сотрудники :

CREATE TABLE [dbo].[Сотрудники] (

[in_rn] varchar(14) COLLATE Cyrillic_General_CI_AS NOT NULL,

[ФИО] varchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Подразделения :

CREATE TABLE [dbo].[Подразделения] (

[номер_подразделения] int NOT NULL,

[подразделение] varchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Отделы :

CREATE TABLE [dbo].[Отделы] (

[номер_отдела] int NOT NULL,

[отдел] varchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL,

[in_rn] varchar(14) COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Должности :

CREATE TABLE [dbo].[Должности] (

[id_staff] int IDENTITY(1, 1) NOT NULL,

[должность] varchar(80) COLLATE Cyrillic_General_CI_AS NOT NULL,

[in_rn] varchar(14) COLLATE Cyrillic_General_CI_AS NOT NULL,

[номер_подразделения] int NOT NULL,

[номер_отдела] int NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Шаблоны_договоров :

CREATE TABLE [dbo].[Шаблоны_договоров] (

[id_pattern] int IDENTITY(0, 1) NOT NULL,

[шаблон] varchar(30) COLLATE Cyrillic_General_CI_AS NOT NULL,

[файл] varchar(50) COLLATE Cyrillic_General_CI_AS NULL,

[настройка_формы] varchar(50) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

GO

--определение попадание даты в указанный диапозон от текущей даты

CREATE FUNCTION [dbo].DateTrue (@data datetime)

RETURNS int

AS

BEGIN

DECLARE @диапозон int

SET @диапозон = 10

DECLARE @i int

IF (DATEDIFF(year, @data, GETDATE()) <= @диапозон) OR (@data IS NULL) SET @i=1

ELSE SET @i=0

RETURN @i

END

GO

-- Definition for table Договора_Deleted :

CREATE TABLE [dbo].[Договора_Deleted] (

[id_contract] int NULL,

[номер_договора] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[дата_договора] datetime NULL,

[срок_исполнения] int NULL,

[сумма_договора] money NULL,

[сумма_оплачено] money NULL,

[акт_подписан] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[отказ] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[примечание] text COLLATE Cyrillic_General_CI_AS NULL,

[id_service] int NULL,

[id_pattern] int NULL,

[id_customer] int NULL,

[id_staff] int NULL,

[номер_отдела] int NULL,

[id_pasport] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_auction] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_topographical] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_project] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[дата_начала] datetime NULL,

[НДС] int NULL,

[предоплата_процент] int NULL,

[описание_работ] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[дата_исполнения] datetime NULL,

[договор_забрали] datetime NULL,

[договор_вернули] datetime NULL,

[акт_оплачен] datetime NULL,

[UpdateDate] datetime NULL,

[UpdatedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL,

[DeleteDate] datetime NULL,

[DeletedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

TEXTIMAGE_ON [PRIMARY]

GO

-- Definition for table Договора :

CREATE TABLE [dbo].[Договора] (

[id_contract] int IDENTITY(1, 1) NOT NULL,

[номер_договора] varchar(20) COLLATE Cyrillic_General_CI_AS CONSTRAINT [DF__Договора__номер___32AB8735] DEFAULT 'б/н' NOT NULL,

[дата_договора] datetime NULL,

[срок_исполнения] int CONSTRAINT [DF__Договора__срок_и__2A164134] DEFAULT 30 NOT NULL,

[сумма_договора] money CONSTRAINT [DF__Договора__сумма___30C33EC3] DEFAULT 0 NULL,

[сумма_оплачено] money CONSTRAINT [DF__Договора__сумма___31B762FC] DEFAULT 0 NULL,

[акт_подписан] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[отказ] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[примечание] text COLLATE Cyrillic_General_CI_AS NULL,

[id_service] int CONSTRAINT [DF__Договора__id_ser__2BFE89A6] DEFAULT 88 NOT NULL,

[id_pattern] int CONSTRAINT [DF__Договора__id_pat__3864608B] DEFAULT 1 NULL,

[id_customer] int NOT NULL,

[id_staff] int CONSTRAINT [DF__Договора__id_sta__2CF2ADDF] DEFAULT 1 NOT NULL,

[номер_отдела] int CONSTRAINT [DF__Договора__номер___2FCF1A8A] DEFAULT 0 NOT NULL,

[id_pasport] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_auction] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_topographical] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_project] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[дата_начала] datetime NULL,

[НДС] int CONSTRAINT [DF__Договора__НДС__2B0A656D] DEFAULT 20 NOT NULL,

[предоплата_процент] int CONSTRAINT [DF__Договора__предоп__2EDAF651] DEFAULT 100 NOT NULL,

[описание_работ] text COLLATE Cyrillic_General_CI_AS NULL,

[дата_исполнения] datetime NULL,

[договор_забрали] datetime NULL,

[договор_вернули] datetime NULL,

[акт_оплачен] datetime NULL,

[UpdateDate] datetime NULL,

[UpdatedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

TEXTIMAGE_ON [PRIMARY]

GO

-- Definition for table Префикс :

CREATE TABLE [dbo].[Префикс] (

[id_ntu] int IDENTITY(1, 1) NOT NULL,

[вид] nvarchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Улицы :

CREATE TABLE [dbo].[Улицы] (

[id_street] int IDENTITY(1, 1) NOT NULL,

[улица] nvarchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL,

[id_admdel] int NOT NULL,

[id_ntu] int NOT NULL)

ON [PRIMARY]

GO

-- Definition for table Нормы_закона :

CREATE TABLE [dbo].[Нормы_закона] (

[id_norma] int IDENTITY(1, 1) NOT NULL,

[норма] text COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

TEXTIMAGE_ON [PRIMARY]

GO

-- Definition for table Нарушения_рекламы_Deleted :

CREATE TABLE [dbo].[Нарушения_рекламы_Deleted] (

[id_badrek] int NULL,

[дом] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_street] int NULL,

[id_customer] int NULL,

[дата_обнаружения] datetime NULL,

[описание] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[исправлено] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[фото] varchar(150) COLLATE Cyrillic_General_CI_AS NULL,

[предписание] datetime NULL,

[уведомление] datetime NULL,

[результат] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[id_norma] int NULL,

[объект_рекламы] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[UpdateDate] datetime NULL,

[UpdatedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL,

[DeleteDate] datetime NULL,

[DeletedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

GO

-- Definition for table Нарушения_рекламы :

CREATE TABLE [dbo].[Нарушения_рекламы] (

[id_badrek] int IDENTITY(1, 1) NOT NULL,

[дом] varchar(20) COLLATE Cyrillic_General_CI_AS NULL,

[id_street] int NULL,

[id_customer] int NULL,

[дата_обнаружения] datetime NOT NULL,

[описание] varchar(250) COLLATE Cyrillic_General_CI_AS NOT NULL,

[исправлено] char(2) COLLATE Cyrillic_General_CI_AS NULL,

[фото] varchar(150) COLLATE Cyrillic_General_CI_AS NULL,

[предписание] datetime NULL,

[уведомление] datetime NULL,

[результат] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[id_norma] int NULL,

[объект_рекламы] varchar(250) COLLATE Cyrillic_General_CI_AS NULL,

[UpdateDate] datetime NULL,

[UpdatedBy] varchar(50) COLLATE Cyrillic_General_CI_AS NULL)

ON [PRIMARY]

GO

-- Definition for table Районы :

CREATE TABLE [dbo].[Районы] (

[id_admdel] int IDENTITY(1, 1) NOT NULL,

[район] nvarchar(50) COLLATE Cyrillic_General_CI_AS NOT NULL)

ON [PRIMARY]

GO

--функция с курсором для подсчета прибыли от деятельности отдела

CREATE FUNCTION [dbo].BigMoney_cur (@номер_отдела int)

RETURNS money

AS

BEGIN

DECLARE @сумма_договора money, @огого money

SET @огого=0

DECLARE Counter CURSOR LOCAL FOR SELECT сумма_договора FROM Договора

WHERE номер_отдела=@номер_отдела

OPEN Counter

FETCH NEXT FROM Counter INTO @сумма_договора

WHILE @@FETCH_STATUS=0

BEGIN

SET @огого=@огого+@сумма_договора

FETCH NEXT FROM Counter INTO @сумма_договора

END

CLOSE Counter

DEALLOCATE Counter

RETURN @огого

END

GO

--конвертация даты для переноса информации из базы "1С Предприятие"

CREATE FUNCTION [dbo].ConvDate (@str char(23))

RETURNS datetime

AS

BEGIN

RETURN CAST ( LEFT(@str,8) AS datetime)

END

GO

--конвертация информации о предоплате из базы "1С Предприятие"

CREATE FUNCTION [dbo].ConvPr (@str char(50))

RETURNS int

AS

BEGIN

DECLARE @i int

SET @i=CHARINDEX('%',@str)-1

IF (@str IS NULL) OR (@i<0) SET @str='100%'

RETURN CAST(LEFT(@str,CHARINDEX('%',@str)-1)AS int)

END

GO

--подсчет количества дней до окончания срока исполнения договора

CREATE FUNCTION [dbo].DateDiffSrok (@date_start datetime, @date_end datetime, @srok int)

RETURNS int

AS

BEGIN

IF (@date_end IS NULL) SET @date_end = GETDATE()

RETURN (DATEDIFF(day, @date_start, @date_end)-@srok)

END

GO

--формирования строки для трехзначного числа:

CREATE FUNCTION [dbo].SumStrThree (@Summa varchar(4000), @TempValue bigint, @Rod int, @w1 varchar(40), @w2to4 varchar(40), @w5to10 varchar(40))

RETURNS @tab TABLE (Txt varchar(4000), Rest bigint)

AS

BEGIN

/*

DECLARE @Rest int, @Rest1 int, @ENDWord varchar(100), @s1 varchar(40), @s10 varchar(40), @s100 varchar(40)

SET @Rest = @TempValue % 1000

SET @TempValue = @TempValue / 1000

IF @Rest = 0

BEGIN -- последние три знака нулевые

IF @Summa = ''

SET @Summa = @w5to10 + ' '

INSERT INTO @tab

SELECT @Summa, @TempValue

RETURN

END

-- начинаем подсчет с @Rest

SET @ENDWord = @w5to10

-- сотни

SELECT @s100 = CASe @Rest / 100

WHEN 0 THEN ''

WHEN 1 THEN 'сто '

WHEN 2 THEN 'двести '

WHEN 3 THEN 'триста '

WHEN 4 THEN 'четыреста '

WHEN 5 THEN 'пятьсот '

WHEN 6 THEN 'шестьсот '

WHEN 7 THEN 'семьсот '

WHEN 8 THEN 'восемьсот '

WHEN 9 THEN 'девятьсот '

END

-- десятки

SET @Rest = @Rest % 100

SET @Rest1 = @Rest / 10

SET @s1 = ''

SELECT @s10 = CASe @Rest1

WHEN 0 THEN ''

WHEN 1 THEN

CASe @Rest

WHEN 10 THEN 'десять '

WHEN 11 THEN 'одиннадцать '

WHEN 12 THEN 'двенадцать '

WHEN 13 THEN 'тринадцать '

WHEN 14 THEN 'четырнадцать '

WHEN 15 THEN 'пятнадцать '

WHEN 16 THEN 'шестнадцать '

WHEN 17 THEN 'семнадцать '

WHEN 18 THEN 'восемнадцать '

WHEN 19 THEN 'девятнадцать '

END

WHEN 2 THEN 'двадцать '

WHEN 3 THEN 'тридцать '

WHEN 4 THEN 'сорок '

WHEN 5 THEN 'пятьдесят '

WHEN 6 THEN 'шестьдесят '

WHEN 7 THEN 'семьдесят '

WHEN 8 THEN 'восемьдесят '

WHEN 9 THEN 'девяносто '

END

IF @Rest1 <> 1

BEGIN -- единицы

IF @Rest % 10 = 1

SET @ENDWord = @w1

ELSE IF @Rest % 10 between 2 and 4

SET @ENDWord = @w2to4

SELECT @s1 = CASe @Rest % 10

WHEN 0 THEN ''

WHEN 1 THEN

CASe @Rod

WHEN 1 THEN 'один '

WHEN 2 THEN 'одна '

WHEN 3 THEN 'одно '

END

WHEN 2 THEN

CASe

WHEN @Rod = 2

THEN 'две '

ELSE 'два '

END

WHEN 3 THEN 'три '

WHEN 4 THEN 'четыре '

WHEN 5 THEN 'пять '

WHEN 6 THEN 'шесть '

WHEN 7 THEN 'семь '

WHEN 8 THEN 'восемь '

WHEN 9 THEN 'девять '

END

END

-- сборка строки

INSERT INTO @Tab

SELECT Txt = RTrim(RTrim( @s100 + @s10 + @s1 + @ENDWord) + ' ' + @Summa), @TempValue

RETURN

END

GO

-- преобразование числа из цифрого вида в символьное

CREATE FUNCTION [dbo].SumStr(@Source bigint, @Rod int, @w1 varchar(40), @w2to4 varchar(40), @w5to10 varchar(40) )

RETURNS varchar(4000)

AS

BEGIN

DECLARE @Summa varchar(4000)

DECLARE @TempValue bigint

IF @Source = 0 BEGIN

SET @Summa = 'ноль ' + RTrim(@w5to10)

RETURN @Summa

END

SELECT @TempValue = @Source, @Summa = ''

-- единицы

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, @Rod, @w1, @w2to4, @w5to10)

IF @TempValue = 0 RETURN @Summa

-- тысячи

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 2, 'тысяча', 'тысячи', 'тысяч')

IF @TempValue = 0 RETURN @Summa

-- миллионы

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'миллион', 'миллиона', 'миллионов')

IF @TempValue = 0 RETURN @Summa

-- миллиардов

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'миллиард', 'миллиарда', 'миллиардов')

IF @TempValue = 0 RETURN @Summa

SELECT @Summa = Txt, @TempValue = Rest from dbo.SumStrThree( @Summa, @TempValue, 1, 'трилллион', 'триллиона', 'триллионов')

RETURN @Summa

END

GO

--представление числа (денежной суммы) прописью

CREATE FUNCTION [dbo].MoneyWords( @Money money )

RETURNS varchar(max)

AS

BEGIN

DECLARE @Source bigint

DECLARE @minus varchar(10)

DECLARE @sum varchar(max)

IF @Money < 0

BEGIN

SET @minus = 'Минус '

SET @Money = -@Money

END

ELSE SET @minus = ''

SET @Source = floor( @Money )

SET @sum = @Minus + dbo.SumStr( @source, 1, 'рубль', 'рубля', 'рублей')

SET @sum = Upper( SubString( @sum,1,1) ) + SubString( @sum, 2, len(@sum)-1)

RETURN @sum

END

GO

--на исправление нарушения дается 7 дней, иначе направляется предписание

--возвращает колличество дней на исправление

CREATE FUNCTION [dbo].UvedomlenieOut (@date_start datetime)

RETURNS int

AS

BEGIN

DECLARE @дней_исправить int

SET @дней_исправить=7

RETURN (@дней_исправить-DATEDIFF(day, @date_start, GETDATE()))

END

GO

--SELECT [DISTINCT] <Список полей> или *

-- [FROM <Список таблиц>]

-- [WHERE <Условие отбора>]

-- [GROUP BY <Список полей для группирования> [ASC | DESC], ...]

-- [HAVING <Условие группирования>]

-- [ORDER BY <Список полей для сортировки> [ASC | DESC], ...]

CREATE VIEW [dbo].Договора_неоплачены

AS

SELECT Договора.номер_договора, Договора.сумма_договора, Договора.сумма_оплачено,

Заказчики.наименование_краткое

FROM Договора INNER JOIN

Заказчики ON Договора.id_customer=Заказчики.id_customer

WHERE Договора.сумма_оплачено < Договора.сумма_договора

GO

--список сотрудников для форм с выбором исполнителя (ответсвенной должности)

CREATE VIEW [dbo].Должности_по_сотруднику

AS

SELECT Должности.id_staff, Сотрудники.ФИО, Отделы.отдел, Должности.Должность

FROM Отделы INNER JOIN (Сотрудники INNER JOIN Должности ON Сотрудники.in_rn = Должности.in_rn)ON Отделы.номер_отдела = Должности.номер_отдела

GO

--информация о поступивших средствах от заказчика по всем договорам базы

CREATE VIEW [dbo].Заказчики_всего_оплачено

AS

SELECT TOP(100)SUM(Договора.сумма_оплачено) ВСЕГО,Заказчики.id_customer, Заказчики.наименование_краткое

FROM Договора INNER JOIN

Заказчики ON Договора.id_customer=Заказчики.id_customer

GROUP by Заказчики.id_customer, Заказчики.наименование_краткое

ORDER BY SUM(Договора.сумма_оплачено)

GO

--список заказчиков, договора которых по текущей дате на исполнении

--для информационной рассылки

CREATE VIEW [dbo].Заказчики_текущие

AS

SELECT Договора.номер_договора, Договора.дата_исполнения,

Заказчики.наименование_краткое, Заказчики.адрес_почта

FROM Договора INNER JOIN

Заказчики ON Договора.id_customer=Заказчики.id_customer

WHERE Договора.дата_исполнения IS NULL

GO

--список отделов суказанием их руководителей

CREATE VIEW [dbo].Информация_по_отделам

AS

SELECT Отделы.номер_отдела, Отделы.отдел,Сотрудники.ФИО AS начальник

FROM Сотрудники INNER JOIN Отделы ON Сотрудники.in_rn = Отделы.in_rn

GO

--вся информация по договору (карточка договора)

CREATE VIEW [dbo].Карточка_Договора

AS

SELECT Договора.*, dbo.MoneyWords(Договора.сумма_договора)AS сум_дог,

Должности.должность, Отделы.отдел, Услуги.услуга, Заказчики.наименование_полное

FROM Договора INNER JOIN

Должности ON Договора.id_staff = Должности.id_staff INNER JOIN

Отделы ON Договора.номер_отдела = Отделы.номер_отдела INNER JOIN

Услуги ON Договора.id_service = Услуги.id_service INNER JOIN

Заказчики ON Договора.id_customer = Заказчики.id_customer

GO

--вся информация по нарущению рекламы (карточка нарущения рекламы)

CREATE VIEW [dbo].Карточка_Нарушения_рекламы

AS

SELECT Нарушения_рекламы.*, Заказчики.наименование_краткое,

Префикс.вид+Улицы.улица+', д.'+Нарушения_рекламы.дом AS Адрес

FROM Нарушения_рекламы INNER JOIN

Заказчики ON Нарушения_рекламы.id_customer=Заказчики.id_customer INNER JOIN

Улицы ON Нарушения_рекламы.id_street=Улицы.id_street INNER JOIN

Префикс ON Улицы.id_ntu=Префикс.id_ntu

GO

--для отчета по структуре организации с указанием ФИО сотрудников

CREATE VIEW [dbo].Структура_организации

AS

SELECT Должности.должность, Подразделения.подразделение, Отделы.отдел, Сотрудники.ФИО

FROM Подразделения INNER JOIN

(Отделы INNER JOIN

(Должности INNER JOIN

Сотрудники ON Должности.in_rn = Сотрудники.in_rn)

ON Отделы.номер_отдела = Должности.номер_отдела)

ON Подразделения.номер_подразделения = Должности.номер_подразделения

GO

--оставшееся количество дней до конца срока уведомления

CREATE VIEW [dbo].Уведомление_осталось

AS

SELECT Заказчики.наименование_краткое,

Префикс.вид+Улицы.улица+', д.'+Нарушения_рекламы.дом AS адрес,

Нарушения_рекламы.описание,Нарушения_рекламы.уведомление , dbo.UvedomlenieOut(Нарушения_рекламы.уведомление) AS [осталось дней]

FROM Нарушения_рекламы INNER JOIN

Заказчики ON Нарушения_рекламы.id_customer = Заказчики.id_customer INNER JOIN

Улицы ON Нарушения_рекламы.id_street=Улицы.id_street INNER JOIN

Префикс ON Улицы.id_ntu=Префикс.id_ntu

WHERE (Нарушения_рекламы.уведомление IS NOT NULL) AND (Нарушения_рекламы.предписание IS NULL)

GO

--список улиц города с указанием префикса и административного деления

CREATE VIEW [dbo].Улицы_районы

AS

SELECT Улицы.id_street, Префикс.вид, Улицы.улица, Районы.район

FROM Районы INNER JOIN

(Улицы INNER JOIN

Префикс ON Улицы.id_ntu=Префикс.id_ntu)

ON Районы.id_admdel=Улицы.id_admdel

GO

-- количество договоров за текущий месяц

CREATE PROCEDURE [dbo].CountDogMonth

AS

BEGIN

SELECT Count(id_contract)

FROM Договора

WHERE MONTH(дата_договора) = MONTH(GETDATE())

END

GO

--количество заказчиков

CREATE PROCEDURE [dbo].CustomerCount

AS

DECLARE @количество INT -- объявляет переменную типа INT

DECLARE @наименование CHAR(200)

DECLARE @сообщение CHAR (200) -- объявляет переменную типа CHAR

SET @количество = (SELECT COUNT(УНП) FROM Заказчики) -- устанавливает количество

IF @количество < 1000

BEGIN

SET @сообщение = 'Количество заказчиков менее 1000'

SELECT @сообщение

END

ELSE

BEGIN

SET @сообщение = 'Количество заказчиков ' + str(@количество)

SELECT @сообщение

END

GO

-- просроченный договора

CREATE PROCEDURE [dbo].SrokDogMonth

AS

BEGIN

SELECT Договора.номер_договора, Договора.дата_договора, Договора.дата_начала,

Договора.дата_исполнения,Договора.срок_исполнения,

dbo.DateDiffSrok(Договора.дата_начала,Договора.дата_исполнения,Договора.срок_исполнения) AS Просрочено,

Отделы.отдел, Сотрудники.ФИО

FROM Сотрудники INNER JOIN

Отделы ON Сотрудники.in_rn = Отделы.in_rn INNER JOIN

Договора ON Отделы.номер_отдела = Договора.номер_отдела

WHERE dbo.DateDiffSrok(Договора.дата_начала,Договора.дата_исполнения,Договора.срок_исполнения) >0

END

GO

-- сумма по договорам за текущий месяц

CREATE PROCEDURE [dbo].SumDogMonth

AS

BEGIN

SELECT Sum(сумма_договора)

FROM Договора

WHERE MONTH(дата_договора) = MONTH(GETDATE())

END

GO

-- Definition for stored procedure Договора_DH1795_1SJOURN_конверт :

GO

CREATE PROCEDURE [dbo].Договора_DH1795_1SJOURN_конверт

AS

BEGIN

DECLARE @date_start datetime

SET @date_start =CAST ('20150201' AS datetime) --начало даты конвертации

INSERT INTO Договора( сумма_договора, предоплата_процент, дата_начала, описание_работ, дата_договора,

номер_договора, id_customer)

SELECT SP1801, dbo.ConvPr(SP1826), dbo.ConvDate(DATE_TIME_IDDOC), SP1799,

dbo.ConvDate(DATE_TIME_IDDOC), id_customer

FROM

_1SJOURN INNER JOIN (DH1795 INNER JOIN Заказчики ON DH1795.SP1798=Заказчики.ID)

ON DH1795.IDDOC=_1SJOURN.IDDOC

WHERE (dbo.ConvDate(DATE_TIME_IDDOC) > @date_start)

END

GO

CREATE PROCEDURE [dbo].Заказчики_SP1806_конверт

AS

BEGIN

INSERT INTO Заказчики( наименование_полное, руководитель_ип, адрес_почта, наименование_краткое,

kod, руководитель_рп, счет_в_банке, УНП, ОКПО, основание, ID)

SELECT SP1810, SP1811, SP1808, DESCR, CODE, SP1812, SP1809, SP1828, SP1829, SP1813, ID

FROM SC1806

END

GO

--курсор для поиска повторных записей в справочнике заказчиков (по УНП)

CREATE PROCEDURE [dbo].Заказчики_УНП_повтор_cur

AS

BEGIN

DECLARE @unp VARCHAR(10),@unp_tmp VARCHAR(10), @customer VARCHAR(200), @message VARCHAR(250)

SET @unp_tmp=''

PRINT ' Список повторных записей о заказчиках'

DECLARE customer_cursor CURSOR LOCAL FOR SELECT УНП,Наименование_краткое

FROM [Заказчики]

WHERE УНП<>'' --унп=NULL

ORDER BY УНП

OPEN customer_cursor

FETCH NEXT FROM customer_cursor INTO @unp, @customer

WHILE @@FETCH_STATUS=0

BEGIN

IF @unp=@unp_tmp

SELECT @message='повтор УНП '+ @unp + @customer

--ELSE SELECT @message='---------- '+ @unp + @customer

PRINT @message

SET @unp_tmp=@unp

--переход к следующему клиенту--

FETCH NEXT FROM customer_cursor INTO @unp, @customer

END

CLOSE customer_cursor

DEALLOCATE customer_cursor

END

GO

--курсор для поиска и удаления повторных записей в справочнике заказчиков (по УНП)

CREATE PROCEDURE [dbo].Заказчики_УНП_чистка_cur

AS

BEGIN

DECLARE @unp VARCHAR(10),@unp_tmp VARCHAR(10)

DECLARE @id_customer INT, @id_customer_tmp INT, @message VARCHAR(250)

DECLARE @count INT

SET @unp_tmp=''

--SET @id_customer_tmp=0

PRINT ' Список заказчиков'

DECLARE customer_cursor CURSOR LOCAL FOR SELECT УНП,id_customer

FROM [Заказчики]

WHERE УНП<>'' --унп=NULL

ORDER BY УНП

OPEN customer_cursor

FETCH NEXT FROM customer_cursor INTO @unp, @id_customer

WHILE @@FETCH_STATUS=0

BEGIN

--ищем заказчика в базе договоров

SET @count = (SELECT COUNT(id_customer) FROM Договора WHERE id_customer=@id_customer)

IF @unp=@unp_tmp AND @count=0 --повтор найден и нет в Договорах

BEGIN

SET @message='повтор УНП, удалена запись '+ @unp + STR(@id_customer)

PRINT @message

DELETE FROM Заказчики WHERE id_customer=@id_customer

END

IF @unp=@unp_tmp AND @count>0 --повтор найден, удаляется отсутствующая в Договорах

BEGIN

SET @message='повтор УНП, удалена повторная запись о Заказчике отсутствующая в Договорах '+ @unp + STR(@id_customer)

PRINT @message

DELETE FROM Заказчики WHERE id_customer=@id_customer_tmp

END

SET @unp_tmp=@unp

SET @id_customer_tmp=@id_customer

--переход к следующему клиенту--

FETCH NEXT FROM customer_cursor

INTO @unp, @id_customer

END

CLOSE customer_cursor

DEALLOCATE customer_cursor

--Для контроля достижения конца курсора рекомендуется применять функцию: @@FETCH_STATUS

END

GO

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

CREATE PROCEDURE [dbo].Отделы_Прибыль_cur

AS

BEGIN

DECLARE @сумма money, @итого money, @номер_отдела int, @отдел varchar(50)

DECLARE TopOtdel CURSOR LOCAL FOR SELECT номер_отдела, отдел

FROM Отделы ORDER BY номер_отдела

SET @итого=0

PRINT 'Заключено договоров на сумму:'

OPEN TopOtdel

FETCH NEXT FROM TopOtdel INTO @номер_отдела, @отдел

WHILE @@FETCH_STATUS=0

BEGIN

SET @сумма= dbo.BigMoney_cur(@номер_отдела)

IF @номер_отдела <> 0 AND @сумма<> 0

PRINT STR(@сумма)+' - '+ @отдел

SET @итого=@итого+@сумма

FETCH NEXT FROM TopOtdel INTO @номер_отдела, @отдел

END

PRINT '----------------------------------------'

PRINT 'ИТОГО по предприятию:'+STR(@итого)

PRINT '('+dbo.MoneyWords(@итого)+')'

CLOSE TopOtdel

DEALLOCATE TopOtdel

END

GO

-- Definition for stored procedure Услуги_Рост_cur :

GO

CREATE PROCEDURE [dbo].Услуги_Рост_cur

AS

BEGIN

DECLARE @id_service int, @услуга varchar(250), @message varchar(250)

DECLARE @sum_prev money, @sum_cur money

DECLARE Usluga CURSOR LOCAL FOR

SELECT id_service, SUM(сумма_договора)AS sum_cur FROM Договора

WHERE YEAR(дата_договора)= YEAR (GETDATE()) --текущий год

GROUP BY id_service

PRINT 'Выполнение по услуге к предыдущему году:'

PRINT 'Прошлый год Текущий год Проц.выполнения Услуга:'

OPEN Usluga

FETCH NEXT FROM Usluga INTO @id_service, @sum_cur

WHILE @@FETCH_STATUS=0

BEGIN

--сумма прошлого года по соответствующей услуге

SET @sum_prev = (SELECT SUM(сумма_договора)FROM Договора

WHERE YEAR(дата_договора)= (YEAR (GETDATE())-1) AND id_service=@id_service

GROUP BY id_service)

--находим название услуги по ID

SET @услуга= (SELECT услуга FROM Услуги WHERE id_service=@id_service)

IF (@sum_prev IS NOT NULL)

SET @message= str(@sum_prev)+' '+str(@sum_cur)+' '

+ str((@sum_cur/@sum_prev)*100)+'% '+ @услуга

ELSE

SET @message= '------'+' '+str(@sum_cur)+' ' +' ------ '+ @услуга

PRINT @message

FETCH NEXT FROM Usluga INTO @id_service, @sum_cur

END

CLOSE usluga

DEALLOCATE usluga

END

GO

-- Definition for indices :

ALTER TABLE [dbo].[Услуги]

ADD CONSTRAINT [PK_Услуги]

PRIMARY KEY CLUSTERED ([id_service])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Заказчики]

ADD CONSTRAINT [Заказчики_pk]

PRIMARY KEY CLUSTERED ([id_customer])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Сотрудники]

ADD CONSTRAINT [PK_Сотрудники]

PRIMARY KEY CLUSTERED ([in_rn])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Подразделения]

ADD CONSTRAINT [Подразделения_pk]

PRIMARY KEY CLUSTERED ([номер_подразделения])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Подразделения]

ADD CONSTRAINT [Подразделения_uq]

UNIQUE NONCLUSTERED ([номер_подразделения])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_pk]

PRIMARY KEY CLUSTERED ([номер_отдела])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_uq]

UNIQUE NONCLUSTERED ([номер_отдела])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_pk]

PRIMARY KEY CLUSTERED ([номер_отдела])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_uq]

UNIQUE NONCLUSTERED ([номер_отдела])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Шаблоны_договоров]

ADD CONSTRAINT [PK_Шаблоны_договоров]

PRIMARY KEY CLUSTERED ([id_pattern])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Префикс]

ADD CONSTRAINT [PK_Префикс]

PRIMARY KEY CLUSTERED ([id_ntu])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Префикс]

ADD CONSTRAINT [PK_Префикс]

PRIMARY KEY CLUSTERED ([id_ntu])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Нормы_закона]

ADD CONSTRAINT [Нормы_закона_pk]

PRIMARY KEY CLUSTERED ([id_norma])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

ALTER TABLE [dbo].[Районы]

ADD CONSTRAINT [PK_Районы]

PRIMARY KEY CLUSTERED ([id_admdel])

WITH (

PAD_INDEX = OFF,

IGNORE_DUP_KEY = OFF,

STATISTICS_NORECOMPUTE = OFF,

ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON)

ON [PRIMARY]

GO

-- Definition for foreign keys :

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_fk] FOREIGN KEY ([in_rn])

REFERENCES [dbo].[Сотрудники] ([in_rn])

ON UPDATE CASCADE

ON DELETE NO ACTION

GO

ALTER TABLE [dbo].[Отделы]

ADD CONSTRAINT [Отделы_fk] FOREIGN KEY ([in_rn])

REFERENCES [dbo].[Сотрудники] ([in_rn])

ON UPDATE CASCADE

ON DELETE NO ACTION

GO

-- Definition for triggers :

GO

CREATE TRIGGER [dbo].[Подразделения_trd] ON [dbo].[Подразделения]

WITH EXECUTE AS CALLER

FOR DELETE

AS

--запрет удаления подразделений

IF SYSTEM_USER <> 'Администратор'

BEGIN

PRINT 'ВНИМАНИЕ!!! Удаление подразделений из справочника разрешено только АДМИНИСТРАТОРу'

--сообщения о неудаче операции

ROLLBACK TRANSACTION

END

GO

CREATE TRIGGER [dbo].[Отделы_trd] ON [dbo].[Отделы]

WITH EXECUTE AS CALLER

FOR DELETE

AS

--запрет удаления отделов

IF SYSTEM_USER <> 'Администратор'

BEGIN

PRINT 'ВНИМАНИЕ!!! Удаление отделов из справочника разрешено только АДМИНИСТРАТОРу'

--сообщения о неудаче операции

ROLLBACK TRANSACTION

END

GO

CREATE TRIGGER [dbo].[Отделы_trd] ON [dbo].[Отделы]

WITH EXECUTE AS CALLER

FOR DELETE

AS

--запрет удаления отделов

IF SYSTEM_USER <> 'Администратор'

BEGIN

PRINT 'ВНИМАНИЕ!!! Удаление отделов из справочника разрешено только АДМИНИСТРАТОРу'

--сообщения о неудаче операции

ROLLBACK TRANSACTION

END

GO

CREATE TRIGGER [dbo].[Префикс_trud] ON [dbo].[Префикс]

WITH EXECUTE AS CALLER

FOR UPDATE, DELETE

AS

--запрет удаления и изменения префиксов улиц

IF SYSTEM_USER <> 'Администратор'

BEGIN

PRINT 'ВНИМАНИЕ!!! Удаление и изменение префиксов улиц в справочнике разрешено

только АДМИНИСТРАТОРу'

--сообщения о неудаче операции

ROLLBACK TRANSACTION

END

GO

CREATE TRIGGER [dbo].[Префикс_trud] ON [dbo].[Префикс]

WITH EXECUTE AS CALLER

FOR UPDATE, DELETE

AS

--запрет удаления и изменения префиксов улиц

IF SYSTEM_USER <> 'Администратор'

BEGIN

PRINT 'ВНИМАНИЕ!!! Удаление и изменение префиксов улиц в справочнике разрешено

только АДМИНИСТРАТОРу'

--сообщения о неудаче операции

ROLLBACK TRANSACTION

END

GO

-- Role Membership

EXEC sp_addrolemember 'db_datareader', 'psb'

GO

EXEC sp_addrolemember 'db_datawriter', 'psb'

GO

EXEC sp_addrolemember 'db_owner', 'Администратор'

GO

-- Definition for user psb :

CREATE USER [psb]

WITHOUT LOGIN

WITH DEFAULT_SCHEMA = [db_owner]

GO

-- Definition for user Администратор :

CREATE USER [Администратор]

WITHOUT LOGIN

WITH DEFAULT_SCHEMA = [db_owner]

GO

-- Definition for user Специалист :

CREATE USER [Специалист]

WITHOUT LOGIN

WITH DEFAULT_SCHEMA = [db_datawriter]

GO

5. РЕЗУЛЬТАТ ТЕСТИРОВАНИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ

Для нормальной работы системы необходимо 256 Мбайт оперативной памяти, Windows NT/2000/XP и выше, MS SQL Server 2000.

В данном курсовом проекте разработана база данных которая хранится на SQL сервере.

Корректность выполнения процедур, функций, построение представлений проверена средствами среды SQL Server Management Studio.

После тестирования получили результаты:

- Информационная система поддерживает многопользовательский режим.

- Тестирование процедур, функций, тригеров, курсоров, представлений прошло успешно.

ЗАКЛЮЧЕНИЕ

Информационное общество - общество, в котором большинство работающих занято производством, хранением, переработкой и реализацией информации во всех ее формах.

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

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

Во время выполнения курсовой работы было разработано многопользовательская информационная система «Автоматизация оказания услуг проектным специализированным бюро».

При создании БД использовались средство моделирования баз данных All Fusion Data Modeler 7.2, средство моделирования бизнес-процессов All Fusion Process Modeler 7.3, сервер баз данных Microsoft SQL server 2000, язык баз данных T-SQL.

Все пункты курсового задания были выполнены, разработанная система выполняет поставленную перед ним задачу.

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

1. Microsoft SQL Server 7 для профессионалов. - СПб.: Питер, 2000. - 896 с.

2. Алан Бьюли, Энди Оппель. Изучаем SQL. - М.:Символ, 2007. - 312 с.

3. Жилинский А. Самоучитель Microsoft SQL Server 2005. - СПб:BHV, 2004. - 224 с.

4. Кишори Бхамидипати. SQL. Справочник программиста.-М.:Эком, 2003. - 304 с.

5. Конспект лекций «Базы данных»

6. Литвин П., Гетц К.,Гунделой М. Разработка настольных приложений в Access 2002. Для профессионалов. - СПб.:Питер; К.: Издательская группа BHV, 2002. - 1008 с.

7. Марков А.С., Лисовский К.Ю. «Базы данных. Введение в теорию и методологию». - М.:Финансы и статистика, 2006. - 512 с.

8. Роберт Виейра. Программирование баз данных Microsoft SQL Server 2005. Базовый курс. - М.:Вильямс, 2003. - 848 с.

9. Уилтон П., Колби Дж. SQL для начинающих. - М.: Вильямс, 2006. - 496 с.

10. Фленов М. Transact SQL в подлиннике. - СПб:BHV, 2006. - 576 с.

11. Практическое руководство по SQL. - М.: Вильямс, 2002. - 352 с.

12. Моисеенко С. SQL. Задачи и решения. СПб.: Питер, 2006. - 256 с.

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.