Разработка автоматизированной системы заполнения первичной документации предприятия

19



Смоленский промышленно-экономический колледж

Кафедра Математики и Информатики

Специальность Программное Обеспечение

Вычислительной Техники и Автоматизированных Систем





















Дипломная работа



По теме: Разработка автоматизированной системы заполнения первичной документации предприятия




АННОТАЦИЯ



Данная дипломная работа на тему «Разработка системы автоматизированного заполнения первичной документации» выполнена студентом 4-го курса Смоленского Промышленно-экономического колледжа Дроздовым Артемом Викторовичем.

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

Расчетно-пояснительная записка содержит (*) рисунок и (*) таблиц.



THE SUMMARY



The given degree work on a theme «System engineering of the automated filling of the initial documentation» is executed by the student of 4-th rate of Smolensk Industrial - Economic College Drozdov Artyom Victorovich.

The given settlement - explanatory note consists from (***) the basic chapters which in total occupy (***) a quire. Into structure (***) the basic chapters enter: a special part of the degree project (a theoretical part, a practical part, the program documentation, Operational the documentation, initial texts of the developed software), an organizational - economic part, chapters on a labour safety and the safety precautions and ergonomics.

The settlement - explanatory note contains () picture and () tables.


СОДЕРЖАНИЕ



	ВВЕДЕНИЕ

	ГЛАВА 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

	Обзор литературы.

	Введение в базы данных.

	Общая теория.

	Архитектура информационных систем.

	Классификация и функции СУБД.

	Требования, предъявляемые к базам данных.

	Модели представления данных.

	Иерархическая модель данных.

	Сетевая модель данных.

	Реляционная модель данных.

	Системы программирования Borland Delphi, как средства разработки приложений баз данных.

	Механизмы Delphi для организации доступа к данным.

	ADO-компоненты Delphi для организации доступа к данным.

	Компоненты Delphi для визуализации данных

	ГЛАВА 2. ПРАКТИЧЕСКАЯ ЧАСТЬ.

	Назначение разработки.

	Составные части программы

	ГЛАВА 3. ПРОГРАММНАЯ И ЭКСПЛУАТАЦИОННАЯ ДОКУМЕНТАЦИЯ

	Техническое задание (ГОСТ 19.201-78)

	Введение

	Основание для разработки

	Назначение разработки

	Требования к программе

	Стадии и этапы разработки

	Спецификация

	Текст программы А.В. 00004-01_12_01 (ГОСТ 19.401-78)

	Описание программы А.В. 00004-01_13_01 (ГОСТ 19.402-78)

	Общие сведенья

	Функциональное назначение

	Описание логической структуры

	Используемые технические средства

	Вызов и загрузка

	Входные и выходные данные

	Программа и методика испытаний А.В. 00004 – 01_51_01

	Ведомость эксплуатационных документов А..В. 00004 – 01_20_01 (ГОСТ 19.507-79)

	Описание применения А.В. 00004-01_31_01 (ГОСТ 19.502-78)

	Назначение программы

	Условия применения

	Описание задачи

	Входные и выходные данные

	Руководство системного программиста А.В. 00004 – 01_32_01 (ГОСТ 19.503-79).

	Структура программы

	Настройка программы

	Проверка программы

	Дополнительные возможности программы

	Руководство программиста А.В. 00004 – 01_33_01 (ГОСТ 19.504-79)

	Характеристики программы

	Обращение к программе

	Входные и выходные данные

	Руководство оператора A.B. 00004 – 01_34_01 (ГОСТ 19.505-79)

	Назначение программы

	Условия выполнения программы

	Выполнение программы

	Сообщения оператору

	Руководство по техническому обслуживанию А.В. 00004-01_46_01 (ГОСТ 19.508-79)

	Введение

	Общие указания

	Требования к техническим средствам

	Описание функций

	ГЛАВА 4. ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ РАЗРАБОТКИ

	ГЛАВА 5. ОХРАНА ТРУДА И ТЕХНИКА БЕЗОПАСНОСТИ

	Основные положения

	ГЛАВА 6. ЭРГОНОМИКА

	Основные положения

	Анализ опасных и вредных производственных факторов

	Санитарные нормы

	Требования к освещению помещений и рабочих мест с ПЭВМ

	Общие требования к организации рабочих мест

	Требования к организации режима труда и отдыха при работе с ПЭВМ

	Требования к помещениям для эксплуатации ПЭВМ

	Правила пожарной безопасности

	Защита рабочих от поражения электрическим током

	ЗАКЛЮЧЕНИЕ

	СПИСОК ЛИТЕРАТУРЫ

	СОДЕРЖАНИЕ

	ПРИЛОЖЕНИЕ 1

	ПРИЛОЖЕНИЕ 2

	ПРИЛОЖЕНИЕ 3




ВВЕДЕНИЕ



На протяжении всей истории человека перед ним стояла задача накопления, хранения и обработки информации. Долгое время для решения этой задачи применялись различные методы и инструменты, такие как бумага, печатный станок, да и просто память самого человека, и другие его умственные способности. Однако все эти и многие другие методы были достаточно неудобными при использовании больших объемов информации. А так как потребности человека, как известно, вещь постоянно растущая, то вскоре людям потребовались новые инструменты накопления и обработки информации, способные удовлетворить эти самые потребности в автоматизации различных видов деятельности человека, так или иначе связанных с накоплением, обработкой и распространением информации. Так люди пришли к необходимости создания нового вида машин – электронно-вычислительных (ЭВМ), то есть компьютеров.

Применение компьютеров значительно упростило накопление и обработку информации, появилось новое свойство информации – динамичность, т.е. максимально быстрая перестройка информации для решения различных, постоянно меняющихся задач. Переход к хранению необходимой информации в памяти компьютера позволило значительно снизить время поиска, обработки (изменения, пополнения или удаления) и передачи нужной информации. Применение ранее использовавшихся инструментов обработки информации не идет ни в какое сравнение с использованием в этой сфере ЭВМ. При выполнении таких работ ЭВМ берет на себя большую часть работы по хранению, поиску и обработке информации, что обеспечивает более высокую производительность при повышении качества и достоверности такой информации.

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

В связи с этим водится специальный термин – автоматизация, то есть применение автоматических устройств для выполнения различных функций.

Исходя из этого, можно дать определение автоматизированной системе. 

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

При автоматизации различных видов деятельности человека широко применяются, в том числе и ЭВМ. 

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

Постоянное развитие компьютерной техники позволяет реализовывать всё новые и новые идеи по удовлетворению потребностей человека в сфере автоматизации. Однако, как небольшие, так и крупные (плюс вновь создаваемые) компьютерные автоматизированные системы опираются, в большинстве своем, на использование так называемых информационных баз или баз данных, а сами такие программы представляют собой средства управления базами данных (СУБД) с различными наборами функций. 

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

Системы управления базами данных – это прикладные информационные системы для управления и обработки структурированной информации.

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

Как было сказано выше существует множество автоматизированных систем, специально предназначенных для автоматизации различных видов деятельности, в общем, и с вязанных с хранением и обработкой экономической информации в частности (программы фирмы «1С», корпорации «Парус» и др.). При всем многообразии функции, предоставляемых пользователю, такие программы являются дорогостоящими и достаточно сложными для освоения инструментами автоматизации. Однако зачастую пользователю не требуются все широчайшие возможности таких программ, а лишь необходимо автоматизировать рутинную работу по заполнению различного рода экономической документации. Именно поэтому многие небольшие фирмы и частные предприниматели не желают тратить весьма немаленькие средства на приобретение больших АС. По этой причине было решено создать программу «D-Art Aurora v.1.0», которая представляет собой автоматизированную систему заполнения накладных. 

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

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

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

Выбор среды разработки данной программы для меня не составил особого труда. С учетом имеющихся требований заказчика и моих знаний, для разработки была выбрана система визуального программирования Borland Delphi 7.0, построенная на основе языка программирования Object Pascal. Данная система была выбрана по нескольким критериям. Во-первых, данная система программирования за долгие годы использования зарекомендовала себя как наиболее удобная, надежная и гибкая система в сфере разработки приложений баз данных. Во-вторых, Borland Delphi 7.0 имеет широкие возможности по проектированию приложений баз данных различной сложности, предоставляет разработчику удобные средства создания методов обработки информации. В-третьих, эта система поддерживает широкий спектр технологий, применяемых как для доступа к данным, так и для организации взаимодействия создаваемой программы с другими объектами операционной системы Windows. Кроме того, Object Pascal, является наиболее структурированным языком программирования, что значительно упрощает разработку подобных приложений. 


ГЛАВА 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ



Обзор литературы



В данной части этой главы рассмотрим литературу, которая была использована при написании данной дипломной работы и разработке программы «D-Art Aurora v.1.0» (табл. 1).



Таблица 1

Использованная литература

Автор, название книги

Содержание

1. Робинсон С. – Microsoft Access 2000: учебный курс – СПб.: Питер, 2004.

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

2. Валерий Фаронов – Delphi 6: учебный курс – СПб.: Питер, 2004.

Книга посвящена изучению среды объектно-ориентированного программирования Borland Delphi 6. В книге рассмотрены азы программирования на языке Object Pascal, а так же основные принципы объектно-ориентированного программирования, основные компоненты и методы работы с ними

3. Валерий Фаронов – Программирование баз данных в Delphi 6: учебный курс – СПб.: Питер, 2006.

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

4. Валерий Фаронов – Профессиональная работа в Delphi 6. Библиотека программиста. – СПб.: Питер, 2004

В данной книге описываются нетривиальные возможности системы визуального программирования Delphi 6. Описываются компоненты и возможности системы, относящиеся к профессиональным возможностям Delphi 6, такие как – использование технологии COM (Component Object Model), программирование web-приложений, создание компонентов и встроенной справочной системы.

5. Елманова Н. – Delphi 6 и технология COM. – СПб.: Питер, 2008

Книга посвящена использованию технологии Component Object Model (COM) в приложениях, созданных с помощью Delphi 6. Освещаются вопросы, связанные с принципами модели COM, разработкой элементов управления ActiveX, серверов и контроллеров автоматизации, применение OLE-документов в приложениях, применение технологии COM и COM+ для организации распределенных вычислений. Кроме того, в книге описаны способы и методы применения в приложениях COM-серверов, входящих в состав пакета программ Microsoft Office.

6. Базы данных: Учебник для высших учебных заведений / Под ред. проф. А.Д. Хомоненко. – СПб.: КОРОНА принт, 2007

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

Агальцов В.П. – Базы данных.- М.: Мир, 2006

В данном учебном пособии изложены основные понятия теории баз данных. В частности, теория информационных моделей, типов логических моделей, взаимосвязей в базе данных, подробно рассмотрена реляционная модель данных и приемы работы и создания приложений баз данных в среде Microsoft Visual Fox Pro 6.0 и старших версиях.



Введение в базы данных



Общая теория

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

В широком смысле по определение ИС подпадает любая система обработки информации, однако существует и более узкая трактовка понятия ИС. 

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

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

Рассмотрим все эти компоненты.

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

Любая база данных может быть разделена на три составляющих уровня:

Первый уровень (внутренний) – определяет способы хранение данных на физических носителях. Этот уровень для конечного пользователя не доступен для непосредственной модификации и определяется типом базы данных.

Второй уровень (внешний) – это уровень, который определяет представление хранимых данных для конечного пользователя. Этот уровень определяет интерфейс СУБД (система управления базами данных). Именно на этом уровне пользователю предоставляется доступ к функциям СУБД для непосредственного изменения хранимых данных.

Третий уровень (концептуальный) – этот уровень является переходным между двумя выше описанными. Этот уровень представляет собой обобщенное представление хранимых данных для множества пользователей.

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

Моделью представления данных называют логическую структуру, хранимых в базе данных. К наиболее распространенным моделям представления данных относятся: иерархическая, сетевая, реляционная, постреляционная, многомерная и объектно-ориентированная (см. далее). 

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

Система управления базами данных (СУБД) – это комплекс языковых и программных средств, предназначенный для создания, ведения и совместного использования базы данных несколькими пользователями. Обычно СУБД различают по используемой модели данных, например, СУБД, основанные на использовании реляционной модели данных, называют реляционными СУБД. 

Обычно для обеспечения автоматизации обработки, хранимой в базе данных информации, создаются, так называемые приложения баз данных, представляющие собой программу или комплекс программ, которые позволяют обрабатывать информацию для конкретной прикладной задачи. Такие приложения могут быть созданы как в среде самой СУБД, так и вне ее с помощью систем программирования, использующих средства доступа к базам данных, например Delphi, C++ Builder, Visual C++, Visual Basic и др. Приложения, созданные в среде самой СУБД называют приложениями СУБД, а приложения созданные вне этой среды – внешними приложениями.

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

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

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

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

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

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




Архитектура информационных систем

Эффективность функционирования информационной системы (ИС) во многом зависит от ее архитектуры. В настоящее время в большинстве случаев используются распределенные ИС. Распределенные ИС – это такие ИС, которые позволяют обрабатывать, добавлять и удалять информацию из базы данных сразу нескольким пользователям. Такие ИС делятся на две части серверную и клиентскую. При чем общая база данных разделяется на корпоративную базу данных (КБД) и персональные базы данных (ПБД), и КБД размещается на компьютере сервере, а ПБД размещаются на персональных компьютерах сотрудников подразделений.

Сервером определенного ресурса в компьютерной сети называют компьютер (программу), управляющий этим ресурсом, клиентом – компьютер (программу), использующий этот ресурс. Тип сервера определяется ресурсом, которым он управляет, например, если таковым ресурсом является база данных, то соответствующий сервер называется сервером баз данных.





Компьютер - сервер

КБД

Файл-Сервер

Передача файлов из БД для обработки

ПК клиента 1

ПК клиента n

Сетевое ПО

ПБД

СУБД

СУБД

ПБД



Рис. 1. Структура ИС с файл-сервером

Исторически первой появилась архитектура распределенной ИС, названная файл-сервером (Рис. 1). В таких ИС по запросам пользователей файлы БД передаются на персональные компьютеры, где и производится их обработка. Недостатками такого вида архитектуры является высокий трафик, то есть загруженность сети при передаче данных для обработки, а так же частая передача избыточных данных: вне зависимости от того, сколько записей из базы данных требуется пользователю, файлы базы данных передаются пользователю полностью. 





Компьютер - сервер

КБД

Сервер БД

Передача данных из БД

ПК клиента 1

ПК клиента n

Сетевое ПО

ПБД

СУБД

СУБД

ПБД

Рис. 2. Структура ИС с сервером баз данных



В настоящее время перспективной является архитектура клиент-сервер (Рис. 2). Достоинством организации информационной системы по такой архитектуре является удачное сочетание централизованного хранения, обслуживания и коллективного доступа к общей корпоративной информации с индивидуальной работой пользователей над персональной информацией. При использовании архитектуры клиент-сервер сервер баз данных берет на себя основную часть работы по обработке данных, а так же обеспечению их надежного хранения, непротиворечивости и корректности. Кроме того, при использовании данной архитектуры значительно снижается нагрузка на сеть. Это происходит из-за того, что клиент формирует запросы, поступающие к серверу в виде инструкций языка SQL (Structured Query Language – структурированный язык запросов). 

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

Корпоративная БД создается, поддерживается и функционирует под управлением сервера БД, например, Microsoft SQL Server, Borland InterBase, Oracle Server. При использовании архитектуры клиент-сервер общая база данных разделяется на корпоративную БД и персональные БД, это дает возможность уменьшить сложность проектирования БД, а значит снизить вероятность ошибок при проектировании и стоимость проектирования. Кроме того, использование такой архитектуры позволяет постепенно наращивать информационную систему предприятия, во-первых, по мере развития предприятия; во-вторых, по мере развития самой ИС.



Классификация и функции СУБД

Все существующие СУБД можно разделить по нескольким параметрам. Рассмотрим некоторые из них.

По сфере применения различают три основных вида СУБД:

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

Промышленные специального назначения – это СУБД, разрабатываемые для применения в конкретной сфере деятельности – бухгалтерские, складские, банковские СУБД и т.д. 

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

Кроме разделения по специализации СУБД можно разделить так же и по их архитектуре (Рис. 3). Все СУБД по этому критерию делятся на следующие:

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

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

Трехзвенная архитектура. В трехзвенных СУБД используется промежуточное звено – сервер приложений, который является посредником между клиентом и сервером баз данных. Сервер приложений призван избавить клиента, от каких бы то ни было забот по управлению данными и обеспечению связи с сервером баз данных. 

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

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



Данные

Сервер БД

Сервер приложений

Клиент

Данные

Сервер БД

Клиент

Данные

Клиент

Рис. 3. Архитектура СУБД: однозвенная (слева); двухзвенная (в центре); трехзвенная (справа)

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

К сетевым относятся файл-серверные, клиент-серверные и распределенные СУБД. Непременным атрибутом таких СУБД является сеть, обеспечивающая аппаратную связь компьютеров и делающая возможной корпоративную работу множества пользователей с одними и теми же данными. Работа первых двух видов СУБД основана на работе соответствующих ИС и описана выше. Распределенные СУБД могут содержать несколько десятков и сотен серверов БД. Количество клиентских мест в них может достигать нескольких сотен тысяч. Обычно такие СУБД работают на предприятиях государственного масштаба, подразделения которых разнесены на значительные расстояния (Министерство обороны, Центризбирком, МВД и др.). В распределенных СУБД некоторые серверы могут дублировать друг друга, с целью достижения предельно малой вероятности отказов и сбоев, которые могут исказить жизненно важную информацию. Они используют собственные региональные средства связи. Интерес к распределенным СУБД возрос в связи со стремительным развитием Интернета. Опираясь на возможности Интернета подобные СУБД строят не только предприятия государственного масштаба, но и небольшие коммерческие предприятия.

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

Рассмотрим некоторые функции, которые реализует СУБД.

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

Перечисленные выше функции СУБД, в свою очередь, используют следующие основные функции более низкого уровня, которые называются низкоуровневыми:

Управление данными во внешней памяти;

Управление буферами во внешней памяти;

Управление транзакциями;

Ведение журнала изменений базы данных;

Обеспечение целостности, непротиворечивости и безопасности БД.

Рассмотрим эти функции более подробно.

Реализация функции управления данными во внешней памяти в разных системах может различаться и на уровне управления ресурсами (используя файловые системы ОС или непосредственное управление устройствами компьютера), и по логике самих алгоритмов управления данными. Качество реализации этой функции наиболее сильно влияет на эффективность работы специфических ИС с огромными БД, сложными запросами, большим объемом обработки данных.

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

Механизм транзакций используется в СУБД для поддержания целостности данных в базе. Транзакцией называется некоторая неделимая последовательность действий над данными БД, которая отслеживается СУБД от начала до завершения.

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

Ведение журнала изменений в БД выполняется СУБД для обеспечения надежности хранения данных в базе при наличии аппаратных сбоев и отказов, а так же ошибок в программном обеспечении.

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

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

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



Требования, предъявляемые к базам данных



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

База данных должна:

Удовлетворять требованиям заказчика и содержать лишь те объекты и сведенья о них, которые интересуют заказчика;

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

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

Не зависеть (или мало зависеть) от количества помещаемых в нее данных;

Легко перестраиваться при изменении аппаратной;

Содержать только достоверные данные. Достоверность должна обеспечиваться как при вводе новых данных, так и при редактировании уже имеющихся4

Доступ к данным должны иметь определенные лица;



Модели представления данных



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

Иерархическая,

Сетевая,

Реляционная.

Кроме того, в последние годы появились и стали более активно внедряться на практике следующие модели:

		Постреляционная,

		Многомерная,

		Объектно-ориентированная.

Рассмотрим традиционные модели подробнее.



Иерархическая модель

В иерархической модели связи между данными можно описать с помощью упорядоченного графа (или дерева) (Рис. 4). 

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

Для описания структуры (схемы) иерархической базы данных на некотором языке программирования используется тип данных «дерево» («Tree»), который схож с типом «запись» («Record») языка Object Pascal или «структура» («Structure») языка C, в них допускается вложенность типов, каждый из которых находится на некотором уровне.

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





Рис. 4. Представление связей в иерархической модели связей в иерархической модели



включённых в тип «дерево», является простым или составным типом «запись». Простая запись состоит из одного типа, например числового, а составная из совокупности типов, например, целое, строка символов, указатель и т.д.

Корневым называется тип, который имеет подчиненные типы, и сам не является подтипом. Подтип (подчиненный тип) является потомком по отношению к типу, который выступает для него в роли предка (родителя), потомки одного и того же типа являются близнецами по отношению друг к другу.

В целом тип дерево представляет собой упорядоченную совокупность экземпляров типа «запись». Иерархическая БД представляет собой упорядоченную совокупность экземпляров типа «дерево», содержащих экземпляры типа «запись». Именно поля записей и хранят собственно информацию, содержащуюся в БД (числовые, строковые и другие значения). Обход всех элементов иерархической БД обычно производится сверху вниз и слева направо.

Для организации физического размещения иерархических данных в памяти компьютера могут использоваться следующие группы методов:

Представление линейным списком с последовательным распределение памяти;

Представление связными линейными списками (методы, использующие указатели и справочники).

К основным операциям манипулирования, иерархически организованными данными, относятся следующие:

Поиск указанного экземпляра БД (например, дерева со значение 10 в поле «Номер»);

Переход от одного дерева к другому;

Переход от одной записи к другой внутри дерева;

Вставка новой записи в указанную позицию;

Удаление текущей записи и др.

К достоинствам иерархической модели данных относятся эффективное использование памяти компьютера и неплохие показатели времени выполнения основных операций над данными. Иерархическая модель удобна при работе с иерархически упорядоченной информацией.

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



Сетевая модель данных



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





Рис. 5. Представление связей в сетевой модели



Сетевая модель более демократична, чем иерархическая и не так структурирована. В сетевой модели отсутствует понятие главного и подчиненного объекта. Один и тот же объект может выступать как главный, так и подчиненный. Для описания схемы сетевой БД используются две группы типов: «запись» и «связь». Тип «связь» определятся для двух типов «запись» - предка и потомка. Переменные типа связь являются экземплярами связей.

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

Физическое размещение данных в базах сетевого типа может быть организованно практически теми же методами, сто и в иерархических базах данных.

К числу важнейших операций манипулирования данными баз сетевого типа можно отнести следующие:

Поиск записи в БД;

Переход от предка к первому потомку;

Переход от потомка к предку;

Создание новой записи;

Удаление текущей записи;

Обновление текущей записи;

Включение записи в связь;

Исключение записи из связи;

Изменение связей и т.д.

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

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


Реляционная модель данных



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

Реляционная модель данных (РМД) некоторой предметной области представляет собой набор отношений, изменяющихся во времени. При создании информационной системы совокупность отношений позволяет хранить данные об объектах предметной области и моделировать связи между ними. Элементы РМД и формы их представления приведены в таблице 2.



Таблица 2. 

Элементы реляционной модели

Элемент реляционной модели

Форма представления

Отношение

Таблица

Схема отношения

Строка заголовков таблицы (заголовок таблицы)

Кортеж

Строка таблицы

Сущность

Описание свойств объекта

Атрибут

Заголовок столбца таблицы

Домен

Множество допустимых значений атрибута

Значение атрибута

Значение поля в записи

Первичный ключ

Один или несколько атрибутов

Тип данных

Тип значений элементов таблицы



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

Сущность есть объект любой природы, данные о котором хранятся в базе данных. Данные о сущности хранятся в отношении.

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

В общем случае порядок картежей в отношении, как и в любом множестве, не определен. Однако, в реляционных СУБД для удобства кортежи все же упорядочивают. Для этого выбирают некоторый атрибут, по которому система автоматически сортирует кортежи (записи) по убыванию или возрастанию. Если пользователь не назначает атрибута упорядочивания, то система автоматически присваивает номера кортежам в порядке их добавления. Формально, если переставить атрибуты в отношении, то получится новое отношение. Однако в реляционных БД простановка атрибутов к этому результату не приводит.

Домен представляет собой множество всех возможных значений определенного атрибута отношения. Например, отношение «Сотрудник» включает 4 домена. Домен 1- содержит фамилии всех сотрудников, домен 2 – номера всех отделов фирмы, домен 3 – названия всех должностей, домен 4 – даты рождения всех сотрудников. Каждый домен образует значения одного типа, например, символьные или числовые, из всех записей отношения.

Схема отношения (заголовок отношения) представляет собой список имен атрибутов. Множество собственно кортежей отношения часто называют содержимым (телом) отношения.

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

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

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

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

Ключи обычно используются для следующих целей:

Исключение дублирования значений в ключевых атрибутах;

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

Ускорение работы с кортежами отношения;

Организации связывания таблиц;

Кроме первичного ключа в реляционной модели имеется внешнего ключа. Пусть в отношении R1 имеется не ключевой атрибут A, значения которого являются значениями ключевого атрибута B отношения R2, тогда атрибут A отношения R1 является внешним ключом. С помощью внешних ключей устанавливаются связи между отношениями. Реляционная модель накладывает на внешние ключи ограничение для обеспечения целостности данных, называемое ссылочной целостностью. Это означает, что каждому значению внешнего ключа обязательно должно быть поставлено в соответствие хотя бы одно значение в связываемом отношении.

Для ускорения функций поиска и автоматической сортировки записей в реляционных СУБД часто применяются индексы.

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

Индекс играет роль оглавления таблицы, просмотр которого предшествует обращению к записям таблицы. Ключевые поля во многих СУБД индексируются автоматически. Индексы, создаваемые пользователями для не ключевых полей, часто называют вторичными (пользовательскими) индексами. 

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

Как отмечалось выше, в реляционных базах данных широко используется связывание таблиц. При связывании двух таблиц выделяют основную и подчиненную таблицы. Логическое Связывание производится при помощи ключа связи. Ключ связи, по аналогии с обычным ключом таблицы, состоит из одного или нескольких полей, которые называют полями связи (ПС).

Вообще, суть связывания состоит в установлении соответствия полей связи основной и подчиненной таблицы.

В зависимости от того, как определены поля связи основной и подчиненной таблицы (как соотносятся поля связи к ключевым полям), между двумя таблицами могут устанавливаться следующие четыре основных вида связи (характеристика видов связей приведена в таблице 3):

Связь «ОДИН К ОДНОМУ» (1:1). Связь вида 1:1 образуется в случае, когда все поля связи основной и подчиненной таблицы являются ключевыми. Поскольку значения в ключевых полях не повторяются, обеспечивается взаимо-однозначное соответствие записей из этих таблиц. Сами таблицы при использовании такого вида связи становятся равноправными. На практике связь вида 1:1 используется сравнительно редко, так как хранимую в двух таблицах информацию, в этом случае, легко объединить в одну, что позволяет сэкономить ресурсы компьютера.

Связь «ОДИМ КО МНОГИМ» (1:М). Связь вида 1:М имеет место в случае, если когда одной записи основной таблицы ставится в соответствие несколько записей подчиненной таблицы.

Связь «МНОГИЕ К ОДНОМУ» (М:1). Этот вид связи образуется, если одной или нескольким записям основной таблицы ставится в соответствие одна запись подчиненной таблицы. Вид связи (1:М или М:1) зависит от того, какая таблица является основной, а какая подчиненной

Связь «МНОГИЕ КО МНОГИМ» (М:М). Самый общий вид связи М:М возникает в случаях, когда нескольким записям основной таблицы ставится в соответствие несколько записей подсиненной таблицы. Очевидно, аналогично связи 1:1, связь М:М, делает связываемые таблицы по сути равноправными.



Таблица 3

Характеристика видов связей таблиц в РМД

Характеристика полей связи по видам



1:1



1:М



М:1



М:М

Поля связи основной таблицы

Являются ключом

Являются ключом

Не являются ключом

Не являются ключом

Поля связи подчиненной таблицы

Являются ключом

Не являются ключом

Являются ключом

Не являются ключом



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

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

Каждой записи связанной таблицы соответствует нуль или более записей подчиненной таблицы;

В подчиненной таблице не должно быть записей, ссылающихся на несуществующие записи в основной таблице;

Существует три основные операции над данными двух связанных таблиц.

Ввод новых записей;

Модификация записей;

Удаление записей;

Рассмотрим некоторые методы организации контроля ссылочной целостности, с учетом этих операций.

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

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

Редактировать записи, у которых нет подчиненных записей. Если есть подчиненные записи, то блокировать изменение полей связи;

Изменение в полях связи основной таблицы мгновенно передавать во все поля связи всех записей подчиненной таблицы (каскадное обновление).

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

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

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



Системы программирования Borland Delphi, как средства разработки приложений баз данных



Как отмечалось выше, среда визуального программирования Borland Delphi является одним из лучших средств для разработки приложений баз данных. Этому способствует и поддержка множества технологий, архитектур БД, и наиболее распространенных моделей данных, и гибкость языка Object Pascal, и многое другое. Кроме того, Borland Delphi – это средство написания программ, т.е. при помощи Delphi пишутся внешние приложения баз данных, что позволяет реализовать дополнительную функциональность приложения и обеспечить наиболее точное соответствие требованиям заказчика.

Рассмотрим основные механизмы построения приложений баз данных, используемые в Borland Delphi 7.0.



Механизмы Delphi для организации доступа к данным 

Характерной особенностью большой части программ, созданных с помощью Delphi и предназначенных для работы с базами данных, является их зависимость от специальной библиотеки программ, которая называется BDE (Borland Database Engine – машина баз данных корпорации Borland). BDE представляет собой набор динамических библиотек DLL, предназначенных для низкоуровневого доступа к данным самых различных форматов. BDE «умеет» работать с таблицами самых распространенных СУБД, как файл-серверных (dBase, Paradox, FoxPro, Clipper), так и клиент-серверных (InterBase, Microsoft SQL Server, Oracle и др.). Без установки и регистрации BDE на компьютере не может работать ни одна программа БД, созданная в Delphi версий от 1 до 4 . Это обстоятельство существенно затрудняет распространение, созданных с помощью Delphi, программ, так как в месте с программой должна поставляться и библиотека BDE.

Начиная с пятой версии в среде Delphi доступны и другие технологии, позволяющие обойтись и без BDE – ADO, InterBase Express и dbExpress.

Так как при разработки программы «D-Art Aurora» была использована технология ADO, то далее будет рассматриваться только особенности данной технологии доступа к данным.

Технология ADO (ActiveX Data Objects – объекты данных, построенные как объекты ActiveX) усиленно развивается корпорацией Microsoft. Основные особенности использования технологии ADO не зависят от архитектуры БД: эта технология характерна не только для файл-серверных, но и для клиент-серверных и трехзвенных БД. Основным достоинством технологии ADO является ее естественная ориентация на создание «облегченного» клиента. В рамках этой технологии на машине разработчика устанавливаются базовые объекты MS ADO и соответствующие компоненты Delphi, обеспечивающие поддержку этой технологии. На машине сервера данных устанавливается провайдер данных - некоторая настройка над специальной технологией OLE DB, «понимающая» запросы объектов ADO и «умеющая» переводить эти запросы в нужные действия над данными. Взаимодействие компонентов ADO и провайдера данных осуществляется на основе универсальной для Windows технологии ActiveX, причем провайдер реализуется как COM-сервер, а ADO-компоненты - как COM-клиенты. Так же на машине сервера создается и размещается источник данных. В случае файл-серверных систем отдельные таблицы типа dBase, FoxPro, Paradox и т.п. должны управляться соответствующим ODBC-драйвером, а в роли провайдера используется Microsoft OLE DB Provider for ODBC drivers. Для файлов БД, созданных в Microsoft Access необходимо использовать Microsoft Jet 4.0 OLE DB Provider, и такая БД будет управляется машиной баз данных Microsoft Jet 4.0 Database Engine. Если используется промышленный сервер данных Oracle или MS SQL Server, данные не нуждаются в какой-либо дополнительной обработке, а в роли провайдера используется соответственно Microsoft OLE DB Provider for Oracle или Microsoft OLE DB Provider for SQL Server. Не трудно обнаружить и явный недостаток технологии ADO – она не может использоваться, если для соответствующей структуры данных не создан нужный провайдер или ODBC-драйвер.



ADO-компоненты Delphi для организации доступа к данным



1) Связной компонент TADOConnection. Этот компонент осуществляет связь остальных компонентов с ADO. После того, как с помощью этого компонента связь с данными установлена, на него могут ссылаться другие компонент, разделяя установленную связь. Однако роль компонента TADOConnection гораздо шире, чем просто концентрация соединений. С помощью своих свойств и методов он может осуществлять точную настройку соединения, обеспечивать необходимый уровень изоляции транзакций, управлять транзакциями и т.д.

2) Компонент TADOTable. Данный компонент предназначен для организации доступа непосредственно к таблицам базы данных с помощью свойства TableName, доступ к которой осуществляется либо самостоятельно – через свойство ConnectionString, либо через компонент TADOConnection, который имеет такое свойство. При помощи широкого набора методов этого компонента можно осуществлять добавление, редактирование, удаление записей соответствующей таблицы базы данных, перемещение по записям, как непосредственно, так и с помощью методов поиска и фильтрации данных. Кроме того данных компонент, обеспечивает доступ ко всем полям подключенной таблицы и позволяет непосредственно изменять и считывать значения каждого поля для текущей записи; так же компонент TADOTable предоставляет широкие возможности по созданию объектов для вычисляемых полей (значения формируются на основе значений других полей) и постановочных полей.(значения берутся из других таблиц базы данных). При необходимости данный компонент может организовать работу с таблицей базы данных в режиме кэширования изменений (предоставляет возможность отката сделанных в таблице изменении – работа с виртуальной копией таблицы).

3) Компонент TADODataSet. Этот компонент предназначен для обеспечения доступа к одной или нескольким таблицам базы данных с помощью SQL-запроса типа SELECT, то есть компонент может обращаться не только к одно, но сразу к нескольким таблицам базы данных, в отличие от компонента TADOTable.

4) Компонент TDataSource (находится на вкладке «Data Access»). Данный компонент предназначен для связывания компонентов обеспечивающих получение данных и базы (TADOTable, TADODataSet, TADOQuery) с компонентами, позволяющими визуализировать эти данные (см. ниже). 

5) Компонент TADOQuery. Этот компонент предназначен для формирования и выполнения запросов SQL различной структуры и сложности к таблицам базы данных, подключение к которой, так же как и других компонентов, осуществляется с помощью компонента TADOConnection или свойства ConnectionString. Данный компонент позволяет сформировывать и выполнять запросы на выборку данных (SELECT), добавление (INSERT), удаление (DELETE) и обновление (UPDATE). Кроме того, имеется возможность использования параметров вместо конкретных значений при выполнении различных запросов. Для выполнения запросов типа SELECT используется метод Open и при этом может использоваться визуализирующий компонент для отображения результатов запроса. Для выполнения запросов, которые не возвращают значений, используется метод ExecSQL. С помощью этого компонента так же можно выполнять запросы на создание таблиц (CREATE) в базе данных.



Компоненты Delphi для визуализации данных



1) Компонент TDBGrid (сетка) – отображает содержимое наборов данных (компонентов, обеспечивающих доступ к данным БД), в которой столбцы соответствуют полям набора данных, а строки записям. С помощью данного компонента программист может создать возможные значения поля таблицы, управлять отображением данных, защитить данные от редактирования (предоставить только возможность просмотра), организовать удаление нескольких выбранных записей из отображаемой таблицы.

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

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

3) Компонент TDBEdit. С помощь этого компонента можно как отображать значение некоторого поля текущей записи, так и редактировать это значение. При вводе значения программа автоматически следит за тем, чтобы оно соответствовало формату редактируемого поля (число, дата, время и т.п.).

4) Компонент TDBCheckBox. Этот компонент представляет собой флажок, значение истинности (вкл./выкл.) зависит от содержимого логического поля (Истина/Ложь), значение которого этот компонент отображает. Кроме того, данный компонент может работать и с текстовыми полями, однако для этого необходимо указать значения символов для истинности (вкл.) и неистинности (выкл.).

5) Компонент TDBMemo. Компонент предназначен для отображения и редактирования мемо-полей (полей содержащих многострочную текстовую информацию). Данные для отображения берутся из соответствующих полей таблицы базы данных.

6) Компонент TDBNavigator. Вообще-то, строго говоря, данный компонент не предназначен для непосредственного отображения данных. Его назначение – дать пользователю удобное средство перемещения по записям некоторой таблицы базы данных и облегчить ему такие действия, как вставка новой записи (отмену добавления), а так же редактирование (отмену редактирования) и удаление текущей записи. Однако этот компонент может использоваться и быть полезен только вместе с визуализирующими компонентами.


ГЛАВА 2. ПРАКТИЧЕСКАЯ ЧАСТЬ



Назначение разработки



Программа САЗПД «АВРОРа версия 1.0» предназначена для автоматизации заполнения различного рода финансовой (первичной) документации, хранения информации об этой документации в базе данных, формирования бумажной формы документов, различного рода отчетов, автоматизации обработки хранимой информации. В общем смысле программа предназначена для облегчения рутинной работы по заполнению финансовой документации и обработке информации, относящейся к этим документам, и не является автоматизированной системой ведения компьютерной бухгалтерии.



Составные части программы



Вся разработка программы состояла из двух основных этапов: проектирование и разработка непосредственно структуры базы данных в Microsoft Access XP и создание программной оболочки приложения баз данных в Borland Delphi 7.0.

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

База данных состоит из трех файлов баз данных Microsoft Access XP. Первый файл (Nuclls.mdb) предназначен непосредственно для хранения информации электронных форм первичных документов (накладных), второй файл (Lists.mdb) предназначен для хранения информации для списков подстановки, третий файл (Querys.mdb) предназначен для хранения временной информации во время работы с запросами (см. ниже). Разделение базы данных на три составляющих файла сделано для обеспечения большей сохранности информации и повышения ее делимости. 

В файле Nuclls.mdb хранятся две таблицы (N_General и N_MIO), эти таблицы связаны связью «Один ко многим» - одной записи в таблице N_General соответствует одна или несколько записей в таблице N_MIO. Первая таблица предназначена для хранения общей информации по накладным, а вторая предназначена для хранения информации по товарам на конкретную накладную, если она предусматривает содержание нескольких товаров.

В файле Lists.mdb хранятся следующее таблицы: Tab_Clients (Список клиентов), Tab_Opt_FIO (Список Ф.И.О. отпускающих), Tab_Opt_STAT (Список должностей отпускающих), Tab_Pol (Список должностей получателей), Tab_Work (Список наименований товаров и услуг). При запуске программы, во время загрузки базы данных содержимое этих таблиц загружается в соответствующие списки подстановки.

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

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

Все приложение состоит из одного запускного файла (непосредственно программы – файла Aurora.exe) и двух вспомогательных динамических библиотек DLL (файлы String_DLL.dll и modal_forms.dll). Последние загружаются в память по мере надобности. Первая библиотека содержит функции для обработки строковой информации, а вторая содержит некоторые модальные формы, которые пользователь может использовать гораздо реже, чем остальные окна. Разделение всего приложения на три основных части сделано для снижения объема занимаемого приложением в памяти компьютера. Это сделано потому, что пользователь может использовать некоторые функции программы сравнительно редко, а содержание всех этих функций в одном запускном файле приведет к значительному его увеличению. 

Вся программа представляет собой многооконное приложение, состоящее из главного окна и рабочих окон. Кроме того, при разработке программы для компонентов, связывающих приложение с базой данных, был выделен отдельный модуль – модуль данных. Для связи приложения с файлами базы данных используются компоненты TADOConnection, TADOTable, TDataSource, а так же провайдер данных Microsoft Jet 4.0 OLE DB Provider. Для обеспечения некоторых сервисных функций используются компоненты TADOQuery. В некоторых таблицах TADOTable созданы вычисляемые поля для получения результатов вычислений на основании значений других полей, в частности сумм НДС без НДС и итоговой суммы на основании суммы накладной введенной пользователем. Работа с базой данных происходит в режиме кэширования изменений, т.е. любое изменение базы данных можно отменить до сохранения или выполнения другого изменения. 

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

Окно таблицы накладных состоит из панели инструментов (TToolBar), которая содержит кнопки редактирования таблицы (добавить, удалить, редактировать, сохранить), а так же кнопка изменения вида окна и кнопка отката сделанных изменений. Так же окно содержит визуализирующие компоненты, позволяющие представить хранящуюся в таблицах базы данных информацию в полях редактирования (компоненты TDBEdit, TDBComboBox, TDBCheckBox), а так же компонент TDBGrid, отображающий непосредственно таблицу накладных.

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

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

Условия запроса записываются в записях таблицы базы данных Querys.mdb, сформулированные условия проверяются и записываются соответствующим образом в свойство SQL в один из экземпляров компонента TADOTable. После чего выполняется запрос к текущей таблице.

Кроме запросов в программе имеется возможность выполнения поиска и фильтров различной сложности. Для этого используется отдельная форма. Определяется текущая таблица и для этой таблицы в случае использования поиска применяется метод компонента TADOTable – Locate, соответствующего этой таблице, а в случае фильтрации соответствующим образом изменяется свойство Filter этого компонента.

В программе имеется возможность создания печатных форм хранимых документов. Для этого предусмотрено отдельное окно. Печатная форма формируется в отдельном листе отдельной книги Microsoft Excel на основе шаблона, который входит в комплект поставки программы. Исходя из этого для формирования печатной формы необходимо наличие на машине правильным образом установленного сервера Microsoft Excel.

Для выполнения отчетов выделено отдельное окно. При появлении этого окна выполняется запрос через отдельный экземпляр компонента TADOQuery. Запрос выполняется с учётом ранее измененных параметров. Формирование печатной формы отчета, так же как и документов производится в Microsoft Excel.

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


ГЛАВА 3. ПРОГРАММНАЯ И ЭКСПЛУАТАЦИОННАЯ ДОКУМЕНТАЦИЯ



ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ



Техническое задание (ГОСТ 19.201-78)



Введение



	Система ароматизации заполнения первичной документации (САЗПД «АВРОРа версия 1.0») предназначена для автоматизации процесса заполнения финансовой (первичной) документации предприятия, хранения, обработки, поиска и сортировки информации по этой документации, получения бумажных форм, заполненных документов, организации удобных форм хранения информации по данной документации и т.д.

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

	

	Основание для разработки

	

	Документ, на основании которого ведется разработка: 

Приказ по Смоленскому промышленно-экономическому колледжу от 31-го октября 2003-го года за № «3» «О допуске выполнения курсовой работы».

Организация, утвердившая документ:

Смоленский промышленно-экономический колледж. 31-го октября 2003-го года.

Тема разработки:

«Система автоматизированного заполнения первичной документации». САЗПД «АВРОРа версия 1.0»



Назначение разработки



Программа САЗПД «АВРОРа версия 1.0» предназначена для автоматизации заполнения различного рода финансовой (первичной) документации, хранения информации об этой документации в базе данных, формирования бумажной формы документов, различного рода отчетов, автоматизации обработки хранимой информации. В общем смысле программа предназначена для облегчения рутинной работы по заполнению финансовой документации и обработке информации, относящейся к этим документам, и не является автоматизированной системой ведения компьютерной бухгалтерии.



Требования к программе



Требование к функциональным характеристикам:

Программа должна обеспечивать следующие функции:

		Обеспечить заполнения электронной формы документов.

		Обеспечить сохранение электронной формы документов на дисковом носителе информации в виде таблиц баз данных.

		Обеспечить возможность многократного изменения и добавления электронных форм документов.

		Обеспечить возможность откат сделанных изменений.

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

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

		Обеспечить многооконный интерфейс.

		Обеспечить возможность изменения параметров среды.

		Обеспечить возможность многофункционального поиска и фильтра хранимой информации.

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

		Обеспечить резервное копирование базы данных.

		Обеспечить возможность создания печатных форм документов.

		Обеспечить возможность формирования и печати отчётов о проделанной работе.

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

Требования к надежности:

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

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

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

Условия эксплуатации:

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

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

Требования к составу и параметрам технических средств:

Для нормального функционирования программы необходим следующий набор минимальных технических характеристик системы:

		Процессор – Intel Pentium MMX, с тактовой частотой не менее 233 MHz.

		ОЗУ – Не менее 32-х Mb SDRAM – памяти.

		Свободное дисковое пространство – не менее 15 Mb (Файловая система FAT32).

		SVGA-монитор c поддержкой режима 800Х600 точек.

		 Накопитель CD-ROM (для инсталляции программы).

		Операционная система Windows 98 SE/ME/2000/XP

		Клавиатура, мышь.


Стадии и этапы разработки



Таблица 4 

Стадии и этапы разработки программы

Стадии разработки

Этапы разработки

Содержании работ

Техническое задание

1. Обоснование необходимости разработки программы.

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



2. Научно-исследовательская работа.

Данная задача имеет несколько способов решения, однако наиболее удобным и надежным способом является хранение информации в таблицах базы данных и организация СУБД, именно поэтому этот способ и был выбран на данном этапе. Кроме того, на этом этапе были определены структуры входных и выходных – в технических качестве входных данных было решено использовать логические переменные и логические массивы, так же в качестве входных данных выступают данные, вводимые пользователем. Выходными значениями являются данные, полученные при обработке данных пользователя, а так же значения логических переменных, которые были изменены в ходе работы программы.



3. Разработка и утверждение технического задания.

На данном этапе были более детально проработаны, определены и добавлены требования к программе. Был произведен выбор языка программирования (выбор пал на Delphi 7.0), так же были установлены стадии, этапы и сроки разработки. На этапе было согласовано и утверждено техническое задание.

Эскизный проект.

1. Разработка эскизного проекта.

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



2.Утверждение эскизного проекта.

На данном этапе была разработана пояснительная записка, а так же проведено согласование и утверждение эскизного проекта

Технический проект.

1.Разработка технического проекта.

На данном этапе проведено уточнение и более детальная проработка структуры входных и выходных данных. Был доработан и уточнен алгоритм решения задачи. Разработана структура программы – было решено использовать многооконный интерфейс, и в качестве механизма доступа к данным было решено перейти на InterBase 6.5. В качестве формы представления входных и выходных технических данных решено использовать логические массивы и переменные. 



2.Утверждение технического проекта

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

Рабочий проект

1. Разработка программы 

На данном этапе начата непосредственная разработка и отладка программы на выбранном языке программирования.



2. Разработка программной документации.

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



3. Испытания программы.

Проведено согласование и утверждение методики испытаний. Осуществлено тестирование программы и корректировка программы и программных документов по результатам испытаний

Внедрение

1. Подготовка и передача программы.

На данном этапе проведена передача программы и программной документации для сопровождения. Была осуществлена разработка программы установки, а так же установка программы и её настройка.



3.2 Спецификация



Обозначение

Наименование

Компоненты

А..В. 00004 - 01

Система автоматизированного заполнения первичной документации предприятия (САЗПД «АВРОРа версия 1.0»)

Документация

А..В. 00004 – 01_12_01

Текст программы

А..В. 00004 – 01_13_01

Описание программы

A..B. 00004 – 01_20_01

Ведомость эксплуатационных документов

А..В. 00004 – 01_31_01

Описание применения

А..В. 00004 – 01_32_01

Руководство системного программиста

А..В. 00004 – 01_33_01

Руководство программиста

А..В. 00004 – 01_34_01

Руководство оператора

А..В. 00004 – 01_46_01

Руководство по техническому обслуживанию

А..В. 00004 – 01_51_01

Программа и методика испытаний




Текст программы А.В. 00004-01_12_01 (ГОСТ 19.401-78)



Текст программ содержит записи программы (исходные тексты) с необходимыми комментариями. При желании текст разработанной программы можно просмотреть, открыв приложение № Ч. 



Описание программы А.В. 00004-01_13_01 (ГОСТ 19.402-78)



Общие сведения

Обозначение и наименование программы: 

А.В. 00004 – 01, Система автоматизированного заполнения первичной документации предприятия (САЗПД «АВРОРа версия 1.0».).

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

САЗФД «АВРОРа версия 1.0» - программа, созданная для работы под управлением операционных систем Windows 98 SE/ME/2000/XP. Для правильного и полного функционирования программы, помимо всех компонентов САЗПД «АВРОРа версия 1.0», необходимо следующее программное обеспечение:

		Поставщик данных Microsoft Jet 4.0 OLE DB Provider.

		Пакет программ Microsoft Office 97 и выше.

Языки программирования:

Исходные тексты САЗПД «АВРОРа версия 1.0» и всех библиотек DLL написаны при помощи системы визуального программирования Borland Delphi версии 6 и 7 на языке Object Pascal. Все запросы к таблицам базы данных написаны при помощи языка написания запросов SQL.

Функциональное назначение.

САЗПД «АВРОРа версия 1.0» предназначена для автоматизации заполнения финансовой (первичной) документации предприятия, хранения, обработки и автоматизации использования информации по данной документации (составление различного рода отчётов, групп и т.д.). Однако, программа не может и не должна использоваться в качестве автоматизированной системы ведения компьютерной бухгалтерии.



Описание логической структуры



Программа САЗПД «АВРОРа версия 1.0» представляет собой многооконное приложение, которое содержит главное окно и несколько дочерних, каждый вид документа для заполнения и работы с ним имеет отдельное дочернее окно, которое вызывается нажатием соответствующей кнопки на панели инструментов или при выборе специально предназначенного для этого пункта меню. Для каждого вида документа выделена отдельная база данных, в таблицах которой и хранятся все сведенья о заполненных документах. При работе с программой используются стандартные алгоритмы работы с базами данных – добавление, удаление, правка, сохранение информации, откат сделанных изменений, сортировка, поиск, фильтр записей, выполнение различного рода запросов, составление отчетов, организация пользовательского интерфейса и т.д. Для удобства заполнения финансовой документации применяются списки, содержащие информацию различного рода (заказчики, должности, виды работ и услуг). Для редактирования этих списков программа имеет специальное средство - «Редактор списков». Это средство можно вызвать как из любого открытого окна заполнения документов, так и из главного окна. Все данные списков хранятся в отдельной базе данных.

Для формирования печатной формы документов, отчетов и других печатных форм, программа использует COM-сервера из состава пакета программ корпорации Microsoft – «Microsoft Office» (MS Excel). 




Используемые технические средства



Для работы программы в нормальном режиме требуются следующие системные характеристики IBM PC – совместимого компьютера, работающего под управлением операционной системы Windows 98 SE/ME/2000/XP:

		Процессор Intel Pentium MMX – 233 MHz.

		Объем оперативной памяти – не менее 32-х Mb.

		Не менее 15 Мб свободного дискового пространства (файловая система FAT32).

		Для работы со съемными носителями – соответствующие устройства чтения/записи информации на эти носители.



Вызов и загрузка



Программа вызывается с любого дискового носителя данных стандартной процедурой загрузки программы в оперативную память, принятой в операционной системе Windows 98 SE/ME/2000/XP (только при правильной установке программы). При работе программа так же использует динамически загружаемые библиотеки (DLL), загружает их в память и выгружает их самостоятельно.

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

Программа занимает на диске около 15 Мб (Файловая система FAT 32). При работе объем используемой оперативной памяти изменяется в зависимости от загрузки (выгрузки) различных компонентов программы (DLL).




Входные и выходные данные



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

В основном все переменные, используемые программой (технические данные), представляют собой элементы логических массивов, а так же обычные логические переменные, значение которых меняется с 1 на 0 (с «истинно» на «ложно»), и наоборот, в зависимости от действий пользователя. Данные переменные объявлены в заголовках различных модулей программы и являются глобальными переменными, что позволяет использовать их во всех модулях программы.

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



Прорамма и методика испытаний А.В. 00004 – 01_51_01



Объектами испытаний программы являются:

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

Методы работы созданного средства управления базами данных (СУБД) – организация корректности и непротиворечивости данных, находящихся в таблицах базы данных. Организация ссылочной целостности (каскадное удаление, и изменение данных в связанных таблицах) в связанных таблицах базы данных – каскадное изменение и редактирование данных. Программа должна обеспечить высокое качество и достоверность хранимой информации и при каждом конкретном изменении хранимой информации.

Корректность работы основных функций программы.

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

		Корректность работы сервисных функций программы

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

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

В качестве средств проведения испытаний используются IBM PC – совместимые компьютеры, работающие под управлением ОС Windows 98 SE/ME/2000/XP. Некоторые результаты проведенных тестов содержатся в ПРИЛОЖЕНИИ 3. ЭКСПЛУАТАЦИОННАЯ ДОКУМЕНТАЦИЯ



Ведомость эксплуатационных документов А.В. 00004 – 01_20_01 (ГОСТ 19.507-79)



Таблица 4

Стадии и этапы разработки программы

Обозначение

Наименование

Кол экз.

Местонахождение

А..В. 00004 – 01_31_01

Описание применения

1

Папка №1

А.В. 00004 – 01_32_01

Руководство системного программиста

1

Папка №1

А..В. 00004 – 01_33_01

Руководство программиста

1

Папка №1

А..В. 00004 – 01_34_01

Руководство оператора 

1

Папка №1

А..В. 00004 – 01_46_01

Руководство по техническому обслуживанию

1

Папка №1



Описание применения А.В. 00004-01_31_01 (ГОСТ 19.502-78)



Назначение программы



Программа САЗПД «АВРОРа версия 1.0» предназначена для автоматизации заполнения различного рода финансовой (первичной) документации, хранения информации об этой документации в базе данных, формирования бумажной формы документов, различного рода отчетов, автоматизации обработки хранимой информации. В общем смысле программа предназначена для облегчения рутинной работы по заполнению финансовой документации и обработке информации, относящейся к этим документам, и не является автоматизированной системой ведения компьютерной бухгалтерии.




Условия применения



Для нормального функционирования программы необходим IBM PC – совместимый компьютер, работающий под управлением операционной системы Windows 95/98 и имеющий следующий набор минимальных технических характеристик:

		Процессор – Intel Pentium MMX, с тактовой частотой не менее 233 MHz.

	ОЗУ – Не менее 32-х Мегабайт SDRAM – памяти.

	Свободное дисковое пространство – не менее 15-ти Мегабайт (файловая система FAT32).

	SVGA-монитор c поддержкой режима 800Х600 точек.

	 Накопитель CD-ROM (для инсталляции программы). 

	Клавиатура, мышь.

Для работы программы так же требуется следующий набор программных средств:

		Поставщик данных Microsoft Jet 4.0 OLE DB Provider – необходим для обеспечения работоспособности СУБД.

		Пакет программ корпорации Microsoft – «Microsoft Office», начиная с версии «Microsoft Office 97», необходим для формирования печатных форм заполняемых документов.



Описание задачи



Программа должна выполнять основные три задачи:

		Заполнение электронной формы документов и хранение всей необходимой информации по данным документов. Осуществление обработки этой информации, и её автоматизированного поиска.

Данная задача решается с помощью методов хранения и обработки информации в базах данных. Задача автоматизированного поиска необходимой информации решается с помощью выполнения фильтров и различного рода запросов SQL.

		Формирование печатной формы документов.

Данная задача решается с помощью приложения из пакета программ корпорации Microsoft, «Microsoft Office» - MS Excel. Эта программа является COM – сервером и документы, созданные с их помощью заполняются информацией по конкретному документу, которая хранится в базе данных. Далее распечатать, или как-то изменить полученную печатную форму документа можно при помощи широких возможностей указанной выше программы.

		Формирование различного рода отчётов по хранящейся информации.

Отчёты по хранящейся информации формируются при помощи создания необходимых запросов к базам данных (SQL – запросов) и способов создания печатных форм, описанных выше при решении второй задачи.



Входные и выходные данные



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

В основном все переменные, используемые программой (технические данные), представляют собой элементы логических массивов, а так же обычные логические переменные, значение которых меняется с 1 на 0 (с «истинно» на «ложно»), и наоборот, в зависимости от действий пользователя. Данные переменные объявлены в заголовках различных модулей программы и являются глобальными переменными, что позволяет использовать их во всех модулях программы.

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

Руководство системного программиста А.В. 00004 – 01_32_01 (ГОСТ 19.503-79)



Структура программы



Программа представляет собой многооконное приложение. Различные функции программы вызываются нажатием соответствующих кнопок на панелях инструментов гланого окна или выбором соответствующего пункта главного меню программы. Эти функции реализованы на отдельных окнах приложения. Из главного окна осуществляется вызов всех этих окон. Связь с файлами базы данных осуществляется через технологию ADO (Active Data Object – объекты данных как объекты ActiveX) и провайдер данных Microsoft Jet 4.0 OLE DB Provider. Подробнее о структуре программы см. в главе 2. 

Как отмечалось выше, программа позволяет формировать печатные формы документов, хранимых в электронной форме. Для этого необходимо наличие на компьютере правильно установленного пакета программ Microsoft Office (в состав обязательно должен входить табличный процессор MS Excel) не менее версии Microsoft Office 97. Именно из среды MS Excel и можно производить печать сформированных там печатных форм документов.




Настройка программы



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

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

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



Проверка программы



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

Для проверки работоспособности основных функций программы необходимо провести пробное использование этих функций.

Дополнительные возможности программы

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

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



Руководство программиста А.В. 00004 – 01_33_01 (ГОСТ 19.504-79)



Характеристики программы

1. Системные требования:

			Процессор – Pentium MMX 233 MHz.

	ОЗУ – не менее 32-х Мб SDRAM – памяти.

	Не менее 15-ти Мб свободного дискового пространства (файловая система FAT 32).

	SVGA-монитор с поддержкой режима 800Х600 точек

	CD-ROM – для установки программы.

	Клавиатура, мышь.

2. Программные требования:

ОС Windows 98 SE/ME/2000/XP

Провайдер данных Microsoft Jet 4.0 OLE DB Provider

Пакет программ Microsoft Office

3. Режимы работы: 

	Программа работает только в режиме обслуживания локальной базы данных.

4. Общие характеристики:

	Общий объем – 7 МБ

	Объем в памяти (включая DLL) – 11 МБ

	Формат файлов БД – MS Access 2000

	Используемый COM-сервер – MS Excel



Обращение к программе



Вызов программы производится стандартной процедурой загрузки программ, предусмотренной в ОС Windows. Библиотеки DLL загружаются в память по мере необходимости исходя из действий пользователя (необходимость обработки строковых данных, вызов сервисных функций).



Входные и выходные данные



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

В основном все переменные, используемые программой (технические данные), представляют собой элементы логических массивов, а так же обычные логические переменные, значение которых меняется с 1 на 0 (с «истинно» на «ложно»), и наоборот, в зависимости от действий пользователя. Данные переменные объявлены в заголовках различных модулей программы и являются глобальными переменными, что позволяет использовать их во всех модулях программы.

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



Руководство оператора А.В. 00004 – 01_34_01 (ГОСТ 19.505-79)



Назначение программы

Программа САЗПД «АВРОРа версия 1.0» предназначена для автоматизации заполнения различного рода финансовой (первичной) документации, хранения, обработки, сортировки информации, по данной документации, организации автоматизированного поиска, фильтрации и добавления данной информации. Кроме того, программа предназначена для формирования печатных форм заполняемых форм документов, по готовым шаблонам. Однако, программа не предназначена для ведения компьютерной бухгалтерии.

Программа должна использоваться на компьютере, работающем под управлением операционной системы – Windows 98 SE/ME/2000/XP.




Условия выполнения программы



Для нормального функционирования программы необходим IBM PC – совместимый компьютер, имеющий следующие минимальные аппаратные средства:

			Процессор – Pentium MMX 233 MHz.

			ОЗУ – не менее 32-х Мб SDRAM – памяти.

			Не менее 15-ти Мб свободного дискового пространства (файловая система FAT 32).

			SVGA-монитор с поддержкой режима 800Х600 точек

			CD-ROM – для установки программы.

			Клавиатура, мышь.

	Кроме того, на компьютере должен быть установлен поставщик данных Microsoft Jet 4.0 OLE DB Provider для работоспособности базы данных. Так же, желательно иметь на компьютере установленный пакет программ Microsoft Office 97 (и выше), для формирования печатных форм документов.



Выполнение программы



Программ загружается в оперативную память путем выполнения стандартной процедуры загрузки программ, предусмотренной в среде операционной системы Windows 98 SE/ME/2000/XP. Для корректного выполнения загрузки программы необходимо наличие всех модулей программы и файлов базы данных. Для нормального выполнения всех функций программы необходимо наличие всех динамически загружаемых библиотек программы. Для завершения программы необходимо завершить все выполняемые операции добавления и правки записей таблиц базы данных, и утвердительно ответить на запрос программы о завершении работы.

Сообщения оператору



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

При выходе из программы выдается запрос пользователю с сообщением «Завершить работу программы?». При этом пользователю предоставляется выбор – выйти из программы или нет. При нажатии кнопки «Да» программа завершает свою работу.

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

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

При переходе пользователя от одной записи к другой, если таблица базы данных находится в режиме добавления/редактирования записей, выдается запрос на сохранение сделанных изменений. Оператор может либо отказаться от сохранения, либо согласиться с на сохранения, либо отказаться от операции.

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

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

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



Руководство по техническому обслуживанию А.В. 00004-01_46_01 (ГОСТ 19.508-79)



Введение

Данное руководство предназначено для организации правильного технического обслуживания программы «D-Art Aurora v.1.0». Для более подробной информации при организации технического обслуживания необходимо использовать следующие документы:

Описание применения

Руководство программиста

Руководство системного программиста



Общие указания



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



Требование к техническим средствам



			Процессор – Pentium MMX 233 MHz.

	ОЗУ – не менее 32-х Мб SDRAM – памяти.

	Не менее 15-ти Мб свободного дискового пространства (файловая система FAT 32).

	SVGA-монитор с поддержкой режима 800Х600 точек

	CD-ROM – для установки программы.

	Клавиатура, мышь.

При данных технических характеристиках программа будет работать без сбоев и с приемлемым быстродействием.



Описание функций



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

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

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


ГЛАВА 4. ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ РАЗРАБОТКИ



Таблица 6

Определение затрат времени по стадиям разработки проекта

Стадия разработки проекта

Затраты времени

Поправочный коэффициент

Затраты времени с учетом поправочного коэффициента



Значение, чел.-дней

Основание

Значение

Основание



Разработка технического задания

30

Табл. 4.1

Норма 2г







Затраты времени разработчика постановки задачи



 

0,65



20

Затраты времени разработчика программного обеспечения





0,35



11

	Разработка эскизного проекта.

35

Табл. 4.2

Норма 2г







Затраты времени разработчика постановки задачи





0,70



25

Затраты времени разработчика программного обеспечения





0,30



11

Разработка техно-рабочего проекта











			Разработка технического проекта, затраты времени разработчика постановки задачи

105

Табл. 4.5

Норма 5е

К1=0,47

К2=1

К3=1,10

К4=0,85

Кобщ.=0,44



46

	Затраты времени разработчика программного обеспечения

30

Табл. 4.6

Норма 5е

К1=0,47

К2=1

К3=1,10

К4=0,85

Кобщ.=0,44



13

Разработка рабочего проекта, затраты времени разработчика постановки задачи

69

Табл. 

Норма 5е

К1=0,40

К2=1,16

К3=1,15

К4=0,80

К5=0,50

Кобщ.=0,21



15

Затраты времени разработчика программного обеспечения.

208

Табл. 

Норма 5е

К1=0,40

К2=1,16

К3=1,15

К4=0,80

К5=0,50

Кобщ.=0,21



44

Внедрение.











 Затраты времени разработчика постановки задачи

58

Табл. 

Норма 5е

К1=1,0

К2=1,16

К3=1,05

К4=0,5

Кобщ.=0,61



35

 Затраты времени разработчика программного обеспечения

59

Табл.

Норма 5е

К1=1,0

К2=1,16

К3=1,05

К4=0,5

Кобщ.=0,61



36



Всего на комплекс задач (только затраты времени разработчика программного продукта)

				115 чел.-дн. = 920 чел.-час.

На основании данных Таблицы 6 получаем значение Тн = 920 чел/час

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

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



Ао = Тн *З/плср * (1 + КЕСН + Кнр) + Смч *Тмо (Ф2) ,



где

	Тн - время на составление программного продукта (920 чел/час)

	З/плср – средняя заработная плата программиста (часовая, дневная или месячная) (25,55 руб/час)

	КЕСН – коэффициент единого социального налога (В соответствии с Налоговым кодексом - Часть II,глава 24, статья 241, ставка составляет 0,356)

	Кнр - Коэффициент накладных расходов, используемый на предприятии. (По данным документации в организации коэффициент накладных расходов составляет 0,4)

	Смч – стоимость одного часа машинного времени

	Тмо – затраты машинного времени на отладку программы 

	

Ао = 920 чел/час * 25,55руб/час*(1+0,356+0,4) + 1,97 * 32 чел/час = 920*25,55*1,756+63,04 = 41339,58 руб.



На полученную сумму начисляется НДС по ставке налога 18%.



41339,58 руб. * 18% = 7441,12 (руб.)

41339,58 руб. + 7441,12 руб. = 48780,70 (руб.)



Стоимость одного машинного часа может быть рассчитана следующим образом:

Стоимость одного машинного часа рассчитывается по формуле:



 (Ф3),



где 

Сбал. – балансовая стоимость ПК, руб; (20000 руб.)

Тсл – нормативный срок эксплуатации ПК (по паспортным данным) (10 лет)

Др – число рабочих дней в году (251 день)

Чд - число часов работы ПК в день (6 час.)

Сэл.эн. - стоимость электроэнергии, которая рассчитывается по формуле: 



 Сэл.эн = Рэл * Цквт (Ф4),



где

Рэл - расход электроэнергии в час (по паспортным данным ПК), квт (0,87квт)

Цквт – стоимость (цена) квт. Часа электроэнергии (1,86 руб.)



Сэл.эн = 0,87 квт * 1,86 руб. =1,62 руб.



Таким образом, стоимость одного машинного часа будет равна:



Смч = 20000 руб./(10 лет*251 день*6 час) + 1,62 руб. = 2,95 (руб.)



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



Э= З1 - З2 (Ф5), 



где

З1 - элементы производственных затрат, связанные с использованием заменяемой информационной технологии (или традиционного способа решения задачи);

З2 - элементы производственных затрат, связанные с использованием новой информационной технологии;

Э - снижение себестоимости продукции (работ) после внедрения нового программного продукта (для каждого года его использования).

Затраты могут быть определены по формуле:



З(1,2) =З/пл *Тр*(1+КЕСН+КНР) (Ф6),



Где  З/пл - средняя заработная плата работника (часовая, дневная, месячная), руб.

Тр – трудоемкость решения задачи из расчета за год в чел./час., чел./дн., чел./мес.



Тр1 = 0,25(час) * 2510 док. = 628 час

Тр2 = 0,05(час) * 2510 док. = 126 час

З1=35,25 руб. * 628 час * (1+0,356+0,4)= 38872,57 (руб.)

З2=35,25 руб. * 126 час * (1+0,356+0,4)= 7799,27 (руб.)

Э=38872,57 руб. – 7799,27 руб. = 31073,30 (руб.)



Срок окупаемости программного продукта рассчитывается по формуле:



Ток=А0/Э (Ф7),

где

А - затраты, связанные с созданием программного продукта

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



Ток=48780,70 руб. / 31073,30 руб.  1,6



Для оценки эффективности проекта используются следующие показатели:

Чистый доход (ЧД);

Чистый дисконтированный доход (ЧДД);

Индекс доходности (ИД);

Внутренняя норма доходности (ВНД).

Чистый доход предприятия от реализации инвестиционного проекта представляет собой разницу между поступлениями (притоком средств) и выплатами (оттоком средств) предприятия в процессе реализации проекта применительно к каждому интервалу планирования.

Выплаты организации делятся на капитальные (единовременные) затраты и текущие затраты.

К капитальным затратам относятся расходы, которые направлены на создание производственных мощностей и разработку продукции.

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

Поступления – это результат деятельности предприятия в процессе осуществления проекта в виде выручки от реализации произведенной продукции.

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

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

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

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

	При этом:

	Заранее задается минимально допустимая ставка процента окупаемости (прибыльный процент – норма дисконта), при которой объект инвестирования считается прибыльным. Такой ставкой является ставка банковского процента. Она равна 20 % и условно считается неизменной для всего срока службы объекта инвестирования (Е =0,2)

	Осуществляется дисконтирование (приведение к базисному моменту времени) на основе расчетной ставки процента с текущих поступлений, полученных после приобретения объекта инвестирования (иначе – дисконтированный эффект): 

	

 (Ф8),



где 

 n - срок службы объекта инвестирования (для программных продуктов обычно 3 года); 

t – номер шага расчета (=1,2,3), 

Э1 – текущие годовые поступления в году t т.е.

 (Ф9)



Условно можно считать, что Э1, Э2, Э3 равны между собой (они рассчитываются по формуле Э= З1-З2 эти величины могут корректироваться с учетом инфляции.



Э= 31073,30/(1+0,18)1 + 31073,30/(1+0,18)2 +31073,30/(1+0,18)3 = 67635,33 (руб.)

 

Рассчитывается дисконтированная (чистая) стоимость расходов на приобретение (создание) приложения из величины выручки от инвестиций: 



К = Э-А0

К = 67635,33 руб. - 48780,70руб. = 18854,63 (руб.)



Положительная величина дисконтированной стоимости капитала означает, что проект эффективен (при данной норме дисконта). Чем больше эта величина, тем эффективнее проект.

Отрицательная величина дисконтированной стоимости капитала означает убыточность инвестиций.

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





ИД = 67635,33 руб. / 48780,70руб. = 1,39



Если ИД > 1, то проект эффективен, в противном случае – неэффективен. 

На основании проделанных расчетов можно сделать следующие выводы. 

Чистые затраты на разработку программы «D-Art Aurora v.1.0» составили – 48780,70руб. Полученный показатель К=18854,63руб. положительный. Положительная величина означает, что проект эффективен, чем больше эта величина, тем эффективнее проект. Отрицательная величина означает убыточность инвестиций. Следовательно разработанный проект является эффективным при данной норме дисконта. Срок окупаемости разработанного программного продукта составил 1,6 года. Определенный индекс доходности равен 1,39. Он больше 1. Что также доказывает рациональность и эффективность разработки. Следовательно, внедрение разработанной программы не нанесет убытков организации и является более эффективным решением вложения средств.


ГЛАВА 5. ОХРАНА ТРУДА И ТЕХНИКА БЕЗОПАСНОСТИ



Основные положения



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

На рабочем месте инженера-программиста должны быть созданы условия для высокопроизводительного труда. В настоящее время всё большее применение находят автоматизированные рабочие места, которые оснащаются персональными ЭВМ с графическими дисплеями, клавиатурами и принтерами.

На рабочем месте любой оператор подвергается воздействию следующих неблагоприятных факторов:

	недостаточное освещение;

	электромагнитное излучение;

	выделение избытков теплоты.

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

Развитию утомляемости на производстве способствуют следующие факторы:

	неправильная эргономическая организация рабочего места, нерациональные зоны размещения оборудования по высоте от пола, по фронту от оси симметрии и т.д.;

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


ГЛАВА 6. ЭРГОНОМИКА



Основные положения



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

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

Эргономика – это дисциплина, комплексно изучающая человека (группу людей) в конкретных условиях его (их) деятельности, связанной с использованием технических средств.

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

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



Анализ опасных и вредных производственных факторов

	

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

неблагоприятные климатические условия

недостаточная освещенность помещения

повышенный уровень электромагнитных и электростатических полей

переутомление работающих

опасность поражения электрическим током

опасность возникновения пожара

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



Санитарные нормы



Требования к освещению помещений и рабочих мест с ПЭВМ

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

Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300 - 500 лк. Допускается установка светильников местного освещения для подсветки документов. Местное освещение не должно создавать бликов на поверхности экрана и увеличивать освещенность экрана более 300 лк. 

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

Следует ограничивать отраженную блесткость на рабочих поверхностях (экран, стол, клавиатура и др.) за счет правильного выбора типов светильников и расположения рабочих мест по отношению к источникам естественного и искусственного освещения. При этом яркость бликов на экране ПЭВМ не должна превышать 40 кд/кв. м и яркость потолка при применении системы отраженного освещения не должна превышать 200 кд/кв. м. 

Показатель ослепленности для источников общего искусственного освещения в производственных помещениях должен быть не более 20, показатель дискомфорта в административно общественных помещениях - не более 40, в дошкольных и учебных помещениях - не более 25. Следует ограничивать неравномерность распределения яркости в поле зрения пользователя ПЭВМ, при этом соотношение яркости между рабочими поверхностями не должно превышать 3 : 1 - 5 : 1, а между рабочими поверхностями и поверхностями стен и оборудования - 10 : 1. 

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

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

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

Яркость светильников общего освещения в зоне углов излучения от 50 до 90 градусов с вертикалью в продольной и поперечной плоскостях должна составлять не более 200 кд/кв. м, защитный угол светильников должен быть не менее 40 градусов. Светильники местного освещения должны иметь непросвечивающий отражатель с защитным углом не менее 40 градусов. 

Коэффициент запаса (Кз) для осветительных установок общего освещения должен приниматься равным 1,4. Коэффициент пульсации не должен превышать 5%, что должно обеспечиваться применением газоразрядных ламп в светильниках общего и местного освещения с высокочастотными пускорегулирующими аппаратами (ВЧ ПРА) для любых типов светильников. При отсутствии светильников с ВЧ ПРА лампы многоламповых светильников или рядом расположенные светильники общего освещения следует включать на разные фазы трехфазной сети. 

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



Общие требования к организации рабочих мест



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

Схемы размещения рабочих мест с ПЭВМ должны учитывать расстояния между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), которое должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов - не менее 1,2 м. 

Рабочие места с ПЭВМ в залах электронно-вычислительных машин или в помещениях с источниками вредных производственных факторов должны размещаться в изолированных кабинах с организованным воздухообменом. 

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

Рабочие места с ПЭВМ при выполнении творческой работы, требующей значительного умственного напряжения или высокой концентрации внимания, следует изолировать друг от друга перегородками высотой 1,5 - 2,0 м. 

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

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

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

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

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

Тип рабочего стула (кресла) должен выбираться в зависимости от характера и продолжительности работы с ПЭВМ с учетом роста пользователя. 

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

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

Экран видеомонитора должен находиться от глаз пользователя на оптимальном расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов. 

В помещениях с ПЭВМ ежедневно должна проводиться влажная уборка. 

Помещения с ПЭВМ должны быть оснащены аптечкой первой помощи и углекислотными огнетушителями. 



Требования к организации режима труда и отдыха при работе с ПЭВМ

Режимы труда и отдыха при работе с ПЭВМ должны организовываться в зависимости от вида и категории трудовой деятельности. Виды трудовой деятельности разделяются на 3 группы: группа А - работа по считыванию информации с экрана ПЭВМ с предварительным запросом; группа Б - работа по вводу информации; группа В - творческая работа в режиме диалога с ЭВМ. При выполнении в течение рабочей смены работ, относящихся к разным видам трудовой деятельности, за основную работу с ПЭВМ следует принимать такую, которая занимает не менее 50% времени в течение рабочей смены или рабочего дня. Для видов трудовой деятельности устанавливается 3 категории тяжести и напряженности работы с ПЭВМ, которые определяются: для группы А - по суммарному числу считываемых знаков за рабочую смену, но не более 60000 знаков за смену; для группы Б - по суммарному числу считываемых или вводимых знаков за рабочую смену, но не более 40000 знаков за смену; для группы В - по суммарному времени непосредственной работы с ПЭВМ за рабочую смену, но не более 6 часов за смену. 

Для преподавателей высших и средних специальных учебных заведений, учителей общеобразовательных школ устанавливается длительность работы в дисплейных классах и кабинетах информатики и вычислительной техники не более 4 часов в день. Для инженеров, обслуживающих учебный процесс в кабинетах (аудиториях) ПЭВМ, продолжительность работы не должна превышать 6 часов в день. 

Для обеспечения оптимальной работоспособности и сохранения здоровья профессиональных пользователей на протяжении рабочей смены должны устанавливаться регламентированные перерывы. Время регламентированных перерывов в течение рабочей смены следует устанавливать в зависимости от ее продолжительности, вида и категории трудовой деятельности. Продолжительность непрерывной работы с ПЭВМ без регламентированного перерыва не должна превышать 2 часов. При работе с ПЭВМ в ночную смену (с 22 до 6 часов), независимо от категории и вида трудовой деятельности, продолжительность регламентированных перерывов должна увеличиваться на 60 минут. 

При 8-часовой рабочей смене и работе на ПЭВМ регламентированные перерывы следует устанавливать: для I категории работ - через 2 часа от начала рабочей смены и через 2 часа после обеденного перерыва продолжительностью 15 минут каждый; для II категории работ - через 2 часа от начала рабочей смены и через 1.5 - 2 часа после обеденного перерыва продолжительностью 15 минут каждый или продолжительностью 10 минут через каждый час работы; для III категории работ - через 1.5 - 2 часа от начала рабочей смены и через 1.5 - 2 часа после обеденного перерыва продолжительностью 20 минут каждый или продолжительностью 15 минут через каждый час работы. 

При 12-часовой рабочей смене регламентированные перерывы должны устанавливаться в первые 8 часов работы аналогично перерывам при 8-часовой рабочей смене, а в течение последних 4 часов работы, независимо от категории и вида работ, каждый час продолжительностью 15 минут. 

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

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

Работающим на ПЭВМ с высоким уровнем напряженности во время регламентированных перерывов и в конце рабочего дня, показана психологическая разгрузка в специально оборудованных помещениях (комната психологической разгрузки). 



Требования к помещениям для эксплуатации ПЭВМ



Помещения с ПЭВМ должны иметь естественное и искусственное освещение. 

Естественное освещение должно осуществляться через светопроемы, ориентированные преимущественно на север и северо-восток и обеспечивать коэффициент естественной освещенности (КЕО) не ниже 1,2% в зонах с устойчивым снежным покровом и не ниже 1,5% на остальной территории. Указанные значения КЕО нормируются для зданий, расположенных в III световом климатическом поясе. Расчет КЕО для других поясов светового климата проводится по общепринятой методике согласно СНиП "Естественное и искусственное освещение". 

Расположение рабочих мест с ПЭВМ для взрослых пользователей в подвальных помещениях не допускается. Размещение рабочих мест с ПЭВМ во всех учебных заведениях и дошкольных учреждениях не допускается в цокольных и подвальных помещениях. 

В случаях производственной необходимости эксплуатация ПЭВМ в помещениях без естественного освещения может проводиться только по согласованию с органами и учреждениями Государственного санитарно - эпидемиологического надзора. Площадь на одно рабочее место с ПЭВМ для взрослых пользователей должна составлять не менее 6,0 кв. м, а объем - не менее 20,0 куб. метров. Площадь на одно рабочее место с ПЭВМ во всех учебных и дошкольных учреждениях должна быть не менее 6,0 кв. м, а объем - не менее 24,0 куб. м. 

При строительстве новых и реконструкции действующих средних, средних специальных и высших учебных заведений помещения для ПЭВМ следует проектировать высотой (от пола до потолка) не менее 4,0 метров. При входе в учебное помещение с ПЭВМ в средних и высших учебных заведениях следует предусмотреть встроенные или пристенные шкафы (полки) для хранения портфелей, сумок учащихся и студентов. 

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

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

Учебные кабинеты вычислительной техники или дисплейные аудитории (классы) должны иметь смежное помещение - лаборантскую площадью не менее 18,0 кв. м с двумя входами: в учебное помещение и на лестничную площадку или в рекреацию. 

Для внутренней отделки интерьера помещений с ПЭВМ должны использоваться диффузно - отражающие материалы с коэффициентом отражения для потолка - 0,7 - 0,8; для стен - 0,5 0,6; для пола - 0,3 - 0,5. Полимерные материалы, используемые для внутренней отделки интерьера помещений с ПЭВМ, должны быть разрешены для применения органами и учреждениями Государственного санитарно - эпидемиологического надзора. 



Правила пожарной безопасности



Помещения, в которых проводятся работы с использованием персональных компьютеров, а также сами компьютеры содержат большое количество горючих и легковоспламеняющихся материалов. Поэтому, для устранения опасности возникновения пожара при оборудовании и эксплуатации помещений, предназначенных для работы с ПЭВМ, следует соблюдать “Правила пожарной безопасности Российской Федерации”[2]. В соответствии с этими правилами на 100 м2 площади таких помещений должен располагаться минимум 1 огнетушитель углекислого типа.



Защита рабочих от поражения электрическим током



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

Во время работы нельзя открывать системный блок компьютеров, а также любые работающие периферийные устройства. Не рекомендуется также подключать и/или отключать периферийные устройства от работающих ПЭВМ. Кроме того, рекомендуется использовать устройства, контролирующие изменения напряжения на входе в компьютер и другие устройства.


ЗАКЛЮЧЕНИЕ



В процессе работы над данным дипломным проектом мне пришлось столунуться с рядом достаточно сложных проблем, для решения которых пришлось пополнить некоторые теоретические знания и практические знания, как по общей теории баз данных, так и реализации приложений баз данных в среде визуального программирования Delphi. Именно на данную систему программирования и пал мой выбор после получения технического задания, содержащего все требования к функциональным характеристикам программы. Данный выбор не случаен. Borland Delphi 7.0 является, по-моему грлубочайшему убеждению одной из самых лучших (если не самой лучшей) системой по написанию приложений баз данных. Эта система имеет широкие возможности по реализации СУБД самой различной конфигурации и архитектуры, что в сочетании с гибгим и достаточно структурированным язком программирования Object Pascal дает Delphi огромное преимущество в сравнении с другими подобными системами.

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

Однако, в итоге, после завершения работы над программой, она стала удовлетворять всем требованиям заказчика.

Программа занимает на диске до 15-ти мегабайт. В оперативной памяти программа вместе со всеми загруженными библиотеками DLL занимает 11 килобайт. Так как программа использует технологии баз данных, то это увиличивает требования к свободной оперативной памяти компьютера и минимальным объемом, при котором программа работает с приемлимым быстродействием, составляет 32 мегабайта. 

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

В завершении хочется отметить, что данный проект (программа «D-Art Aurora v.1.0») не будет заброшен и разработка новых версий не заставит себя ждать, возможности программы будут расширены, но основной принцип всех моих программ, «Максимум пользы, при минимуме сложности», останется неизменным.


СПИСОК ЛИТЕРАТУРЫ



		Робинсон С. – Microsoft Access 2000: учебный курс – СПб.: Питер, 2002.

		Валерий Фаронов – Delphi 6: учебный курс – СПб.: Питер, 2002.

		Валерий Фаронов – Программирование баз данных в Delphi 6: учебный курс – СПб.: Питер, 2002.

		Валерий Фаронов – Профессиональная работа в Delphi 6. Библиотека программиста. – СПб.: Питер, 2002

		Елманова Н. – Delphi 6 и технология COM. – СПб.: Питер, 2002

		Базы данных: Учебник для высших учебных заведений /Под ред. проф. А.Д. Хомоненко. – СПб.: КОРОНА принт, 2000


 ПРИЛОЖЕНИЕ 1



«Листинг программы D-Art Aurora v.1.0»



(ПРОЕКТ AURORA.DPR)

{D-Art® Aurora® v.1.0. © D-Art Software Corporation - 2003-2004.

 All Copyrights are protected. Only personal use.

 Not legal sale - is forbidden! }



Program Aurora;





uses

 Forms,

 SysUtils,

 Controls,

 Av_General in 'Av_General.pas' {General},

 Av_Data in 'Av_Data.pas' {P_Data: TDataModule},

 Sub_Program in 'Sub_Program.pas',

 Load in 'Load.pas' {LoadF},

 Av_Nuclls in 'Av_Nuclls.pas' {Nucll},

 Av_DBData in 'Av_DBData.pas' {DB_Data: TDataModule},

 Calend in 'Calend.pas' {Calen},

 Av_ListRed in 'Av_ListRed.pas' {ListRed},

 Av_ManyW in 'Av_ManyW.pas' {Many_List},

 Av_Querys in 'Av_Querys.pas' {FQuery},

 Av_Find in 'Av_Find.pas' {FFind},

 Av_QLibrary in 'Av_QLibrary.pas' {QLib},

 Av_ActionNow in 'Av_ActionNow.pas' {AN},

 Av_FSort in 'Av_FSort.pas' {FSort},

 Av_Print in 'Av_Print.pas' {FPrint},

 Registry,

 Av_Reports in 'Av_Reports.pas' {FReport},

 Av_Pwrd in 'Av_Pwrd.pas' {FPwrd},

 Av_ClearT in 'Av_ClearT.pas' {Form1},

 Av_Exp in 'Av_Exp.pas' {FExp},

 Av_Help in 'Av_Help.pas' {FHelp};



var

 Aurora_Reg: TRegistry;



{$R *.res}



begin

 {-----------------Начальные значения переменных------------}

 First_load := True; //Устанавливает запуск программы (=>Av_General)

 Can_RS := False; //Запрещает менять размеры рабочего окна (=>Av_Nuclls)

 //Set_Top := True; //Разрешаем мнять местоположение рабочего окна (=>Av_Nuclls)

 TAMode := am_None; //Устанавливаем состаяние НД(N_Gen) - НД не менялся (=>Av_Nuclls)

 //i := 1; //Счетчик массива номеров записей для удаления (=>Av_Nucll)

 SV_Click := False;

 CH_F := False;

 CH_F2 := False;

 Del_Q := 0;

 //NumNewF := 0;

 //ShowMEssage(Prog_Dir);

 {-----------------Начальные значения (конец)---------------}





 Application.Title := 'D-Art: Aurora v.1.0';

 Application.CreateForm(TGeneral, General);

 Application.CreateForm(TLoadF, LoadF);

 Application.CreateForm(TP_Data, P_Data);

 Application.CreateForm(TDB_Data, DB_Data);

 Application.CreateForm(TCalen, Calen);

 Application.CreateForm(TListRed, ListRed);

 Application.CreateForm(TMany_List, Many_List);

 Application.CreateForm(TFFind, FFind);

 Application.CreateForm(TQLib, QLib);

 Application.CreateForm(TAN, AN);

 Application.CreateForm(TFSort, FSort);

 Application.CreateForm(TFPrint, FPrint);

 Application.CreateForm(TFPwrd, FPwrd);

 Application.CreateForm(TForm1, Form1);

 Application.CreateForm(TFExp, FExp);

 Application.CreateForm(TFHelp, FHelp);

 Application.Initialize;



 {-----------------Реестр Windows---------------------------}

 Aurora_Reg := TRegistry.Create;

 //Считываем значения из системного реестра

 With Aurora_Reg Do

 begin

 OpenKey('\Software\D-Art Soft\Aurora',True);

 If not ValueExists('Work_dir') Then

 WriteString('Work_dir',ExtractFileDir(ExpandFileName('Aurora.exe')) + '\D_bc\');

 If not ValueExists('Prog_dir') Then

 WriteString('Prog_dir',ExtractFileDir(ExpandFileName('Aurora.exe')) + '\');

 If not ValueExists('NDS') Then

 WriteFloat('NDS',0.18);

 If not ValueExists('NSP') Then

 WriteFloat('NSP',0.05);

 If not ValueExists('Ent_name') Then

 WriteString('Ent_name','(Нет данных)');

 If not ValueExists('Sort_nuclls') Then

 WriteString('Sort_nuclls','Num ASC');



 Nds_v := ReadFloat('NDS');

 Nsp_v := ReadFloat('NSP');

 Work_dir := ReadString('Work_dir');

 Prog_dir := ReadString('Prog_dir');

 Name_E := ReadString('Ent_name');



 //Определяем установлен ли пароль

 If not ValueExists('PassWord') Then WriteString('PassWord','')

 Else

 begin

 rpw := ReadString('PassWord');

 If rpw <> '' Then

 If FPwrd.ShowModal = mrCancel Then Application.Terminate;

 end;

 end;

 {-----------------Реестр Windows (конец)-------------------}

 Application.Run;

end.





(МОДУЛЬ AV_NUCLLS.PAS)

unit Av_Nuclls;



interface



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ComCtrls, ToolWin, ExtCtrls, StdCtrls, Mask, DBCtrls,

 Grids, DBGrids, Buttons, ADODB, DB, Registry;



type

 TNucll = class(TForm)

 Redactor: TGroupBox;

 E_Num: TDBEdit;

 E_Sum: TDBEdit;

 Tools: TControlBar;

 Navig: TToolBar;

 Grid: TDBGrid;

 E_Date: TDBEdit;

 DBEdit6: TDBEdit;

 Label1: TLabel;

 Label2: TLabel;

 Label3: TLabel;

 Label4: TLabel;

 Label5: TLabel;

 Label6: TLabel;

 Label7: TLabel;

 Date_B: TButton;

 Label8: TLabel;

 Work_B: TButton;

 Client_B: TButton;

 FioO_B: TButton;

 StatO_B: TButton;

 Label9: TLabel;

 StatP_B: TButton;

 B_NSP: TDBCheckBox;

 B_Sile: TDBCheckBox;

 B_Many: TDBCheckBox;

 Label10: TLabel;

 Bevel2: TBevel;

 DBEdit3: TDBEdit;

 Label11: TLabel;

 DBEdit4: TDBEdit;

 Label12: TLabel;

 E_FioP: TDBEdit;

 Save: TToolButton;

 Add: TToolButton;

 Del: TToolButton;

 Edit: TToolButton;

 Next: TToolButton;

 Prior: TToolButton;

 ToolButton7: TToolButton;

 View: TToolButton;

 Help: TToolButton;

 ToolButton10: TToolButton;

 L_Work: TDBComboBox;

 L_Client: TDBComboBox;

 L_FioO: TDBComboBox;

 L_StatO: TDBComboBox;

 L_StatP: TDBComboBox;

 Work_A: TBitBtn;

 Client_A: TBitBtn;

 FioO_A: TBitBtn;

 StatO_A: TBitBtn;

 StatP_A: TBitBtn;

 Lst_Many: TButton;

 Ap_Button: TToolBar;

 Red_LST: TToolButton;

 ToolButton2: TToolButton;

 MB_LST: TToolButton;

 MoveBy_P: TToolButton;

 ToolButton9: TToolButton;

 ToolButton11: TToolButton;

 ToolButton12: TToolButton;

 ToolButton13: TToolButton;

 ToolButton14: TToolButton;

 ToolButton4: TToolButton;

 MoveBy_N: TToolButton;

 ToolButton3: TToolButton;

 Bevel1: TBevel;

 procedure FormResize(Sender: TObject);

 procedure FormCreate(Sender: TObject);

 procedure FormActivate(Sender: TObject);

 procedure FormClose(Sender: TObject; var Action: TCloseAction);

 procedure Date_BClick(Sender: TObject);

 procedure Work_BClick(Sender: TObject);

 procedure EditClick(Sender: TObject);

 procedure SaveClick(Sender: TObject);

 procedure AddClick(Sender: TObject);

 procedure DelClick(Sender: TObject);

 procedure PriorClick(Sender: TObject);

 procedure NextClick(Sender: TObject);

 procedure B_ManyClick(Sender: TObject);

 procedure Lst_ManyClick(Sender: TObject);

 procedure Work_AClick(Sender: TObject);

 procedure Client_BClick(Sender: TObject);

 procedure Client_AClick(Sender: TObject);

 procedure FioO_BClick(Sender: TObject);

 procedure FioO_AClick(Sender: TObject);

 procedure StatO_AClick(Sender: TObject);

 procedure StatO_BClick(Sender: TObject);

 procedure StatP_BClick(Sender: TObject);

 procedure StatP_AClick(Sender: TObject);

 procedure Red_LSTClick(Sender: TObject);

 procedure MoveBy_PClick(Sender: TObject);

 procedure MoveBy_NClick(Sender: TObject);

 procedure E_NumEnter(Sender: TObject);

 procedure E_NumExit(Sender: TObject);

 procedure GridExit(Sender: TObject);

 procedure GridEnter(Sender: TObject);

 procedure MB_LSTMouseDown(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

 procedure GridDblClick(Sender: TObject);

 procedure HelpClick(Sender: TObject);

 procedure E_SumEnter(Sender: TObject);

 procedure E_DateEnter(Sender: TObject);

 procedure E_DateExit(Sender: TObject);

 private

 { Private declarations }

 public

 { Public declarations }

 end;



var

 Nucll: TNucll;

 Can_RS: boolean;{Определяет нужно менять размеры рабочего окна}

 TAMode{Определяет различные состояния набора данных N_Gen (=>Av_DBData)}: byte;

 CH_F, CH_F2, NoATL, SV_Click, No_Adding, InGRD, Exec, CL_Click, SMM: boolean;

 Active_Tab : TADOTable;

 FS_Tab, MP_Tab: TCustomADODataSet;

 Del_Q : byte;

 Field_val, Right_num: Variant;

 Tab_Name: String;

 Active_Form: TForm;



Const

 //Константы состаяний НД N_Gen

 am_None = 0;

 am_Add = 1;

 am_Del = 2;

 am_Edit = 3;

 am_Scroll = 4;



implementation



uses Av_Data, Av_General, Load, Sub_Program, Av_DBData, Calend, Av_ListRed,

 Av_ManyW, Av_Querys;



{$R *.dfm}



procedure TNucll.FormResize(Sender: TObject);

begin

 //Проверяем размеры окна для изменения отображения

 B_Sile.Left := B_NSP.Left;

end;



procedure TNucll.FormCreate(Sender: TObject);

begin

 //Устанавливаем размеры окна в соответствии с разрешением экрана

 Height := General.ClientHeight - General.BTools.Height - General.Gen_Stat.Height - 5;;

 Width := Round(Screen.Width * 0.90);

 Top := 0;

 Nucll.Work_A.Visible := RVB;

 Nucll.Work_B.Visible := RVB;

 Nucll.Client_A.Visible := RVB;

 Nucll.Client_B.Visible := RVB;

 Nucll.FioO_A.Visible := RVB;

 Nucll.FioO_B.Visible := RVB;

 Nucll.StatO_A.Visible := RVB;

 Nucll.StatO_B.Visible := RVB;

 Nucll.StatP_A.Visible := RVB;

 Nucll.StatP_B.Visible := RVB;

end;



procedure TNucll.FormActivate(Sender: TObject);

begin

 Top := 0;

 //Меняем заголовок программы и окна

 Application.Title := 'D-Art: Aurora v.1.0 [Накладная]';

 Active_Tab := DB_Data.N_Gen;

 FS_Tab := DB_Data.N_Gen;

 MP_Tab := DB_Data.N_MIO;

 Active_Form := Self;

 Tab_Name := '"Накладные"';

 DB_Data.Max_Num.SQL.Clear;

 DB_Data.Max_Num.SQL.Add('Select Max(Num) From ' + Active_Tab.TableName);

 Write_Stat(DB_Data.N_Gen,DB_Data.Primtabs,General.Gen_Stat);

 Nucll.FocusControl(Navig);

end;



Procedure OnCls;

 var i: byte;

 Reg_nuc: TRegistry;

 begin

 //По закрытию сохраняем все изменения

 DB_Data.N_Gen.UpdateBatch;

 DB_Data.N_MIO.UpdateBatch;

 P_Data.Control1.Enabled := False;

 Nucll.Destroy;//WindowHandle;

 If Av_General.SC_Win[W_Querys] = False Then Active_Tab := nil;

 //Фиксируем закрытие окна в массиве (=>Av_General)

 Av_General.SC_Win[W_Nuclls] := False;

 //Меняем заголовок программы и окна

 Application.Title := 'D-Art: Aurora v.1.0';

 For i := 0 To 3 Do

 General.Gen_Stat.Panels[i].Text := '';

 //Записываем данные в реестр

 Reg_nuc := TRegistry.Create;

 Reg_nuc.OpenKey('\Software\D-Art Soft\Aurora',True);

 Reg_nuc.WriteString('Sort_nuclls',DB_Data.N_Gen.Sort);

 Reg_nuc.Destroy;

 end;



procedure TNucll.FormClose(Sender: TObject; var Action: TCloseAction);

 var NS_Mes: integer;

begin

 SV_Click := True;

 //Проверяем сохранность данных

 If TAMode <> am_None Then

 begin

 NS_Mes := Application.MessageBox(PChar('Не были сохранены изменения в накладной №'+ DB_Data.Num.AsString + '. Сохранить изменения?' ),

 'D-Art: Aurora',mb_OkCancel+mb_IconExclamation);

 Case NS_Mes of

 idOk : begin

 {DB_Data.N_Gen.Post;

 DB_Data.N_Gen.UpdateBatch;}

 Try_SV;

 Sub_Program.Op_Change;

 Oncls;

 Cancel_Cls := False; //Можно закрыть программу

 end;

 idCancel : begin

 Action := caNone;

 Cancel_Cls := True; //Нельзя закрывать программу

 SV_Click := False;

 end;

 end; //Case

 end

 Else OnCls;

end;



procedure TNucll.Date_BClick(Sender: TObject);

begin

 //Проверяем результат диалога с пользователем

 With Calen,DB_Data do

 If ShowModal = mrOk Then

 Try

 //Пытаемся установить выбранную дату в базу

 FDate.Value := MC.Date;

 Except

 Application.MessageBox('Не удается изменить дату выписки!','D-Art: Aurora',mb_Ok+mb_IconHand);

 End;

end;



procedure TNucll.Work_BClick(Sender: TObject);

begin

 Sub_Program.Show_ListRed(4,True); //Показываем окно редактора списков с нужным списком

end;



procedure TNucll.EditClick(Sender: TObject);

begin

 DB_Data.N_Gen.UpdateBatch;

 DB_Data.N_MIO.UpdateBatch;

 Try

 SV_Click := False;

 DB_Data.N_Gen.Edit; //Устанавливаем режим редактирования

 Right_num := DB_Data.Num.Value;

 //Выбираем объект для передачи фокуса ввода, согласно режиму отображения (=> Av_Data)

 Case View_Mode of

 vm_TO : Nucll.FocusControl(Grid); //Передаем таблице

 vm_TR,vm_RO : Nucll.FocusControl(E_Num) //Передаем первому полю редактора

 End; //Case

 SV_Click := False;

 Except

 Application.MessageBox('Не удается превести запись в режим редактирования.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;

end;



procedure TNucll.SaveClick(Sender: TObject);

begin

 SV_Click := True;

 CL_Click := False;



 Try_SV; //Процедура

end;



procedure TNucll.AddClick(Sender: TObject);

begin

 Nucll.FocusControl(Navig);

 DB_Data.N_Gen.UpdateBatch;

 DB_Data.N_MIO.UpdateBatch;

 //Пытаемся вставить новую запись

 Try

 SV_Click := False;

 //Активизируем запрос для выяснения максимального номера накладной

 DB_Data.Max_Num.Active := True;

 DB_Data.N_Gen.Insert;

 DB_Data.Max_Num.Active := False; //Деактивируем запрос

 Right_num := DB_Data.Num.Value;

 //Выбираем объект для передачи фокуса

 Case View_Mode of

 vm_TO : Nucll.FocusControl(Nucll.Grid); //Передаем таблице

 vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Передаем первому полю редактора

 End; //Case

 SV_Click := False;

 Except

 Application.MessageBox('Не удается добавить новую запись в таблицу.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;

end;



procedure TNucll.DelClick(Sender: TObject);

begin

 //Сохраняем изменения перед следующим удалением

 DB_Data.N_Gen.UpdateBatch;

 DB_Data.N_MIO.UpdateBatch; 

 If Application.MessageBox(PChar('Вы действительно хотите удалить накладную №' + DB_Data.Num.AsString + '?'),

 'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2) = idYes Then

 Try

 DB_Data.N_Gen.Delete; //Пытаемся удалить запись

 Except

 Application.MessageBox('Не удается удалить запись из таблицы.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;



end;



procedure TNucll.PriorClick(Sender: TObject);

begin

 //Если не начало таблицы перемещаемся на предыдущую запись

 If not DB_Data.N_Gen.Bof Then DB_Data.N_Gen.Prior

end;



procedure TNucll.NextClick(Sender: TObject);

begin

 //Если не конец таблицы, то перемещаемся на следующую запись

 If not DB_Data.N_Gen.Eof Then DB_Data.N_Gen.Next

end;



procedure Cancel_Input;

begin

 If Del_Q = idYes Then

 begin

 CH_F := True;

 DB_Data.Many.Value := 'Нет';

 While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

 end

end; //procedure



procedure TNucll.B_ManyClick(Sender: TObject);

 var SM_Res: byte;

begin

If Exec = False Then

begin

Exec := True;

Del_Q := mrYes;

If CL_Click = False Then

begin

If (B_Many.Checked = True) And (TAMode <> am_None) And (CH_F2 = False) Then

If Application.MessageBox('Перед вводом/редактированием списка товаров и услуг на накладную, необходимо сохранить ее. Продолжить?',

 'D-Art: Aurora',mb_IconQuestion + mb_YesNo) = mrYes Then

 Repeat

 CH_F := False; //Можно убрать флажок

 If Del_Q = mrYes Then No_Adding := True; //Пока не добавляли записи

 SV_Click := True;

 DB_Data.Many.Value := 'Да';



 Try

 DB_Data.N_Gen.Post;

 DB_Data.N_Gen.UpdateBatch;

 With DB_Data Do Sub_Program.Write_Stat(N_Gen,Primtabs,GEneral.Gen_Stat);

 Except

 Screen.Cursor := crDefault;

 Application.MessageBox('Не удается сохранить изменения в таблице. Возможно введен неуникальный номер накладной, исправьте его и попробуйте ещё раз.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);



 DB_Data.N_Gen.Edit;

 DB_Data.Many.Value := 'Нет';

 Exec := False;

 CH_F := True;

 DB_Data.Num.Value := Right_Num;

 SV_Click := False;



 //Выбираем оъект для предачи фокуса ввода

 Case View_Mode of

 vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Предаем фокус ввода первому полю редактора

 vm_TO : Nucll.FocusControl(Nucll.Grid); //Предаем фокус ввода сетке

 End; //Case

 Abort;

 End;



 SV_Click := False;

 DB_Data.N_Gen.Edit;



 SM_Res := Many_List.ShowModal; //Показвываем окно

 If SM_Res = mrCancel Then

 begin

 //Закрыли нажатием кнопки Cancel

 if No_Adding = False Then

 Del_Q := Application.MessageBox(PChar('Прекратить ввод списка товаров и услуг для накладной №'+ DB_Data.Num.AsString +' и удалить все записи?'),

 'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2)

 Else Del_Q := idYes;

 Cancel_Input;

 end;

 If (No_Adding = True) And (SM_Res = mrOk) Then

 begin

 //Не добавили ни одной записи

 Del_Q := Application.MessageBox(PChar('Не было добавлено ни одной записи. Прекратить редактирование списка товаров и услуг для накладной №'+DB_Data.Num.Asstring+'?'),

 'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2);

 Cancel_Input;

 if Del_Q = idNo Then SM_Res := mrCancel;

 end;

 If (No_Adding = False) And (SM_Res = mrOk) Then

 begin

 if M_Mode <> mrNone Then

 begin

 DB_Data.N_MIO.Post;

 M_Mode := mr_None;

 end;

 DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

 end;

 DB_Data.N_MIO.UpdateBatch;

 Until ((SM_Res = mrOk) and (No_Adding = False)) or (Del_Q = idYes)



Else

 begin

 CH_F := True;

 DB_Data.Many.Value := 'Нет';

 CH_F2 := False;

 end;

end



Else

 begin

 CH_F := False; //Можно убрать флажок

 CL_Click := False;

 end;



 //При снятии флажка

If (B_Many.Checked = False) And (TAMode <> am_None) And (CH_F = False) And (SMM = False) Then

begin

 If CL_Click = False Then

 begin

 Del_Q := Application.MessageBox(PChar('Удалить список товаров и услуг для накладной №' + DB_Data.Num.AsString + '?'),

 'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2);

 If Del_Q = idYes Then

 begin

 CH_F2 := False;

 DB_Data.N_MIO.First;

 While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

 end

 Else

 begin

 CH_F2 := True;

 DB_Data.Many.Value := 'Да';

 CH_F := False;

 end;

 end

 Else

 begin

 CH_F2 := False;

 DB_Data.N_MIO.First;

 While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

 CL_Click := False;

 end;

end;

Exec := False;

end;

end;



{procedure ReFresh_Tab(NewVal: string);

begin

 if View_Mode = vm_TR Then Nucll.Ap_Button.Focused;

 //Обновляем номера накладных в таблице С.М.Т.

 DB_Data.Fresh_ML.Parameters[0].Value := StrToInt(NewVal); //Новое значение

 DB_Data.Fresh_ML.Parameters[1].Value := Num_Ins; //Старое значение

 DB_Data.Fresh_ML.ExecSQL; //Выполняем запрос

 DB_Data.N_MiO.Requery; //Обновляем таблицу

end;}



procedure TNucll.Lst_ManyClick(Sender: TObject);

var Old_Left : integer;

begin

{ If Application.MessageBox('Перед вводом/редактированием списка товаров и услуг на накладную, необходимо сохранить ее. Продолжить?',

 'D-Art: Aurora',mb_IconQuestion + mb_YesNo) = mrYes Then

 begin

 {DB_Data.N_MIO.Active := False;

 DB_Data.N_MIO.MasterFields := '';

 DB_Data.N_MIO.Active := True;

 SV_Click := True;

 Try_SV; //Процедура

 {DB_Data.N_MIO.Active := False;

 DB_Data.N_MIO.MasterFields := 'Num';

 DB_Data.N_MIO.Active := True;

 DB_Data.N_Gen.Edit;}



 Old_Left := Many_List.Ok_b.Left; //Запоминаем положение кнопки Ok

 Many_List.Ok_b.Left := Many_List.Cancel_b.Left; //Меняем положение кнопки Ok}

 Many_List.Cancel_b.Visible := False; //Прячем кнопку Отмена

 //Показываем окно

 Many_List.ShowModal;

 If M_Mode <> mrNone Then

 DB_Data.N_MIO.Post; //Сохраняем изменениня в таблице, если этого не сделал пользователь

 //DB_Data.N_MIO.UpdateBatch;

 DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

 If DB_Data.N_MIO.RecordCount = 0 Then

 begin

 SMM := True;

 CL_Click := False;

 DB_Data.Many.Value := 'Нет';

 SMM := False;

 Try

 SV_Click := True;

 DB_Data.N_Gen.Post;

 DB_Data.N_Gen.UpdateBatch;

 SV_Click := False;

 Except

 End;

 DB_Data.N_Gen.Edit;

 end;

 M_Mode := mr_None; //Фиксируем сохранение



 Many_List.Ok_b.Left := Old_Left; //Восстанавливаем положение кнопки Ok

 Many_List.Cancel_b.Visible := True; //Показываем кнопку Отмена}

 DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

//end;

end;



procedure TNucll.Work_AClick(Sender: TObject);

begin

 If NoATL = False Then

 With DB_Data do

 If Sub_Program.A_LST(T_Work,W_List,L_Work.Text,L_Work,1) <> False Then

 Many_List.Wk_Many.Items.Add(L_Work.Text);

end;



procedure TNucll.Client_BClick(Sender: TObject);

begin

 Sub_Program.Show_ListRed(0,True); //Показываем окно редактора списков с нужным списком

end;



procedure TNucll.Client_AClick(Sender: TObject);

begin

 With DB_Data do Sub_Program.A_LST(T_Client,C_List,L_Client.Text,L_Client,2);

end;



procedure TNucll.FioO_BClick(Sender: TObject);

begin

 Sub_Program.Show_ListRed(2,True); //Показываем окно редактора списков с нужным списком

end;



procedure TNucll.FioO_AClick(Sender: TObject);

begin

 With DB_Data do Sub_Program.A_LST(T_FioO,FO_List,L_FioO.Text,L_FioO,4); //Добавляем запись в список

end;



procedure TNucll.StatO_AClick(Sender: TObject);

begin

 With DB_Data do Sub_Program.A_LST(T_StatO,SO_List,L_StatO.Text,L_StatO,5);

end;



procedure TNucll.StatO_BClick(Sender: TObject);

begin

 Sub_Program.Show_ListRed(1,True); //Показываем окно редактора списков с нужным списком

end;



procedure TNucll.StatP_BClick(Sender: TObject);

begin

 Sub_Program.Show_ListRed(3,True); //Показываем окно редактора списков с нужным списком

end;



procedure TNucll.StatP_AClick(Sender: TObject);

begin

 With DB_Data do Sub_Program.A_LST(T_StatP,SP_List,L_StatP.Text,L_StatP,3);

end;



procedure TNucll.Red_LSTClick(Sender: TObject);

begin

With DB_Data do

 //Определяем номер ячейки с фокусом и заполняем списки

 Case Grid.Columns.Grid.SelectedIndex of

 3 : Sub_Program.Show_ListRed(4,True); //Показываем окно редактора списков с нужным списком

 4 : Sub_Program.Show_ListRed(0,True);

 5 : Sub_Program.Show_ListRed(2,True);

 6 : Sub_Program.Show_ListRed(1,True);

 8 : Sub_Program.Show_ListRed(3,True);

 Else Sub_Program.Show_ListRed(0,True);

 End;

end;



procedure TNucll.MoveBy_PClick(Sender: TObject);

begin

 Sub_Program.MBR(1);

end;



procedure TNucll.MoveBy_NClick(Sender: TObject);

begin

 Sub_Program.MBR(2);

end;



procedure TNucll.E_NumEnter(Sender: TObject);

begin

 NoATL := True;

 {If error_save = False Then Field_val := E_Num.Text

 Else error_save := False;



 Nucll.Caption := Field_Val

 //Num_Ins := StrToInt(E_Num.Text);}

end;



procedure TNucll.E_NumExit(Sender: TObject);

begin

 NoATL := False;

 //ReFresh_Tab(E_Num.Text);

end;



procedure TNucll.GridExit(Sender: TObject);

begin

 Sub_Program.Colum_Adress; //Проверяем расположение столбцов

 InGRD := False;

end;



procedure TNucll.GridEnter(Sender: TObject);

begin

{ If Grid.Columns.Grid.SelectedIndex = 0 Then

 Num_Ins := Grid.Columns.Grid.SelectedField.Value;

 Sub_Program.Colum_Adress;

 Then Grid.Columns.Grid.SelectedIndex of

 CN[6] CN[7],CN[8],CN[9],CN[10],CN[11]: Field_val := Grid.Columns.Grid.SelectedField.Value;}

 InGRD := True;

 Field_val := Grid.Columns.Grid.SelectedField.Value;

end;



procedure TNucll.MB_LSTMouseDown(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

begin

 Nucll.FocusControl(Ap_Button);

end;



procedure TNucll.GridDblClick(Sender: TObject);

begin

 Try

 //Переводим таблицу в режим редактирования

 DB_Data.N_Gen.Edit;

 Right_num := DB_Data.Num.Value;

 Nucll.FocusControl(Grid.Columns.Grid);

 Except

 Application.MessageBox('Не удается превести запись в режим редактирования.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;

end;



procedure TNucll.HelpClick(Sender: TObject);

begin

//Отменяем сделанные изменения

If TAMode = am_Add Then SV_Click := True

Else SV_Click := False;

 CL_Click := True;

 DB_DAta.N_Gen.CancelBatch;

 DB_Data.N_MIO.CancelBatch;

 DB_Data.N_MIO.Requery;



 If TAMode <> am_None Then DB_Data.N_Gen.Edit;

end;



procedure TNucll.E_SumEnter(Sender: TObject);

begin

 NoATL := True;

 Field_Val := E_Sum.Text;

end;



procedure TNucll.E_DateEnter(Sender: TObject);

begin

 NoATL := True;

 Field_Val := E_Date.Text;

end;



procedure TNucll.E_DateExit(Sender: TObject);

begin

 //DB_Data.FDateSetText(DB_Data.FDate,E_Date.Text);

 NoATL := False; end; end.



//ПРОЕКТ "AURORA"

//Модуль данных - объекты для работы с БД

unit Av_DBData;



interface



uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, ComCtrls, ToolWin, ExtCtrls, DB, ADODB, DBGrids;

 

type

 TStr_UP = Function(S: PChar): PChar; stdcall;

 //TInsstr = Function(SubS, S: PChar; Index: integer): PChar; stdcall;

 TSS = Set of Char;

 TDB_Data = class(TDataModule)

 Nuclls: TADOConnection;

 N_Gen: TADOTable;

 N_MIO: TADOTable;

 DS_Gen: TDataSource;

 Num: TIntegerField;

 Client: TWideStringField;

 Fio_P: TWideStringField;

 Stat_P: TWideStringField;

 Fio_O: TWideStringField;

 Stat_O: TWideStringField;

 NDS_Sum: TCurrencyField;

 Lists: TADOConnection;

 DS_Work: TDataSource;

 T_Client: TADOTable;

 DS_Client: TDataSource;

 Without_NDS: TCurrencyField;

 End_Sum: TCurrencyField;

 T_FioO: TADOTable;

 DS_FioO: TDataSource;

 T_StatO: TADOTable;

 DS_StatO: TDataSource;

 T_StatP: TADOTable;

 DS_StatP: TDataSource;

 T_Work: TADOTable;

 W_List: TWideStringField;

 FO_List: TWideStringField;

 SO_List: TWideStringField;

 SP_List: TWideStringField;

 NSP: TWideStringField;

 Sile: TWideStringField;

 Many: TWideStringField;

 Max_Num: TADOQuery;

 MN: TIntegerField;

 DS_MIO: TDataSource;

 M_Values: TWideStringField;

 M_SW: TBCDField;

 C_List: TWideStringField;

 AllSum: TFloatField;

 Sectabs: TADOQuery;

 Primtabs: TADOQuery;

 Id: TAutoIncField;

 N_MIOMInc: TAutoIncField;

 M_id: TIntegerField;

 Querys: TADOConnection;

 Q_Teach: TADOTable;

 DS_Teach: TDataSource;

 Q_Teachinc: TAutoIncField;

 Fields: TWideStringField;

 Teach_F: TWideStringField;

 Id_tab: TWideStringField;

 Del_Query: TADOQuery;

 QOU: TADOQuery;

 DS_QOU: TDataSource;

 Teach_V: TStringField;

 DT: TWordField;

 Selnull: TBooleanField;

 NewData: TWideStringField;

 Lng: TIntegerField;

 QTValues: TWideStringField;

 Ed_Query: TADOQuery;

 Sum: TBCDField;

 Work: TWideStringField;

 FDate: TDateTimeField;

 Teach_USL: TMemoField;

 Mnds: TCurrencyField;

 MWnds: TCurrencyField;

 Lk_use: TBooleanField;

 str_date: TStringField;

 Q_Rep: TADOQuery;

 QRep_DS: TDataSource;

 M_count: TIntegerField;

 Q_RepExpr1000: TBCDField;

 Q_RepTWork: TWideStringField;

 Q_RepNumpp: TIntegerField;

 Q_RepExpr1002: TBCDField;

 Q_Rep2: TADOQuery;

 DS_QR2: TDataSource;

 Q_Rep2Expr1000: TBCDField;

 Q_Rep2TWork: TWideStringField;

 Q_Rep2Expr1002: TIntegerField;

 Q_Rep2Numpp: TIntegerField;

 Del_ALLT: TADOQuery;

 procedure N_GenCalcFields(DataSet: TDataSet);

 procedure NumValidate(Sender: TField);

 procedure N_GenBeforeScroll(DataSet: TDataSet);

 procedure N_GenAfterPost(DataSet: TDataSet);

 procedure N_GenAfterEdit(DataSet: TDataSet);

 procedure FDateValidate(Sender: TField);

 procedure N_GenPostError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

 procedure N_GenNewRecord(DataSet: TDataSet);

 procedure N_GenAfterInsert(DataSet: TDataSet);

 procedure NSPValidate(Sender: TField);

 procedure SileValidate(Sender: TField);

 procedure ManyValidate(Sender: TField);

 procedure SumValidate(Sender: TField);

 procedure N_MIONewRecord(DataSet: TDataSet);

 procedure N_GenBeforePost(DataSet: TDataSet);

 procedure N_GenBeforeEdit(DataSet: TDataSet);

 procedure N_GenAfterDelete(DataSet: TDataSet);

 procedure N_GenBeforeDelete(DataSet: TDataSet);

 procedure N_GenDeleteError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

 procedure N_GenEditError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

 procedure T_WorkBeforePost(DataSet: TDataSet);

 procedure N_GenAfterScroll(DataSet: TDataSet);

 procedure N_MIOAfterInsert(DataSet: TDataSet);

 procedure N_MIOPostError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

 procedure N_MIOAfterPost(DataSet: TDataSet);

 procedure N_MIOAfterScroll(DataSet: TDataSet);

 procedure N_MIOCalcFields(DataSet: TDataSet);

 procedure N_MIOBeforePost(DataSet: TDataSet);

 procedure Q_TeachCalcFields(DataSet: TDataSet);

 procedure Q_TeachAfterScroll(DataSet: TDataSet);

 procedure QTValuesChange(Sender: TField);

 procedure Q_TeachBeforePost(DataSet: TDataSet);

 procedure FDateSetText(Sender: TField; const Text: String);

 Function Ins_Str(SubS, S: string; Index: integer): string;

 procedure Q_RepCalcFields(DataSet: TDataSet);

 procedure Q_Rep2CalcFields(DataSet: TDataSet);

 procedure QOUAfterOpen(DataSet: TDataSet);

 private

 { Private declarations }

 public

 { Public declarations }

 end;



var

 DB_Data: TDB_Data;

 Nds_v, Nsp_v: real;

 RD : TDateTime;

 SV_Qes : integer;

 //Old_Val : Array[1..12] of Variant;

 Str_UP : TStr_UP;

 Txt_UP : String;

 No_SV, DoPR, error_save, DOQAS, UB_MIO : boolean;



implementation



uses Av_Nuclls, Av_General, Sub_Program, Calend, Av_Data, Av_ListRed,

 Av_ManyW, Av_Querys, Av_QLibrary;



{$R *.dfm}



procedure TDB_Data.N_GenCalcFields(DataSet: TDataSet);

begin

 NDS_Sum.Value := Sum.Value - (Sum.Value*100)/(100 + 100 * Nds_v); //Сумма НДС

 Without_NDS.Value := Sum.Value - NDS_Sum.Value; //Сумма без НДС

 If NSP.Value = 'Да' Then

 End_Sum.Value := Sum.Value + (Sum.Value * Nsp_v) //Итоговая сумма

 Else

 End_Sum.Value := Sum.Value;

 //Формируем текстовое представление даты

 If FDate.AsString <> '' Then str_date.Value := Sub_Program.D_STR(FDate.AsString);

end;



procedure TDB_Data.NumValidate(Sender: TField);

begin

 //Определяем правильность номера накладной

 If Num.Value <= 0 Then

 begin

 Nucll.E_Num.Text := Right_num;

 Nucll.Grid.Columns.Grid.SelectedField.Value := Right_num;

 Application.MessageBox('Неверное значение! Номер накладной введен неправильно.','D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 end;

end;



procedure NoAccess;

begin

 TAMode := am_None;//Фиксируем сохранение

 Nucll.Grid.Options := [dgTitles,dgIndicator,dgColumnResize,dgColLines,

 dgRowLines,dgTabs,dgRowSelect,dgAlwaysShowSelection,

 dgCancelOnExit];

end;



procedure TDB_Data.N_GenBeforeScroll(DataSet: TDataSet);

begin

 //Записываем технические данные

 If TAMode <> am_None Then N_GenBeforePost(N_Gen);

 {begin



 N_Gen.Edit; //Перводим таблицу в режим редактирования

 RD := StrToDate(FDate.Value); //Преобразуем дату в правильный формат

 FDate.Value := DateToStr(RD);

 Sub_Program.Date_Val; //Вычисляем значения дня, месяца и года

 Real_Sum.Value := End_Sum.Value;

 N_Gen.Post; //Сохраняем изменения в таблице}



 NoAccess;

 Deactive_Ed; //Показываем сохранение

 //end;}

 CH_F := False; //Можно снимать флажок мно-ва работ

 CH_F2 := False; //Можно устанавливать флажок

 Screen.Cursor := crDefault;

end;



procedure TDB_Data.N_GenAfterPost(DataSet: TDataSet);

begin

 //Показываем сохраненение

 NoAccess;

 Deactive_Ed;

 CH_F := False; //Можно снимать флажок мно-ва работ

 CH_F2 := False; //Можно устанавливать флажок}

 Screen.Cursor := crDefault;

 If SV_Click = False Then

 begin

 Try

 N_Gen.UpdateBatch;

 Sub_Program.Write_Stat(N_Gen,Primtabs,GEneral.Gen_Stat);

 Except

 error_save := true;

 Screen.Cursor := crDefault;

 Application.MessageBox('Не удается сохранить изменения в таблице. Возможно введен неуникальный номер накладной, исправьте его и попробуйте ещё раз.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);



 DB_Data.N_Gen.Edit;

 Num.Value := Right_num;

 SV_Click := False;



 //Выбираем оъект для предачи фокуса ввода

 Case View_Mode of

 vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Предаем фокус ввода первому полю редактора

 vm_TO : Nucll.FocusControl(Nucll.Grid); //Предаем фокус ввода сетке

 End; //Case

 Abort;

 End;

 end;

 CL_Click := False;

 SV_Click := False;

 Cancel_Cls := False; //Можно закрыть окно

end;



procedure TDB_Data.N_GenAfterEdit(DataSet: TDataSet);

begin

 TAMode := am_Edit; //Фиксируем режим редактирования

 SV_Click := False;

 Nucll.Grid.Options := [dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,

 dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgCancelOnExit];

 //Показываем режим редактирования

 Active_Ed;

 Screen.Cursor := crDefault;

end;



procedure TDB_Data.FDateValidate(Sender: TField);

 var RD1 : TDateTime;

begin

 Try

 RD1 := Sender.Value;

 Except

 Nucll.E_Date.Text := Field_val;

 If InGRD = True Then Nucll.Grid.Columns.Grid.SelectedField.Value := Field_val;

 Application.MessageBox('Не верное значение даты выписки! Воспользуйтесь календарем для ввода даты.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;

end;



procedure TDB_Data.N_GenPostError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

begin

 {Screen.Cursor := crDefault;

 Application.MessageBox('Не удается сохранить изменения в таблице. Возможно введен неуникальный номер накладной.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 SV_Click := False;

 Abort;

 //Выбираем оъект для предачи фокуса ввода

 Case View_Mode of

 vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Предаем фокус ввода первому полю редактора

 vm_TO : Nucll.FocusControl(Nucll.Grid); //Предаем фокус ввода сетке

 End; //Case}

end;



procedure TDB_Data.N_GenNewRecord(DataSet: TDataSet);

begin

 Num.Value := MN.Value + 1; //Увиличиваем номер на 1 и вставляем в таблицу

 FDate.Value := Date; //Вставляем текущую дату

 Sum.Value := 0.00; //Вставляем начальную сумму

 NSP.Value := 'Нет'; //НСП

 Many.Value := 'Нет'; //Множественность записей

 Sile.Value := 'Нет'; //Отметка об уплате

 Num_Ins := DB_Data.Num.Value;

end;



procedure TDB_Data.N_GenAfterInsert(DataSet: TDataSet);

begin

 TAMode := am_Add; //Фиксируем режим добавления

 Nucll.Grid.Options := [dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,

 dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgCancelOnExit];

 //Показываем режим добавления

 Active_Ed;

 Screen.Cursor := crDefault;

end;



procedure TDB_Data.NSPValidate(Sender: TField);

begin

 //Проверяем правильность значений логических полей

 Sub_Program.Bool_ValiDate(NSP);

end;



procedure TDB_Data.SileValidate(Sender: TField);

begin

 Sub_Program.Bool_ValiDate(Sile);

end;



procedure TDB_Data.ManyValidate(Sender: TField);

begin

 Sub_Program.Bool_ValiDate(Many);

end;



procedure TDB_Data.SumValidate(Sender: TField);

begin

 //Проверяем правильность введенной суммы

 If Sum.Value < 0 Then

 begin

 Nucll.E_Sum.Text := Field_val;

 If InGRD = True Then Nucll.Grid.Columns.Grid.SelectedField.Value := Field_val;Application.MessageBox('Не верное значение! Сумма накладной не может быть отрицательной.',

 'D-Art: Aurora', mb_Ok+mb_IconStop);

 Abort;

 end;

end;



procedure TDB_Data.N_MIONewRecord(DataSet: TDataSet);

begin

 M_id.Value := Id.Value; //Указываем номер нокладной (реальной записи)

 M_Count.Value := 1;

 M_Values.Value := 'Товар '+IntToStr(Num.Value);

 M_SW.Value := 0;

end;



procedure TDB_Data.N_GenBeforePost(DataSet: TDataSet);

begin

 //ShowMessage('POST!');

 If SV_Click = False Then

 begin

 SV_Qes :=Application.MessageBox(PChar('Не были сохранены изменения в накладной №'+ DB_Data.Num.AsString + '. Сохранить изменения?' ),

 'D-Art: Aurora',mb_OkCancel+mb_IconExclamation);

 Case SV_Qes of

 idOk : SSh;

 idCancel : Abort; //Отменяем сохранение

 End; //Case

 end //If SV_Click = False

 Else Sub_Program.SSh;

end;



procedure TDB_Data.N_GenBeforeEdit(DataSet: TDataSet);

begin

 Screen.Cursor := crHourGlass;

end;



procedure TDB_Data.N_GenAfterDelete(DataSet: TDataSet);

begin

Screen.Cursor := crDefault;

Write_Stat(DB_Data.N_Gen,DB_Data.Primtabs,General.Gen_Stat);

end;



procedure TDB_Data.N_GenBeforeDelete(DataSet: TDataSet);

begin

 Screen.Cursor := crHourGlass;

 DB_Data.N_MIO.First;

 While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

end;



procedure TDB_Data.N_GenDeleteError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

begin

Screen.Cursor := crDefault;

end;



{procedure ReFresh_Tab(NewVal: string);

begin

 if View_Mode = vm_TR Then Nucll.Ap_Button.Focused;

 //Обновляем номера накладных в таблице С.М.Т.

 DB_Data.Fresh_ML.Parameters[0].Value := StrToInt(NewVal); //Новое значение

 DB_Data.Fresh_ML.Parameters[1].Value := Num_Ins; //Старое значение

 DB_Data.Fresh_ML.ExecSQL; //Выполняем запрос

 DB_Data.N_MiO.Requery; //Обновляем таблицу

end;}



procedure TDB_Data.N_GenEditError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

begin

 Screen.Cursor := crDefault;

end;



procedure TDB_Data.T_WorkBeforePost(DataSet: TDataSet);

begin

 RL_Ctrl := rl_None;

 If DOQAS = True Then

 QLib.CB1.Text := DataSet.Fields[0].AsString;

 Listred.List_Grid.Options := [dgTitles,dgIndicator,dgRowSelect,

 dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit] //FocusControl(List_Grid);



end;



procedure TDB_Data.N_GenAfterScroll(DataSet: TDataSet);

begin

 Cancel_Cls := False;

 GEneral.Gen_Stat.Panels[2].Text := 'Текущая запись: ' + IntToStr(N_Gen.RecNo);

end;



procedure TDB_Data.N_MIOAfterInsert(DataSet: TDataSet);

begin

 No_Adding := False;

end;



procedure TDB_Data.N_MIOPostError(DataSet: TDataSet; E: EDatabaseError;

 var Action: TDataAction);

begin

 //Ошибка при сохранении

 Application.MessageBox('Не удается сохранить изменения!','D-Art: Aurora',mb_IconStop + mb_Ok);

 Abort;

 MS_Click := False;

end;



procedure TDB_Data.N_MIOAfterPost(DataSet: TDataSet);

begin

 M_Mode := mr_None;

 N_MIO.UpdateBatch;

 Many_List.All_ManySum;

end;



procedure TDB_Data.N_MIOAfterScroll(DataSet: TDataSet);

begin

 M_Mode := mr_None;

end;



procedure TDB_Data.N_MIOCalcFields(DataSet: TDataSet);

begin

 AllSum.Value := M_SW.Value * M_Count.Value; //Формируем значение вычисляемого поля

 Mnds.Value := AllSum.Value - (AllSum.Value * 100)/(100 + 100 * Nds_v); //Сумма НДС

 MWnds.Value := AllSum.Value - Mnds.Value; //Сумма без НДС

end;



procedure TDB_Data.N_MIOBeforePost(DataSet: TDataSet);

begin

 //Many_List.Edit1.Text := FloatToStr(StrToFloat(MAny_List.Edit1.Text)+M_SW.Value);

end;



//Функция вставки подстроки в строку

Function TDB_Data.Ins_Str(SubS, S: string; Index: integer): string;

 var Res_Str, Site_Str, Site_Chr, Rs, Ls : string;

 j: byte;

begin

 Ls := '';

 Rs := '';

 Site_Str := S;

 Site_Chr := SubS;



 If Index <= 1 Then

 Res_Str := Site_Chr + Site_Str

 Else

 begin

 For j := 1 to Index - 1 do

 Ls := Ls + Site_Str[j];

 For j := Index to Length(Site_Str) do

 Rs := Rs + Site_Str[j];



 Res_Str := Ls + Site_Chr +Rs;

 end;

 Ins_Str := Res_Str;

end;



procedure TDB_Data.Q_TeachCalcFields(DataSet: TDataSet);

 var ORW, ANDW, LKW, str_f, fld_s, U1, U2, U2p, ULK,

 U1_n, U2_n, U2p_n, Empt_U : string;

 i, Num_a: integer;

 HLib: THandle; //Дискрептор DLL

 SFI: Array[1..255] of integer; //Позиции для вставки наименований полей

 Kav_USL : Boolean;



begin

 if QTValues.Value <> '' Then

 begin

 Kav_USL := False; //Обнуляем все значения переменных

 Teach_V.Value := '';

 str_f := QTValues.Value;

 i := 0;

 While i <> Length(QTValues.Value) Do

 begin

 i := i + 1;

 If str_f[i] = '"' Then //Определяем часть строки условия как значение поля

 Case Kav_USL of

 True: Kav_USL := False;

 False: Kav_USL := True;

 End;

 //Проверяем вхождение слов связи условий (И, ИЛИ) в условие запроса

 ORW := str_f[i-1] + str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3];

 ANDW := str_f[i-1] + str_f[i] + str_f[i+1];



 If i = 1 Then LKW := str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3]

 Else LKW := str_f[i-1] + str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3];





 HLib := LoadLibrary(PChar(Prog_Dir + 'String_DLL.dll')); //Загружаем DLL в память

 If HLib <> 0 Then

 begin

 Str_UP := GetProcAddress(HLib,'RS_UP'); //Определяем адрес функции

 ORW := StrPas(Str_UP(PChar(ORW))); //Преобразуем регистр

 ANDW := StrPas(Str_UP(PChar(ANDW)));

 LKW := StrPas(Str_UP(PChar(LKW)));

 FreeLibrary(HLib);

 //ShowMessage('*' + ORW + '*');

 end;



 //Меняем русские условия на английские

 If Kav_USL = False Then

 begin

 If (ORW <> ' ИЛИ ') And (ANDW <> ' И ') And (LKW <> ' КАК ') And (LKW <> 'КАК ') Then

 Teach_V.Value := Teach_V.Value + str_f[i]

 Else

 begin

 If ORW = ' ИЛИ ' Then

 begin

 i := i + 2;

 Teach_V.Value := Teach_V.Value + 'Or';

 end;

 If ANDW = ' И ' Then

 Teach_V.Value := Teach_V.Value + 'And';

 end;

 If (LKW = ' КАК ') Or (LKW = 'КАК ') Then

 begin

 i := i + 2;

 Teach_V.Value := Teach_V.Value + 'Like';

 end;

 end

 Else Teach_V.Value := Teach_V.Value + str_f[i];

 end; //While



 //Подставляем наименование поля

 For i := 1 To 255 Do

 SFI[i] := -1;



 Num_a := 1;



 str_f := Teach_V.Value;

 For i := 1 To Length(str_f) Do

 begin

 //Проверяем вхождение условий запроса (=, <>, >, < и т.д.)



 U1 := str_f[i] + str_f[i+1];

 U2 := str_f[i] + str_f[i+1] + str_f[i+2];

 U2p := str_f[i-1] + str_f[i] + str_f[i+1];

 ULK := str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3] + str_f[i+4] + str_f[i+5];



 U1_n := str_f[i];

 U2_n := str_f[i] + str_f[i+1];

 U2p_n := str_f[i-1] + str_f[i];

 //Выясняем позиции для вставки наименования поля

 If (((DT.Value=1)Or(DT.Value=2)) And ((((U1='="')Or(U1='>"')Or(U1='<"'))And((U2p<>'<>"')And(U2p<>'>="')And(U2p<>'<="')))Or(U2='<>"')Or(U2='>="')Or(U2='<="')Or(ULK='Like "'))) Or (((DT.Value=0)Or(DT.Value=2)) And ((((U1_n='=')Or(U1_n='>')Or(U1_n='<'))And((U2p_n<>'<>')And(U2p_n<>'>=')And(U2p_n<>'<=')))Or(U2_n='<>')Or(U2_n='>=')Or(U2_n='<=')Or(ULK='Like "'))) Then

 begin

 SFI[Num_a] := i;

 Num_a := Num_a + 1;

 end;

 end; //For



 fld_s := Teach_F.Value;

 //tch_s := Teach_V.Value;

 //Вставляем наименование поля

 For i := 1 To Num_a Do

 If SFI[i] <> -1 Then

 begin

 //ShowMessage(IntToStr(SFI[i]));

 {HLib := LoadLibrary('String_Dll.dll'); //Загрузка бибилиотеки

 Ins_Str := GetProcAddress(HLib,'INS_STR'); //Определяем адрес функции}

 Teach_V.Value := Ins_Str(fld_s,Teach_V.Value,SFI[i]);

 //Смещаем указатель на символьную длинну имени поля * на количество вставленных

 //наименований поля, с учетом непустого значения следующей ячейки

 if SFI[i+1] <> -1 Then SFI[i+1] := SFI[i+1] + Length(fld_s)* i;

 //FreeLibrary(HLib); //Освобождаем библиотеку

 end;



 str_f := Teach_V.Value;

 For i := 1 To 255 Do

 SFI[i] := -1;

 Num_a := 1;



 For i := 1 To Length(Teach_V.Value) Do

 begin

 ULK := str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3] + str_f[i+4] + str_f[i+5];

 If ULK = 'Like "' Then

 begin

 SFI[Num_a] := i;

 Num_a := Num_a + 1;

 end;

 end;



 For i := 1 To Num_a Do

 If SFI[i] <> -1 Then

 begin

 Teach_V.Value := Ins_Str(' ',Teach_V.Value,SFI[i]);

 If SFI[i+1] <> -1 Then SFI[i+1] := SFI[i+1] + i;

 end;

 ToE := Length(Teach_V.Value);

 end; //If QTVaalues.Value <> ''



 If Selnull.Value = True Then

 begin

 ToE := Length(Teach_V.Value);

 If ToE = 0 Then Empt_U := ''

 Else Empt_U := ' Or ';

 Teach_V.Value := Teach_V.Value + Empt_U + '(' + Teach_F.Value + ' IS NULL)';

 end;

end;



procedure TDB_Data.Q_TeachAfterScroll(DataSet: TDataSet);

begin

 {With FQuery Do

 begin

 If DOQAS = True Then

 If DB_Data.DT.Value = 0 Then DBGrid1.Columns[1].ButtonStyle := cbsAuto

 Else DBGrid1.Columns[1].ButtonStyle := cbsEllipsis;

 end;}

end;



procedure TDB_Data.QTValuesChange(Sender: TField);

begin

 If (QTValues.Value = '') And (Selnull.Value = True) Then

 If Application.MessageBox('Удалить условие выборки пустых значений указанного столбца?',PChar(Application.Title),mb_IconQuestion+mb_YesNo) = idYes Then

 Selnull.Value := False;

end;



procedure CH_Date(FLD: TWideStringField);

 var sa_date, YNow, ISDate, Ydt : string;

 NumP, i: integer;

begin

With DB_Data Do

 Begin

 NumP := StrToInt(FQuery.PC1.ActivePage.GetNamePath[Length(FQuery.PC1.ActivePage.GetNamePath)]); If (Teach_F.Value = 'TDate') And ((NumP = 2)Or(NumP = 4)) And (FLD.Value <> '') Thenbegin

 For i := 1 To Length(FLD.Value) Do

 If FLD.Value[i] = '.' Then sa_date := Sa_date + '/'

 Else sa_date := sa_date + FLD.Value[i];



 If FLD.Value[1] = '(' Then i := 2

 Else i := 1;

 If FLD.Value[i] <> '#' Then sa_date := '#' + sa_date;

 If FLD.Value[Length(FLD.Value)] = ')' Then i := Length(FLD.Value) - 1

 Else i := Length(FLD.Value);

 If FLD.Value[i] <> '#' Then sa_date := sa_date + '#';



 For i := 8 To Length(sa_date)-1 Do YNow := YNow + FLD.Value[i];

 Case Length(YNow) Of

 1 : ISDate := '200';

 2 : ISDate := '20';

 End;

 If (Length(YNow) < 4) Then sa_date := DB_Data.Ins_Str(ISDate,sa_date,8);



 For i := 8 To Length(sa_date) Do Ydt := Ydt + sa_date[i];

 sa_date := sa_date[1]+sa_date[5]+sa_date[6]+sa_date[4]+sa_date[2]+sa_date[3]+sa_date[7]+Ydt;

 FLD.Value := sa_date;

 end

 end;

end;



procedure TDB_Data.Q_TeachBeforePost(DataSet: TDataSet);

 var NumP : integer;

begin

 Lng.Value := ToE;

 NumP := StrToInt(FQuery.PC1.ActivePage.GetNamePath[Length(FQuery.PC1.ActivePage.GetNamePath)]);

 If NumP = 2 Then CH_Date(QTValues);

 CH_Date(NewData);

end;



procedure TDB_Data.FDateSetText(Sender: TField; const Text: String);

 var RD1 : TDateTime;

begin

 //Проверяем правильность введенной даты

 Try

 FDate.Value := StrToDate(Text);

 Except

 Nucll.E_Date.Text := Field_val;

 If InGRD = True Then Nucll.Grid.Columns.Grid.SelectedField.Value := Field_val;

 Application.MessageBox('Не верное значение даты выписки! Воспользуйтесь календарем для ввода даты.',

 'D-Art: Aurora',mb_Ok + mb_IconHand);

 Abort;

 End;

end;

procedure TDB_Data.Q_RepCalcFields(DataSet: TDataSet);

begin

 If Q_Rep.RecNo > 0 Then Q_RepNumpp.Value := Q_Rep.RecNo

 Else Q_RepNumpp.Value := 1;

end;

procedure TDB_Data.Q_Rep2CalcFields(DataSet: TDataSet);

begin

 If Q_Rep2.RecNo > 0 Then Q_Rep2Numpp.Value := Q_Rep2.RecNo

 Else Q_Rep2Numpp.Value := 1;

end;

procedure TDB_Data.QOUAfterOpen(DataSet: TDataSet);

 var i : integer;

begin

 //ShowMessage(IntToStr(DataSet.Fields.Count));

 DataSet.FieldByName('id').Index := 12;

 For i := 0 To DataSet.Fields.Count-1 Do

 If (Active_Tab.Fields[i].FieldKind <> fkCalculated) Then

 DataSet.Fields[i].DisplayLabel := Active_Tab.Fields[i].DisplayLabel;

end;

end.


ПРИЛОЖЕНИЕ 2



«Экранные формы программы»



Главная форма и форма накладных 





Форма запросов






3. Форма печати




4.Форма редактора списков





5.Форма фильтрации и поиска данных




ПРИЛОЖЕНИЕ 3



«Результаты тестирования программы»

№п/п

Название испытания

Цель

Объект

Значение

Результат

1

Проверка контроля ввода значений

Проверка корректности работы пользовательского интерфейса

Ввод значения в поле «№ Накладной»

таблицы накладных

-126 (Недопустимое значение)

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

2

----#----

----#----

----#----

1 (допустимое, но не уникальное значение)

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

3

----#----

----#----

----#----

10 (допустимое значение)

Программа сохраняет запись в таблице, при отсутствии других ошибок

4

Проверка правильности ввода условия запроса

Проверка контроля правильности ввода условий запроса

Значение, введенное в таблицу условий

Недопустимое значение (содержание лишней кавычки, ошибочный тип данных)

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

5

----#----

----#----

----#----

Допустимое значение (условие с корректным синтаксисом)

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