Наименование раздела
|
Объем, %
|
Срок выполнения
|
Анализ предметной области и формирование
требований пользователей
|
10%
|
|
Проектирование и создание базы данных
|
20%
|
|
Разработка прикладных программ
|
20%
|
|
Технология обработки информации
|
10%
|
|
Тестирование
|
15%
|
|
Оформление документации
|
15%
|
|
Всего:
|
100%
|
|
Содержание
Задание
Реферат
Введение
1. Анализ предметной области и формирование требований
пользователей
1.1 Анализ предметной области
1.2 Запросы пользователей
1.3 Информационные процессы
2. Проектирование и создание базы данных
2.1 Разработка концептуальной модели предметной области
2.1.1 Сущности
2.1.2 Первичные ключи
2.1.3 Атрибуты сущностей
2.1.4 Спецификация связей
2.1.5 Обрабатываемые транзакции
2.2 Выбор архитектуры программно-технологической реализации АИС и
используемой СУБД
2.3 Логическое проектирование базы данных
2.3.1 Логическая структура
2.3.2 Анализ транзакций
2.4 Создание базы данных
3. Разработка клиентского программного обеспечения
3.1 Структура прикладного программного обеспечения
3.2 Описание интерфейса и алгоритмов работы программных модулей
3.2.1 Модуль данных
3.2.2 Главная форма "FPassword"
3.2.3 Форма "FProdavec"
3.2.4 Форма "FManager"
3.2.5 Форма "FDirector"
3.2.6 Форма "FTorgPredApteki"
3.2.7 Форма "FNewTorgPredApteki"
3.2.8 Форма "FZayavkaPostavka"
3.2.9 Форма "FNewPreparat"
3.2.10 Форма "FManagerOtchet"
3.2.11 Форма "FNewApteka"
3.2.12 Форма "FNewPostavshik"
3.2.13 Форма "FNewTorgPred"
end;
4. Тестирование программного продукта
4.1 Организация процесса тестирования
4.2 Методы тестирования программного продукта
4.2.1 Модульное тестирование программного продукта
4.2.1.1 Модуль "Авторизация пользователя" (UnitAuth. pas)
4.2.1.2 Модуль "Продавец" (UnitProdavec. pas)
4.2.1.3 Модуль "Менеджер" (UnitManager. pas)
4.2.1.4 Модуль "Управляющий" (UnitDirector. pas)
4.2.1.5 Модуль "Торговое предложение в аптеке"
(UnitTorgPredApteki. pas)
4.2.1.6 Модуль "Формирование торгового предложения в
аптеке" (UnitNewTorgPredApteki. pas)
4.2.1.7 Модуль "Оформление заказа на товар" (UnitZayavkaPostavka.
pas)
4.2.1.8 Модуль "Отчёт менеджера (заявки на поставку)"
(UnitZayavkaPostavka. pas)
4.2.1.9 Модуль "Новый препарат" (UnitNewPreparat. pas)
4.2.1.10 Модуль "Добавление новой аптеки" (UnitNewApteka.
pas)
4.2.1.11 Модуль "Новый поставщик" (UnitNewPostavshik.
pas)
4.2.1.12 Модуль "Торговое предложение" (UnitNewTorgPred.
pas)
4.2.2 Тестирование интеграции
4.2.3 Тестирование правильности
5. Технологическая часть
5.1 Руководство пользователя
Заключение
Список использованных источников
Приложение А
Приложение Б
Реферат
Проект _____ с., 21 рис., 32 табл., 11 источников, 2 прил.
БАЗА ДАННЫХ, АВТОМАТИЗАЦИЯ УЧЕТА ЗАКУПКИ ЛЕКАРСТВЕННЫХ ПРЕПАРАТОВ.
Объектом проектирования являются база данных и прикладные
программы для работы с ней.
Цель разработки автоматизация учета закупки лекарственных
препаратов в аптеке.
В процессе работы проводились разработка инфологической,
логической и физической модели базы данных.
В результате проектирования создана база данных и пакет
прикладных программ для конечных пользователей, которые позволяют
автоматизировать учет закупки лекарственных препаратов в аптеке.
Разработанный программный продукт может быть внедрен после
проведения дополнительного тестирования.
Введение
Бурное развитие информационных технологий обусловило
необходимость выработки новых подходов к решению проблем автоматизации
деятельности различных организаций, служб, предприятий. Работа таких
организаций связана с накоплением большого количества информации.
В недавнем прошлом информацию такого рода хранили в
картотеках, используя "бумажные" технологии. И, разумеется, они
занимали довольно большие объёмы. Вся информация заносилась вручную на бумажные
карточки, что создавало большие неудобства, и требовало огромных временных
затрат на поиск нужной информации, добавление и редактирование данных.
Естественно, работа такого вида являлась очень кропотливой. Кроме того, сама
картотека довольно быстро изнашивалась по ходу работы.
Сейчас, в век компьютерных технологий и большого прогресса в
этой сфере, имеются очень удобные, надёжные, быстродействующие компьютерные
системы, выполняющие задачи качественного структурированного хранения
информации.
Однако при осуществлении поиска данных в подобных системах
пользователь часто сталкивается с проблемами, связанными с невысокой скоростью
обработки запросов, недостаточными критериями поиска информации и т.д.
Кроме того, чрезвычайно важным представляется вопрос
надёжности хранения и конфиденциальности различных сведений.
Для решения этих и многих других задач в настоящее время
используется специальное программное обеспечение, часто объединяемое в крупные
информационно-справочные системы.
база учет закупка аптека
В рамках данного курсового проекта разрабатывается
информационная система аптеки, предназначенная для автоматизации процесса
закупки лекарственных препаратов.
Разрабатываемая программная система предполагает учёт
многочисленной информации, регламентирующей деятельность аптеки, например:
данные о содержащихся в аптеке препаратах;
данные о движении лекарственных препаратах;
данные о поставщиках;
данные об аптеках.
Основными требованиями, предъявляемыми к такого рода
программным продуктам, можно отнести:
обеспечение возможностей для просмотра, добавления, удаления
и редактирования записей базы данных (БД) системы;
организация поиска информации БД по запросам пользователей;
обеспечение безопасности и целостности данных БД;
организация сетевого доступа к БД ИС для пользователей
различных категорий в соответствие с правами, установленными администратором
БД;
обеспечение удобного интуитивно понятного графического
пользовательского интерфейса (GUI), доступного пользователю любой квалификации.
Потребность в автоматизированном рабочем месте продавца,
менеджера и управляющего аптеки возникла в первую очередь из-за большого
количества информации (разного рода сведений о лекарственных препаратах,
поставщиках и т.п.), с которой им регулярно необходимо оперативно работать.
Актуальность разработки данного ПО обусловлена высокой
потребностью аптек в относительно недорогих, нетребовательных к системным и
аппаратным ресурсам программным продуктам, предоставляющим возможности для
удобного и, главное, надёжного хранения информации.
Данная АИС должна представлять собой совокупность программных
средств, наборов данных и справочной информации, позволяющих максимально
увеличить производительность труда, иметь приемлемую экономическую
эффективность.
Очевидно, решение задачи такого масштаба требует тщательного
планирования и выработки общей стратегии процесса разработки в соответствие с
основными принципами и рекомендациями профессионального модуля ПМ.03 Участие в
интеграции программных модулей.
1. Анализ
предметной области и формирование требований пользователей
1.1 Анализ
предметной области
В соответствии с заданием необходимо спроектировать базу
данных для автоматизации процесса закупки лекарственных средств. Система
предназначена для фирм c розничной сетью аптек.
Управляющий заключает договоры с поставщиками. В договор
входит: номер, наименование поставщика, адрес, телефон, поставляемые товары.
Менеджер заказывает препараты на основании данных из аптек.
Менеджеру необходима информация о количестве товара. На основании этих данных
менеджер формирует заказ определенным поставщикам в зависимости от перечня
поставляемых по договору препаратов.
Продавец осуществляет продажу, поэтому ему требуется
информация о количестве того или иного лекарственного препарата.
При формировании заказа, указывается номер документа,
наименование препарата, необходимое количество, даты заказа и оплаты. По мере
поступления препарата в аптеку, заполняются дата поставки и количество
поступившего товара.
В аптеках постоянно должно находиться определённое количество
жизненно важных лекарственных препаратов, при достижении минимального
количества которых, оно немедленно должно поставляться в аптеку. Поэтому данное
количество важных препаратов постоянно поддерживается на определённом уровне и
при достижении минимального количества указывается в заказе.
Поставщик поставляет заказанный препарат непосредственно
каждой аптеке в соответствии с заказом, в котором указывается аптека, сделавшая
заказ.
Управляющему необходима оперативная информация о поставщиках
и выполненных поставках, а именно о сумме выполненных и невыполненных поставок.
Данная система предназначена для того, чтобы значительно упростить процесс
получения данной информации путём автоматизации соответствующих процессов.
Цель создания базы данных информационной системы:
автоматизация учета закупки лекарственных препаратов.
Список пользователей базы данных:
- Управляющий;
- Менеджер;
- Продавец.
1.2 Запросы
пользователей
Запросы продавца представлены в соответствии с рисунком 1.
Рисунок 1 - Форма отчета "Сведения о наличии
товара"
Запросы менеджера представлены в соответствии с рисунком 2.
Рисунок 2 - Форма отчёта "Заявка на поставку"
Запросы управляющего представлены в соответствии с рисунками
3-4.
Рисунок 3 - Форма отчёта "Объёмы выполненных
поставок"
Рисунок 4 - Форма отчёта "Объёмы выполненных поставок по
договору"
1.3
Информационные процессы
Заключение договора с
поставщиками;
Формирование торгового
предложения от поставщика;
Формирование заказа на
поставку препаратов;
Получение лекарственных
препаратов;
Информацию о количестве
того или иного товара, необходимая продавцу.
Менеджеру для
формирования заказа требуется информация о количестве товара в аптеке:
Остаток на начало
периода, который подсчитывается в начале каждого месяца;
Поступление (приход)
товара на склад от поставщика;
Продажа (расход) товара в
розничной сети аптек;
Остаток на конец периода,
подсчитываемый в конце каждого месяца.
Управляющий запрашивает
информацию об объёмах выполненных поставок в определённый срок.
2.
Проектирование и создание базы данных
2.1
Разработка концептуальной модели предметной области
2.1.1
Сущности
Выделим следующие сущности:
Поставщики;
Торговое предложение;
Заказ;
Справочник препаратов;
Аптеки;
Товар в аптеке.
2.1.2
Первичные ключи
Выберем первичные ключи для каждой сущности (первичный ключ
должен быть уникальным):
Поставщики - Код
поставщика;
Торговое предложение -
Порядковый номер;
Заказ - Номер заказа;
Справочник препаратов -
Код товара;
Аптеки - Номер аптеки;
Товар в аптеке - Код
расхода.
2.1.3
Атрибуты сущностей
Определим описательные атрибуты сущностей:
Поставщики - Название
поставщика, Адрес, Телефон;
Торговое предложение -
Оптовая цена;
Заказ - Количество
заказанного товара, Дата заказа, Дата оплаты, Дата поставки, Количество
поставленного товара, Номер документа;
Справочник препаратов -
Группа препарата, Наименование препарата, Единица измерения, Жизненно
необходимый препарат;
Аптеки - Адрес, Телефон;
Товар в аптеке - Остаток
товара, Продано товара, Розничная цена (цена 1 ед. товара), Минимальный запас
жизненно необходимых препаратов.
2.1.4
Спецификация связей
Выполним спецификацию связей:
Поставщик (1)
предоставляет Торговое предложение (М);
На основании Торгового
предложения (1) формируется Заказ (М) на поставку товара;
Торговое предложение (М)
формируется на основании Справочника препаратов (1);
Товар в аптеке (1)
формируется из Заказа (М);
Справочник препаратов (1)
служит приложением к Торговому предложению (М) и Заказу (М).
Учитывая всё вышесказанное, составил ER-модель данных в
соответствии с рисунком 5.
Рисунок 5 - ER-модель данных
2.1.5
Обрабатываемые транзакции
Т1: Ввод информации об аптеках, добавляется запись в таблицу
"Apteki";
Т2: Ввод справочной информации о препарате - добавляется
запись в таблицу "PreparSprav";
Т3.1: Ввод договора с поставщиком - добавляется запись в
таблицу "Postavshiki";
Т3.2: Формирование торгового предложения - добавляется запись
в таблицу "TorgPred";
Т4: Формирование товара в аптеке - добавляется запись в
таблицу "TovarApt";
Т5.1: Заказ товара у поставщика - добавляется запись в
таблицу "Zakaz";
Т5.2: Ввод поставки (указание даты поставки и количества
товара при поступлении) - изменение записи в таблице "Zakaz";
Т6.1: Формирование отчёта для продавца о наличии товара в
аптеке - выбираются таблицы PreparSprav и TovarApt;
Т6.2: Формирование отчёта для менеджера "Заявка на
поставку" - выбираются таблицы Postavshik, PreparSprav и TorgPred;
Т6.3: Формирование отчёта для управляющего "Объёмы
выполненных поставок" - выбираются таблицы Postavshik, Zakaz и TorgPred;
Т6.4: Формирование отчёта для управляющего "Объёмы
выполненных поставок по договору" - выбираются таблицы Postavshik,
PreparSprav, TorgPred и Zakaz;
2.2 Выбор
архитектуры программно-технологической реализации АИС и используемой СУБД
При разработке данного программного продукта будут
применяться элементы визуального объектно-ориентированного программирования в
среде Delphi.
Для того чтобы представлять отчеты в виде документов Exsel
предполагается использование Object Likring and Embedding (OLE) - основанный на
COM механизм, позволяющий приложениям взаимодействовать между собой. Он
повышает эффективность работы за счет использования в приложении возможностей
других программ.
Работа пользователей должна осуществляется в
многопользовательском параллельном режиме для локальной сети. Для реализации
задачи целесообразно использовать технологию клиент-сервер базы данных. БД
должна храниться на сервере, там же находится ядро СУБД и часть бизнес - логики
в форме хранимых процедур. На клиенте находится презентационная логика и
остальная часть бизнес - логики приложения. Клиент обращается к серверу с
запросами на языке SQL. Разрабатываемая система является многопользовательской
и в связи с этим используется СУБД InterBase.InterBase является высокопроизводительной
кросс-платформенной встраиваемой реляционной базой данных, сочетающей простую
инсталляцию, автоматическое восстановление после сбоев, чрезвычайно низке
системные требования и минимальную потребность в сопровождении, что очень важно
для надежного функционирования распределенных высокопроизводительных критически
важных бизнес-приложений. Среди возможностей базы данных InterBase -
запатентованные обработчики оповещений о событиях, хранимые процедуры,
триггеры, определяемые пользователем функции (UDF) и фильтры для работы с
объектами BLOB.
Одной из основных особенностей InterBase (в отличие от
MSSQL), пожалуй, можно считать архитектуру (Multi-Generational), которая
обеспечивает уникальные возможности при многопользовательской работе - пишущие
пользователи никогда не блокируют читающих! Помимо этого, данная архитектура,
позволяет отказаться (в отличие от ORACLE) от использования протокола
транзакций для восстановления базы данных после сбоев, поэтому InterBase
обладает очень высокой надежностью и устойчивостью. Также в InterBase
реализован механизм оптимистической блокировки на уровне записи, т.е. сервер
блокирует только те записи, которые реально были изменены пользователем, а не
блокирует всю страницу данных целиком (в отличие от MSSQL). Эта особенность еще
больше снижает вероятность конфликтов при многопользовательской работе.
В InterBase удалось добиться таких показателей высокой
доступности данных, которые превосходят характеристики других баз данных при
выполнении параллельных длительных транзакций в информационных и финансовых
системах.
В отличие от большинства современных баз данных, InterBase
требует лишь незначительного администрирования, проста в инсталляции и
разработана с целью уменьшения затрат на сопровождение, что направлено на
ускорение процесса разработки приложений и гарантирует быстрый возврат
инвестиций для компаний, нуждающихся в сложных распределенных приложениях.
2.3
Логическое проектирование базы данных
2.3.1
Логическая структура
В данной части курсового проекта в таблицах 1 - 5 представлено
логическое проектирование базы данных Apteka. Приведены основные характеристики
данной базы данных.
Таблица 1 - Логическая структура таблицы Postavshiki
(информация о поставщиках)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
Kod_pstvsh
|
Числовой
|
4
|
>=0, первичный ключ
|
Код поставщика
|
Name_pstvsh
|
Строковый
|
32
|
|
Название поставщика
|
Adres_pstvsh
|
Строковый
|
32
|
|
Адрес поставщика
|
Tel_pstvsh
|
Числовой
|
16
|
|
Телефон поставщика
|
Таблица 2 - Логическая структура таблицы PreparSprav (справочная
информация о препаратах)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
Kod_tovara
|
Числовой
|
4
|
>=0, первичный ключ
|
Код товара
|
Grup_tov
|
Строковый
|
32
|
|
Группа товара
|
Name_tovara
|
Строковый
|
32
|
|
Наименование препарата
|
Ed_iz
|
Строковый
|
8
|
|
Единица измерения
|
Zn_n_pr
|
Логический
|
1
|
|
Является ли жизненно необходимым препаратом
|
Таблица 3 - Логическая структура таблицы TorgPred (торговое
предложение)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
NumTorgPred
|
Числовой
|
4
|
>=0, первичный ключ
|
Номер торгового предложения
|
Kod_tovara
|
Числовой
|
4
|
Внешний ключ
|
Код товара
|
Kod_pstvsh
|
Числовой
|
4
|
Внешний ключ
|
Код поставщика
|
Price_opt
|
Числовой
|
8, 2
|
|
Оптовая цена
|
Внешний ключ Kod_tovara ссылается на таблицу PreparSprav
Внешний ключ Kod_pstvsh ссылается на таблицу Postavshiki
Таблица 4 - Логическая структура таблицы Apteki (информация
об аптеках)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
Num_aptk
|
Числовой
|
4
|
>=0, первичный ключ
|
Номер аптеки
|
Aptk_adres
|
Строковый
|
16
|
|
Название аптеки
|
Aptk_telf
|
Строковый
|
16
|
|
Телефон аптеки
|
Таблица 5 - Логическая структура таблицы TovarApt (информация
о товаре в аптеке, продажа товара)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
Kod_rashoda
|
Числовой
|
4
|
>=0, первичный ключ
|
Код расхода
|
Tovar_ost
|
Числовой
|
8
|
|
Остаток товара в аптеке
|
Tovar_prod
|
Числовой
|
8
|
|
Продано товара
|
Tovar_price_ed
|
Числовой
|
8, 2
|
|
Розничная цена 1 ед. товара
|
Min_zps
|
Числовой
|
8
|
|
Минимальный запас жизненно необходимых
препаратов
|
Kod_tovara
|
Числовой
|
4
|
Внешний ключ
|
Код товара
|
Num_aptk
|
Числовой
|
4
|
Внешний ключ
|
Номер аптеки
|
Внешний ключ Kod_tovara ссылается на таблицу PreparSprav
Внешний ключ Num_aptk ссылается на таблицу Apteki
Таблица 6 - Логическая структура таблицы Zakaz (заказ
поставщику)
Имя поля
|
Тип
|
Ширина
|
Ограничения целостности
|
Примечание
|
Num_zakz
|
Числовой
|
4
|
Номер заказа
|
NumTorgPred
|
Числовой
|
4
|
Внешний ключ
|
Номер торгового предложения
|
Kod_rashoda
|
Числовой
|
4
|
Внешний ключ
|
Код расхода
|
Zak_tov_kol
|
Числовой
|
8
|
|
Заказано товара
|
Data_zakz
|
Дата
|
|
|
Дата заказа
|
Data_oplt
|
Дата
|
|
|
Дата оплаты
|
Data_post
|
Дата
|
|
|
Дата поставки
|
Post_tov_kol
|
Числовой
|
8
|
|
Поступило товара
|
Num_doc
|
Числовой
|
8
|
|
Номер документа
|
Внешний ключ NumTorgPred ссылается на таблицу TorgPred
Внешний ключ Kod_rashoda ссылается на таблицу TovarApt
2.3.2 Анализ
транзакций
Т1 - Ввод информации об аптеках
При выполнении Т1 (таблица 7) производится добавление записи
в таблицу Apteki. Атрибут Num_apt (номер аптеки) формируется автоматически.
Вводится адрес (Aptk_adres) и телефон (Aptk_telf) аптеки.
Таблица 7 - Т1
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Apteki (Num_apt, Aptk_adres, Aptk_telf)
|
Insert
|
|
Т2 - Ввод справочной информации о препарате
При выполнении Т2 (таблица 8) производится добавление записи
в таблицу PreparSprav. Атрибут Kod_tovara (код товара) формируется
автоматически. Вводится название (Name_tovara), единица измерения (Ed_iz) и
является ли данный препарат жизненно необходимым (Zh_n_pr).
Таблица 8 - Т2
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
PreparSprav (Kod_tovara, Name_tovara, Ed_iz,
Zh_n_pr)
|
Insert
|
|
Т3.1 - Ввод договора с поставщиком
При выполнении Т3.1 (таблица 9) производится добавление
записи в таблицы Postavshiki. Атрибут Kod_pstvsh (код поставщика) формируется
автоматически, название (Name_pstvsh), адрес (Adres_pstvsh) и телефон
(Tel_pstvsh) поставщика вводится пользователем.
Таблица 9 - Т3.1
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Postavshiki (Kod_pstvsh,Name_pstvsh,
Adres_pstvsh, Tel_pstvsh)
|
Insert
|
|
Т3.2 - Формирование торгового предложения
После ввода информации о поставщике, происходит формирование
торгового предложения данного поставщика. При выполнении Т3.2 (таблица 10)
производится добавление записи в таблицы TorgPred. Атрибут NumTorgPred (номер
торгового предложения) формируется автоматически. Из таблицы Postavshiki выбирается
поставщик по коду поставщика (Kod_pstvsh). Из таблицы PreparSprav происходит
выбор лекарственного препарата коду товара (Kod_tovara) и вводится оптовая цена
препарата (Price_opt).
Таблица 10 - Т3.2
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Postavshiki (Kod_pstvsh) PreparSprav
(Kod_tovara) TorgPred (NumTorgPred, Price_opt)
|
Select Select Insert
|
|
Т4 - Формирование товара в аптеке
При выполнении Т4 (таблица 11) производится добавление записи
в таблице TovarApt. Атрибут Kod_rashoda (код расхода) формируется
автоматически. Из таблицы PreparSprav выбирается препарат по коду товара
(Kod_tovara). Номер аптеки выбирается из таблицы Apteki по номеру аптеки
(Num_apt). Остаток товара (Tovar_ost) суммируется с количеством товара из
таблицы Zakaz (Post_tov_kol). Вводится розничная цена 1 ед. товара
(Tovar_price_ed) и количество минимального запаса жизненно необходимых
препаратов (Min_zps).
Таблица 11 - Т4
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
PreparSprav (Kod_tovara) Apteki (Num_apt) Sum
(Zakaz. Post_tov_kol, TovarApt. Tovar_ost) TovarApt (Tovar_price_ed, Min_zps)
|
Select Select Select Insert
|
|
Т5.1 - Заказ товара у поставщика
При выполнении Т5.1 (таблица 12) производится добавление
записи в таблицу Zakaz. Атрибут Num_zakz (номер заказа) формируется
автоматически. Номер торгового предложения (NumTorgPred) выбирается из таблицы
TorgPred. Код расхода (Kod_rashoda) выбирается из таблицы TovarApt. Вводится
количество заказанного товара (Zak_tov_kol), дата заказа (Data_zakz), дата
оплаты (Data_oplt), дата поставки (Data_post), поступило товара (Post_tov_kol)
и номер документа (Num_doc). Печатаются заказы и отправляются поставщикам.
Таблица 12 - Т5.1
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 17-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
TorgPred (NumTorgPred) TovarApt (Kod_rashoda)
Apteki (Num_aptk) PreparSprav (Kod_tovara) Zakaz (Zak_tov_kol, Price_zakz,
Data_zakz, Data_oplt, Post_tov_kol, Num_doc)
|
Select Select Select Select Insert
|
|
Т5.2 - Ввод поставки (указание даты поставки и количества
товара при поступлении)
При выполнении Т5.2 (таблица 13) производится поиск
соответствующего заказа по номеру документа (Num_doc), затем происходит
изменение записи в таблицу Zakaz, вводится дата поставки (Data_post) и
количество поступившего товара (Post_tov_kol).
Таблица 13 - Т5.2
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 20-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Zakaz (Num_doc) Zakaz (Data_post, Post_tov_kol)
|
Select Update
|
|
Т6.1 - Формирование отчёта для продавца о наличии товара в
аптеке
При выполнении Т6.1 (таблица 14) будет производится выборка
из таблиц PreparSprav и TovarApt.
Таблица 14 - Т6.1
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 20-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
PreparSprav (Kod_tovara, Name_tovara, Ed_iz)
TovarApt (Kod_rashoda, Tovar_ost) Apteki (Num_aptk)
|
Select Select Select
|
PreparSprav (Kod_tovara, Name_tovara, Ed_iz)
Apteki (Num_aptk) TovarApt (Tovar_ost)
|
Т6.2 - Формирование отчёта для менеджера "Заявка на
поставку"
При выполнении Т6.2 (таблица 15) будет производится выборка
из таблиц Postavshik, PreparSprav и TorgPred.
Таблица 15 - Т6.2
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 20-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Postavshiki (Kod_pstvsh, Name_pstvsh)
PreparSprav (Kod_tovara, Name_tovara, Ed_iz) TorgPred (NumTorgPred,
Price_opt)
|
Select Select Select
|
Postavshiki (Kod_pstvsh, Name_pstvsh)
PreparSprav (Name_tovara, Ed_iz) TorgPred (Price_opt)
|
Т6.3 - Формирование отчёта для управляющего "Объёмы
выполненных поставок"
При выполнении Т6.3 (таблица 16) будет производится выборка
из таблиц Postavshik, Zakaz и TorgPred.
Таблица 16 - Т6.3
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 20-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Postavshiki (Kod_pstvsh, Name_pstvsh) Zakaz
(Num_zakz, Data_post) TorgPred (NumTorgPred, Price_opt)
|
Select Select Select
|
Postavshiki (Kod_pstvsh, Name_pstvsh) TorgPred
(Price_opt)
|
Т6.4 - Формирование отчёта для управляющего "Объёмы
выполненных поставок по договору"
При выполнении Т6.4 (таблица 17) будет производится выборка
из таблиц Postavshik, PreparSprav, TorgPred и Zakaz.
Таблица 17 - Т6.4
Активность
|
Интенсивность использования (вызов/час)
|
Ежедневно с 8-00 до 20-00
|
|
Таблица, поля
|
Тип доступа
|
Выходные данные
|
Postavshiki (Kod_pstvsh, Name_pstvsh)
PreparSprav (Kod_tovara, Name_tovara, Ed_iz) TorgPred (NumTorgPred,
Price_opt) Zakaz (Num_zakz, Data_zakz, Data_post)
|
Select Select Select Select
|
Postavshiki (Kod_pstvsh, Name_pstvsh)
PreparSprav (Name_tovara, Ed_iz) TorgPred (Price_opt) Zakaz (Data_zakz,
Data_post)
|
2.4 Создание
базы данных
Для создания базы данных использовал ER/Studio. Порядок
действий следующий:) Запустил ER/Studio;
b) В
обозревателе объектов открыл ветку "Maim Model" и выбрал в
контекстном меню "Entity - NewEntity";) Ввёл имя сущности, имя
таблицы БД;) На вкладке "Attribute" щелкнул по кнопке
"Add" для добавления нового атрибута сущности, ввёл имя, тип данных,
ограничения целостности. Для создания связи между сущностями (отношения)
щелкнул по Relationship в дереве обозревателя объектов и выбрал команду
"NewRelationship…";) Выбрал родительскую сущность, дочернюю и указал
тип связи на вкладке "Triggers". Затем указал, какие действия должны
выполняться при внесении изменений в связанные таблицы и щелкнул
"ОК";) Создал физическую модель данных из контекстного меню
"MainModel" и в обозревателе объектов выбрал "Generate Phisical
Model…", задал имя модели и выбрал тип СУБД;) После создания физической
модели в ER/Studio сгенерировался SQL-код для создания базы данных в СУБД
InterBase;) Для создания базы данных в СУБД InterBase включил сервер,
запустил IBConsole.
Зарегистрировался
на сервере, выбрав команду меню "Register…";
i) Выбрал тип сервера - локальный, в строке
"UserName" ввёл SYSDBA, в строке "Password" - masterkey;
j) Создал базу данных, выбрав в меню
"DataBase" команду "CreateDataBase". В появившемся окне
указал путь к БД в строке "Filenames", ввёл в строке
"Alias" псевдоним БД и выбрал кодовую страницу WIN1251 в
"DefaultCharacterSet";) Перед тем, как работать с БД,
зарегистрировал её "Register" и установил соединение
"Connect", выбрав соответствующие команды в меню
"IBConsole";) Для создания таблиц БД, установки связей и т.д.
воспользовался средством "InteractiveSQL" из меню "Tools".
С помощью меню "Query" выполнил SQL-запросы по
созданию доменов, таблиц, просмотров из сгенерированного SQL-кода в ER/Studio
(листингSQL-кода приведён в приложения А).
m) Для реализации транзакции "Т1: Ввод информации об
аптеках" создал на сервере хранимую процедуру "NEW_APTEKA":
PROCEDURE "NEW_APTEKA"
(
"P1" CHAR (16),
"P2" NUMERIC (16, 0)
)into "Apteki" ("Aptk_adres",
"Aptk_telf") values (: p1,: p2);
) Для реализации транзакции "Т2: Ввод справочной
информации о препарате" создал на сервере хранимую процедуру
"add_preparat":
PROCEDURE " add_preparat"
(
"P1" CHAR (32),
"P2" CHAR (32),
"P3" CHAR (8),
"P4" NUMERIC (1, 0)
)into "PreparSprav"
("grup_tov","Name_tovara","Ed_iz","Zh_n_pr")
values (: p1,: p2,: p3,: p4);
) Для реализации транзакции "Т3.1: Ввод договора
с поставщиком" создал на сервере хранимую процедуру
"add_pstvsh":
PROCEDURE " add_pstvsh"
(
"P1" CHAR (32),
"P2" CHAR (32),
"P3" NUMERIC (16, 0)
)into "Postavshiki" ("Name_pstvsh","Adres_pstvsh","Tel_pstvsh")
values (: p1,: p2,: p3);
Для реализации транзакции "Т3.2: Формирование торгового
предложения" создал на сервере хранимую процедуру
"add_torgpred":
PROCEDURE " add_torgpred "
(
"P1" INTEGER,
"P2" INTEGER,
"P3" NUMERIC (8,2)
)into "TorgPred" ("Kod_tovara",
"Kod_pstvsh", "Price_opt") values (: p1,: p2,: p3);
) Для реализации транзакции "Т4: Формирование
товара в аптеке" создал на сервере хранимую процедуру
"add_tovar_apt":
PROCEDURE " add_tovar_apt"
(
"P1" INTEGER,
"P2" INTEGER,
"P3" NUMERIC (8, 0),
"P4" NUMERIC (8, 0),
"P5" NUMERIC (8, 0),
"P6" NUMERIC (8, 0)
)into "TovarApt"
("Num_aptk","Kod_tovara","Tovar_ost","Tovar_prod","Tovar_price_ed","Min_zps")
values (: p1,: p2,: p3,: p4,: p5,: p6);
) Для реализации транзакции "Т5.1: Заказ товара у
поставщика" создал на сервере хранимую процедуру "add_zakaz":
PROCEDURE " add_zakaz"
(
"P1" INTEGER,
"P2" INTEGER,
"P3" NUMERIC (8, 0),
"P4" DATE,
"P5" NUMERIC (8, 0)
)into "Zakaz"
("NumTorgPred","Kod_rashoda","Zak_tov_kol","Data_zakz","Num_doc")
values (: p1,: p2,: p3,: p4,: p5);
) Для реализации транзакции "Т6.2: Формирование
отчёта для менеджера" создал на сервере 2 хранимых процедуры
"manager_otchet" (выбор заявок на поставку по каждому поставщику) и
"manager_otchet2" (выбор заявок на поставку по определённому
поставщику):
PROCEDURE "manager_otchet"
(
"P1" INTEGER,
"P2" CHAR (32),
"P3" CHAR (32),
"P4" CHAR (8),
"P5" NUMERIC (8,2),
"P6" NUMERIC (8, 0),
"P7" NUMERIC (8, 0)
)select "Postavshiki". "Kod_pstvsh",
"Postavshiki". "Name_pstvsh",
"PreparSprav". "Name_tovara",
"PreparSprav". "Ed_iz", "TorgPred".
"Price_opt",
"Zakaz". "Zak_tov_kol",
"TorgPred". "Price_opt"*"Zakaz".
"Zak_tov_kol""Postavshiki", "PreparSprav",
"TorgPred", "Zakaz""Postavshiki".
"Kod_pstvsh"="TorgPred". "Kod_pstvsh" and
"TorgPred".
"Kod_tovara"="PreparSprav". "Kod_tovara" and
"Zakaz".
"NumTorgPred"="TorgPred". "NumTorgPred": p1,:
p2,: p3,: p4,: p5, p6, p7;PROCEDURE " manager_otchet2"
(
"PKOD" INTEGER
)
(
"P1" INTEGER,
"P2" CHAR (32),
"P3" CHAR (32),
"P4" CHAR (8),
"P5" NUMERIC (8,2),
"P6" NUMERIC (8, 0),
"P7" NUMERIC (8, 0)
)select "Postavshiki". "Kod_pstvsh",
"Postavshiki". "Name_pstvsh",
"PreparSprav". "Name_tovara",
"PreparSprav". "Ed_iz", "TorgPred". "Price_opt",
"Zakaz". "Zak_tov_kol",
"TorgPred". "Price_opt"*"Zakaz".
"Zak_tov_kol""Postavshiki", "PreparSprav",
"TorgPred", "Zakaz""Postavshiki". "Kod_pstvsh"="TorgPred".
"Kod_pstvsh" and
"TorgPred".
"Kod_tovara"="PreparSprav". "Kod_tovara" and
"Zakaz". "NumTorgPred"="TorgPred".
"NumTorgPred" and
"Postavshiki". "Kod_pstvsh"=: pkod: p1,:
p2,: p3,: p4,: p5, p6, p7;
3. Разработка
клиентского программного обеспечения
3.1 Структура
прикладного программного обеспечения
Для работы с базой данных DB_APT. GDB,
разработано клиентское приложение Kr_Apteka. Приложение включает в себя формы
для ввода и отображения данных, а также необходимые элементы управления.
Таблица 18 - Структура прикладного программного обеспечения
Форма
|
Модуль
|
Назначение
|
Пользователь
|
FPassword
|
UnitAuth. pas
|
Авторизация пользователей
|
Управляющий, менеджер, продавец
|
FProdavec
|
UnitProdavec. pas
|
Меню управления, просмотр информации и печать
отчётов для продавца
|
Продавец
|
FManager
|
UnitManager. pas
|
Меню управления, просмотр информации и печать
отчётов для менеджера
|
Менеджер
|
FTorgPredApteki
|
UnitTorgPredApteki. pas
|
Торговое предложение во всех аптеках
|
Менеджер
|
FNewTorgPredApteki
|
UnitNewTorgPredApteki. pas
|
Формирование торгового предложения в
определённой аптеке
|
Менеджер
|
FZayavkaPostavka
|
UnitZayavkaPostavka. pas
|
Формирование заявки на поставку лекарственного
препарата
|
Менеджер
|
FNewPreparat
|
UnitNewPreparat. pas
|
Добавление нового лекарственного препарата в
справочник
|
Менеджер, Директор
|
FManagerOtchet
|
UnitManagerOtchet. pas
|
Вывод на экран и печать отчёта для менеджера
"Заявка на поставку"
|
Менеджер
|
FDirector
|
UnitDirector. pas
|
Меню управления, просмотр информации и печать
отчётов для директора
|
Директор
|
FNewApteka
|
UnitNewApteka. pas
|
Добавление данных о новой аптеке в розничной
сети
|
Директор
|
FNewPostavshik
|
UnitNewPostavshik. pas
|
Добавление данных о новом поставщике
|
Директор
|
FNewTorgPred
|
UnitNewTorgPred. pas
|
Добавление данных о торговом предложении
определённого поставщика
|
Директор
|
3.2 Описание
интерфейса и алгоритмов работы программных модулей
3.2.1 Модуль
данных
На модуле данных разместил компоненты в
соответствии с таблицей 19.
Таблица 19 - Модуль данных
Компонент
|
Объект БД
|
Назначение
|
SQLConnection1
|
|
Подключение к БД
|
SimpleDataSetAllAptk
|
Apteki
|
Выборка всех записей из таблицы
"Аптеки"
|
SQLStoredProcAddAptk
|
NEW_APTEKA
|
Добавление записи в таблицу "Аптеки"
|
SimpleDataSetAllPstvsh
|
Postavshiki
|
Выборка всех записей из таблицы
"Поставщики"
|
SQLStoredProcAddPstvsh
|
add_pstvsh
|
Добавление записи в таблицу
"Поставщики"
|
SimpleDataSetAllPreparat
|
PreparSprav
|
Выборка всех записей из таблицы
"Справочник препаратов"
|
SQLStoredProcAddPreparat
|
add_preparat
|
Добавление записи в таблицу "Справочник
препаратов"
|
SimpleDataSetOptPrice
|
TorgPred
|
Выборка "Оптовой цены" из таблицы
"Торговое предложение"
|
SimpleDataSetTovar_v_Apteke
|
Apteki, PreparSprav, TovarApt, TorgPred
|
Выборка "Код расхода", "Адрес
аптеки", "Телефон аптеки", "Наименование товара",
"Оптовая цена", "Розничная цена", "Остаток
товара", "Продано товара", "Признак жизн. необ.
препарат." и "Мин. запас жизн. необ. препарат." из таблиц
"Аптеки", "Справочник препаратов", "Товар в
аптеке" и "Торговое предложение"
|
SQLStoredProcAddTorgPred
|
add_torgpred
|
Добавление записи в таблицу "Торговое
предложение"
|
SQLStoredProcAddTorgPredApteki
|
add_tovar_apt
|
Добавление записи в таблицу "Товар в
аптеке"
|
SimpleDataSetTovarApt
|
TovarApt
|
Выборка всех записей из таблицы "Товар в
аптеке"
|
SimpleDataSetZayavkaPostavka
|
PreparSprav, TorgPred
|
Выборка всех записей из таблиц "Справочник
препаратов" и "Торговое предложение"
|
SQLStoredProcManagerOtchet2
|
manager_otchet2
|
Выборка "Код поставщика",
"Название поставщика", "Наименование товара", "Ед.
изм.", "Оптовая цена", "Кол-во заказанного товара",
"Сумма" из таблиц "Поставщики", "Справочник
препаратов", "Торговое предложение" и "Заказ" по
определённому поставщику
|
SQLStoredProcAddZakaz
|
add_zakaz
|
SimpleDataSetManagerOtchet
|
manager_otchet
|
Выборка всех записей из хранимой процедуры
"manager_otchet"
|
SimpleDataSetManagerOtchet2
|
manager_otchet2
|
Выборка всех записей из хранимой процедуры
"manager_otchet2"
|
3.2.2 Главная
форма "FPassword"
Выполнение программы начинается с формы
(FPassword) авторизации пользователя в соответствии с рисунком 6.
Рисунок 6 - Форма (FPassword) авторизации
пользователя
На данной форме разместил компоненты в
соответствии с таблицей 20.
Таблица 20 - Компоненты формы
"FPassword"
Компонент
|
Назначение
|
Label1
|
Надпись "Пользователь"
|
Label2
|
Надпись "Пароль"
|
Image1
|
Фоновый рисунок
|
ComboBox1
|
Выбор пользователя
|
Edit1
|
Ввод пароля
|
BitBtn1
|
Кнопка "Войти"
|
В зависимости от выбранного пользователя
появится поле ввода соответствующего пароля и если пароль будет введён 3 раза
неправильно, приложение закрывается. После процедуры авторизации произойдёт
переход на 1 из 3 основных форм для каждого пользователя, с которых и будет
происходить соответствующее управлениями функциями:
Форма "FProdavec" для продавца в
соответствии с рисунком 7;
Форма "FManager" для менеджера в
соответствии с рисунком 8;
Форма "FDirector" для
управляющего в соответствии с рисунком 9.
Обработчик события "OnChange"
компонента "ComboBox1":TFPassword.comboBox1Change (Sender: TObject);.
Visible: =true;. Visible: =true;. PasswordChar: ='*';. Visible: =true;;
Обработчик события "OnClick"
компонента "BitBtn1":TFPassword. BitBtn1Click (Sender:
TObject);ComboBox1. Text='Продавец' thenEdit1. Text = '1' then. Visible:
=false;. ShowModal;begin(n);n<>0 then MessageDlg ('Пароль неверный.
Осталось попыток '+inttostr (n),mtWarning, [mbOK],0)begin MessageDlg ('Лимит
превышен, авторизация не выполнена',mtError, [mbOK],0); close; end;;ComboBox1.
Text='Менеджер' thenEdit1. Text = '2' then. Visible: =false;.
ShowModal;begin(n);n<>0 then MessageDlg ('Пароль неверный. Осталось
попыток '+inttostr (n),mtWarning, [mbOK],0)begin MessageDlg ('Лимит превышен,
авторизация не выполнена',mtError, [mbOK],0); close; end;;ComboBox1.
Text='Управляющий' thenEdit1. Text = '3' then. Visible: =false;. ShowModal;begin(n);n<>0
then MessageDlg ('Пароль неверный. Осталось попыток '+inttostr (n),mtWarning,
[mbOK],0)begin MessageDlg ('Лимит превышен, авторизация не выполнена',mtError,
[mbOK],0); close; end;;;
3.2.3 Форма
"FProdavec"
Форма "FProdavec" предназначена
для пользователя "Продавец" и осуществления им основных функций в
рамках соответствующей должности. Вид формы показан на рисунке 7.
Рисунок 7 - Форма "FProdavec"
для продавца
На данной форме разместил компоненты в соответствии
с таблицей 21.
Таблица 21 - Компоненты формы
"FProdavec"
Компонент
|
Вложенный компонент
|
Назначение
|
Panel1
|
|
Компонент для размещения и группировки
элементов
|
|
GroupBox1
|
Меню пользователя
|
|
BitBtn3
|
Кнопка "Товар"
|
|
BitBtn4
|
Кнопка "Выход"
|
|
CheckBox1
|
Выбор "Показать/Скрыть всё"
|
Image1
|
|
Фоновый рисунок
|
PageControl1 (TabSheet1)
|
|
Вкладка "Товар"
|
|
DBGrid1
|
Вывод данных
|
|
BitBtn1
|
Кнопка "Печать"
|
|
BitBtn2
|
Кнопка "Продать"
|
|
Label1
|
Надпись "Аптека"
|
|
DBLookupComboBox1
|
Выбор аптеки
|
В данном случаи меню представлено кнопкой
"Товар", после нажатия на которую на данной форме будет активна
вкладка компонента PageControl1, на которой будет представлена необходимая
информации о товаре как в данной аптеке, так и в других аптеках розничной сети
(рисунок 8).
Рисунок 8 - Вкладка "Товар"
Обработчик события "OnClick"
компонента "BitBtn3":
TFProdavec. BitBtn3Click (Sender:
TObject);. Visible: =true;. Pages [0]. TabVisible: =true;. ActivePageIndex:
=0;;
Обработчик события "OnClick"
компонента "CheckBox1":TFProdavec. CheckBox1Click (Sender:
TObject);CheckBox1. Checked=true then. Visible: =true;. Pages [0]. TabVisible:
=true;. Visible: =false;. Pages [0]. TabVisible: =false;;;
Обработчик события "OnClick"
компонента "DBLookupComboBox1":TFProdavec. DBLookupComboBox1Click
(Sender: TObject);. SimpleDataSetTovar_v_Apteke. Active: =false;.
SimpleDataSetTovar_v_Apteke. DataSet.commandText: ='SELECT "Apteki".
"Num_aptk", "Apteki". "Aptk_adres",'
+'"Apteki".
"Aptk_telf", "PreparSprav". "Name_tovara",
"PreparSprav". "Kod_tovara", '
+'"TovarApt".
"Tovar_price_ed","TovarApt". "Tovar_ost" '
+'FROM "Apteki",
"PreparSprav", "TovarApt" '
+'WHERE "Apteki".
"Num_aptk"="TovarApt". "Num_aptk" and '
+'"TovarApt".
"Kod_tovara"="PreparSprav". "Kod_tovara" and
"Apteki". "Num_aptk"='
+DataModuleApteka. SimpleDataSetAllAptk.
FieldByName ('Num_aptk'). AsString;. SimpleDataSetTovar_v_Apteke. Active:
=true;;
Обработчик события "OnClick"
компонента "BitBtn1":TFProdavec. BitBtn1Click (Sender: TObject);: =CreateOleObject
('Excel. Application'); // Создать OLE объект Excel. WorkBooks. Add (); //
Создать рабочую книгу Excel. Visible: =True; // Сделать Excel видимым
// Занести в ячейку значение. Cells [1,1].
Value: ='Сведения о наличии товара в аптеке по адресу ' + DataModuleApteka.
SimpleDataSetAllAptk. FieldByName ('Aptk_adres'). AsString;. Cells [2,1].
Value: ='Дата '+ DateToStr (Date);
// Определить количество столбцов DBGrid1:
=DBGrid1. Columns. Count;j: =1 to i do
// Занести в ячейки 3 строки заголовки
столбцов DBGrid1. Cells [3,j]. Value: = DBGrid1. Columns. Items [j-1]. Title.
Caption;. Range [chr (96+j) +': '+chr (96+j)]. Select; // Выделить ячейки
// Установить ширину ячейки OExcel в
зависимости от ширины столбца DBGrid1. Selection. ColumnWidth: =DBGrid1.
Columns. Items [j-1]. Width/5;. Selection. WrapText: = True; // Переносить по
словам;. Range ['1: 1']. Select; // Выделить ячейку 1 столбца 1 строки.
Selection. WrapText: = False;: =5; // Номер строки.
SimpleDataSetTovar_v_Apteke. First; // Перейти на первую записьnot
DataModuleApteka. SimpleDataSetTovar_v_Apteke. Eof do // Пока не будет
достигнут конец файлаj: =1 to i do
// Заносить в ячейку Excel содержимое
полей, которые отражаются в DBGrid1. Cells [istr,j]. Value: =DataModuleApteka.
SimpleDataSetTovar_v_Apteke. FieldByName (DBGrid1. Columns. Items [j-1].
FieldName). AsString;. SimpleDataSetTovar_v_Apteke. Next; // Перейти на
следующую запись: =istr+1; // Увеличить номер строки;. Range ['A3: '+chr
(96+j-1) +IntToStr (istr)]. Select; // Выделить ячейки
// Обрамление сплошной линией всех
выделенных ячеек. Selection. Borders [xlEdgeLeft]. LineStyle: =xlContinuous;.
Selection. Borders [xlEdgeRight]. LineStyle: =xlContinuous;. Selection. Borders
[xlEdgeTop]. LineStyle: =xlContinuous;. Selection. Borders [xlEdgeBottom].
LineStyle: =xlContinuous;i>1 then. Selection. Borders [xlInsideVertical].
LineStyle: =xlContinuous;. Selection. Borders [xlInsideHorizontal]. LineStyle:
=xlContinuous;. Range ['D'+IntToStr (istr) +': D'+IntToStr (istr+1)]. Select;
// Объединение ячеек. Selection.
MergeCells: =True;. Selection. HorizontalAlignment: = xlLeft;. Selection.
VerticalAlignment: = xlCenter;;
Обработчик события "OnActivate"
формы "FProdavec":TFProdavec. FormActivate (Sender: TObject);.
SQLConnection1. Connected: =true;. SimpleDataSetAllAptk. Open;.
SimpleDataSetTovar_v_Apteke. Active: =false;. SimpleDataSetTovar_v_Apteke.
DataSet.commandText: ='SELECT "Apteki". "Aptk_adres",'
+'"Apteki".
"Aptk_telf", "PreparSprav". "Name_tovara",
"PreparSprav". "Kod_tovara", '
+'"TovarApt".
"Tovar_price_ed","TovarApt". "Tovar_ost" '
+'FROM "Apteki",
"PreparSprav", "TovarApt" '
+'WHERE "Apteki".
"Num_aptk"="TovarApt". "Num_aptk" and '
+'"TovarApt".
"Kod_tovara"="PreparSprav". "Kod_tovara"';.
SimpleDataSetTovar_v_Apteke. Active: =true;. Pages [0]. TabVisible: =false;;
Обработчик события "OnClose"
формы "FProdavec":TFProdavec. FormClose (Sender: TObject; var Action:
TCloseAction);. SQLConnection1. Connected: =false;. Terminate;;
3.2.4 Форма
"FManager"
Форма " FManager " предназначена
для пользователя "Менеджер" и осуществления им основных функций в
рамках соответствующей должности. Вид формы показан на рисунке 9.
Рисунок 9 - Форма "FManager" для
менеджера
На данной форме разместил компоненты в
соответствии с таблицей 22.
Таблица 22 - Компоненты формы
"FManager"
Компонент
|
Вложенный компонент
|
Назначение
|
Panel1
|
|
Компонент для размещения и группировки
элементов
|
|
GroupBox1
|
Меню пользователя
|
|
BitBtn1
|
Кнопка "Аптеки"
|
|
BitBtn2
|
Кнопка "Поставщики"
|
|
BitBtn3
|
Кнопка "Отчёты"
|
|
BitBtn4
|
Кнопка "Выход"
|
|
BitBtn6
|
Кнопка "Товар"
|
|
BitBtn7
|
Кнопка "Справочник"
|
|
CheckBox1
|
Выбор "Показать/Скрыть всё"
|
Image1
|
|
Фоновый рисунок
|
PageControl1 (TabSheet1)
|
|
Вкладка "Аптеки"
|
|
DBGrid1
|
Вывод данных
|
|
BitBtn5
|
Кнопка "Печать"
|
PageControl1 (TabSheet2)
|
|
Вкладка "Поставщики"
|
|
DBGrid2
|
Вывод данных
|
PageControl1 (TabSheet3)
|
|
Вкладка "Отчёты"
|
|
BitBtn9
|
Кнопка "Отчёт. Заявка на поставку"
|
PageControl1 (TabSheet4)
|
|
|
|
DBGrid3
|
Вывод данных
|
|
BitBtn8
|
Кнопка "Новый препарат"
|
В зависимости от нажатия определённой
кнопки меню откроется выбранная вкладка в соответствии с рисунком 10.
Рисунок 10 - Рабочие вкладки пользователя
"Менеджер"
Обработчик события "OnActivate"
формы "FManager":
TFManager. FormActivate (Sender:
TObject);. SQLConnection1. Connected: =true;. Pages [0]. TabVisible: =false;.
Pages [1]. TabVisible: =false;. Pages [2]. TabVisible: =false;. Pages [3].
TabVisible: =false;;
Обработчик события "OnClose"
формы "FManager":TFManager. FormClose (Sender: TObject; var Action:
TCloseAction);. SQLConnection1. Connected: =false;. Terminate;;
Обработчик события "OnClick"
компонента "BitBtn1":TFManager. BitBtn1Click (Sender: TObject);.
SimpleDataSetAllAptk. Open;. Visible: =true;. Pages [0]. TabVisible: =true;.
ActivePageIndex: =0;;
Обработчик события "OnClick"
компонента "BitBtn2":TFManager. BitBtn2Click (Sender: TObject);.
SimpleDataSetAllPstvsh. Open;. Visible: =true;. Pages [1]. TabVisible: =true;.
ActivePageIndex: =1;;
Обработчик события "OnClick"
компонента "BitBtn3":TFManager. BitBtn3Click (Sender: TObject);.
Visible: =true;. Pages [2]. TabVisible: =true;. ActivePageIndex: =2;;
Обработчик события "OnClick"
компонента "BitBtn7":TFManager. BitBtn7Click (Sender: TObject);.
SimpleDataSetAllPreparat. Open;. Visible: =true;. Pages [3]. TabVisible:
=true;. ActivePageIndex: =3;;
Обработчик события "OnClick"
компонента "BitBtn6":TFManager. BitBtn6Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn5":TFManager. BitBtn5Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn9":TFManager. BitBtn9Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn8":TFManager. BitBtn8Click (Sender: TObject);.
ShowModal;;
3.2.5 Форма
"FDirector"
Форма " FDirector "
предназначена для пользователя "Директор" и осуществления им основных
функций в рамках соответствующей должности. Вид формы показан на рисунке 11.
На данной форме разместил компоненты в
соответствии с таблицей 23.
Таблица 23 - Компоненты формы
"FDirector"
КомпонентВложенный компонентНазначение
|
|
|
Panel1
|
|
Компонент для размещения и группировки
элементов
|
|
GroupBox1
|
Меню пользователя
|
|
BitBtn1
|
Кнопка "Аптеки"
|
|
BitBtn2
|
Кнопка "Поставщики"
|
|
BitBtn3
|
Кнопка "Отчёты"
|
|
BitBtn4
|
Кнопка "Выход"
|
|
BitBtn7
|
Кнопка "Справочник"
|
|
CheckBox1
|
Выбор "Показать/Скрыть всё"
|
Image1
|
|
Фоновый рисунок
|
PageControl1 (TabSheet1)
|
|
Вкладка "Аптеки"
|
|
DBGrid1
|
Вывод данных
|
|
BitBtn5
|
Кнопка "Добавить новую аптеку"
|
PageControl1 (TabSheet2)
|
|
Вкладка "Поставщики"
|
|
DBGrid2
|
Вывод данных
|
|
BitBtn6
|
Кнопка "Новый поставщик"
|
|
BitBtn9
|
Кнопка "Торговое предложение"
|
PageControl1 (TabSheet3)
|
|
Вкладка "Отчёты"
|
PageControl1 (TabSheet4)
|
|
Вкладка "Справочник препаратов"
|
|
DBGrid3
|
Вывод данных
|
|
BitBtn8
|
Кнопка "Новый препарат"
|
Рисунок 11 - Форма "FDirector"
для управляющего
В зависимости от нажатия определённой
кнопки меню откроется выбранная вкладка в соответствии с рисунком 12.
Рисунок 12 - Рабочие вкладки пользователя
"Директор"
Обработчик события "OnActivate"
формы "FManager":
TFDirector. FormActivate (Sender:
TObject);. SQLConnection1. Connected: =true;. Pages [0]. TabVisible: =false;.
Pages [1]. TabVisible: =false;. Pages [2]. TabVisible: =false;. Pages [3].
TabVisible: =false;;
Обработчик события "OnClose"
формы "FManager":TFDirector. FormClose (Sender: TObject; var Action:
TCloseAction);. SQLConnection1. Connected: =false;. Terminate;;
Обработчик события "OnClick"
компонента "BitBtn1":TFDirector. BitBtn1Click (Sender: TObject);.
SimpleDataSetAllAptk. Open;. Visible: =true;. Pages [0]. TabVisible: =true;.
ActivePageIndex: =0;;
Обработчик события "OnClick"
компонента "BitBtn2":TFDirector. BitBtn2Click (Sender: TObject);.
SimpleDataSetAllPstvsh. Open;. Visible: =true;. Pages [1]. TabVisible: =true;.
ActivePageIndex: =1;;
Обработчик события "OnClick"
компонента "BitBtn3":TFDirector. BitBtn3Click (Sender: TObject);.
Visible: =true;. Pages [2]. TabVisible: =true;. ActivePageIndex: =2;;
Обработчик события "OnClick"
компонента "BitBtn7":TFDirector. BitBtn7Click (Sender: TObject);.
SimpleDataSetAllPreparat. Open;. Visible: =true;. Pages [3]. TabVisible:
=true;. ActivePageIndex: =3;;
Обработчик события "OnClick"
компонента "BitBtn5":TFDirector. BitBtn5Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn6":TFDirector. BitBtn6Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn9":TFDirector. BitBtn9Click (Sender: TObject);.
ShowModal;;
Обработчик события "OnClick"
компонента "BitBtn8":
procedure TFDirector. BitBtn8Click (Sender: TObject);.
ShowModal;;
3.2.6 Форма
"FTorgPredApteki"
Форма " FTorgPredApteki "
предназначена для отображения торгового предложения в аптеки с возможность
посмотреть предложение по каждой аптеке или по определённому лекарственному
препарату при помощи фильтров.
На основе информации данной формы менеджер
формирует торговое предложение (форма FNewTorgPredApteki) для каждой аптеки при
нажатии кнопки "Сформировать торговое предложение". Также на данной
форме менеджер может отслеживать остатки товара в каждой аптеке и при
необходимости оформить заявку на поставку необходимого препарата (форма
"FZayavkaPostavka"), нажав кнопку "Заявка на поставку". Вид
формы показан на рисунке 13.
Рисунок 13 - Форма
"FTorgPredApteki"
На данной форме разместил компоненты в
соответствии с таблицей 24.
Таблица 24 - Компоненты формы
"FTorgPredApteki"
Компонент
|
Вложенный компонент
|
Вложенный компонент
|
Назначение
|
DBGrid1
|
|
|
Вывод информации
|
Panel1
|
|
|
Компонент для размещения и группировки
элементов
|
|
BitBtn1
|
|
Кнопка "Сформировать торговое
предложение"
|
|
BitBtn2
|
|
Кнопка "Заявка на поставку"
|
|
GroupBox1
|
|
Фильтр
|
|
|
DBLookupComboBox1
|
Выбор аптеки
|
|
|
DBLookupComboBox2
|
Выбор препарата
|
|
|
Label1
|
Надпись "Выберите аптеку"
|
|
|
Label2
|
Надпись "Название препарата"
|
Обработчик события "OnActivate"
формы "FTorgPredApteki":
TFTorgPredApteki. FormActivate (Sender:
TObject);. SimpleDataSetAllAptk. Open;. SimpleDataSetAllPreparat. Open;.
SimpleDataSetTovar_v_Apteke. Active: =false;. SimpleDataSetTovar_v_Apteke.
DataSet.commandText: ='SELECT "TovarApt".
"Kod_rashoda","Apteki". "Aptk_adres",'
+'"Apteki".
"Aptk_telf", "PreparSprav". "Name_tovara",
"TorgPred". "Price_opt", '
+'"TovarApt".
"Tovar_price_ed","TovarApt". "Tovar_ost",
"TovarApt". "Tovar_prod", '
+'"PreparSprav".
"Zh_n_pr", "TovarApt". "Min_zps" '
+'FROM "Apteki",
"PreparSprav", "TovarApt", "TorgPred" '
+'WHERE "Apteki".
"Num_aptk"="TovarApt". "Num_aptk" and '
+'"TovarApt".
"Kod_tovara"="PreparSprav". "Kod_tovara" and '
+'"TorgPred".
"Kod_tovara"="PreparSprav". "Kod_tovara"';.
SimpleDataSetTovar_v_Apteke. Active: =true;;
Обработчик события "OnClick"
компонента "DBLookupComboBox1":TFTorgPredApteki.
DBLookupComboBox1Click (Sender: TObject);. SimpleDataSetTovar_v_Apteke. Active:
=false;. SimpleDataSetTovar_v_Apteke. DataSet.commandText: ='SELECT
"TovarApt". "Kod_rashoda","Apteki".
"Aptk_adres",'
+'"Apteki". "Aptk_telf",
"PreparSprav". "Name_tovara", "TorgPred".
"Price_opt", '
+'"TovarApt".
"Tovar_price_ed","TovarApt". "Tovar_ost",
"TovarApt". "Tovar_prod", '
+'"PreparSprav".
"Zh_n_pr", "TovarApt". "Min_zps" '
+'FROM "Apteki",
"PreparSprav", "TovarApt", "TorgPred" '
+'WHERE "Apteki".
"Num_aptk"="TovarApt". "Num_aptk" and '
+'"TovarApt".
"Kod_tovara"="PreparSprav". "Kod_tovara" and '
+'"TorgPred".
"Kod_tovara"="PreparSprav". "Kod_tovara" and
"Apteki". "Num_aptk"='
+DataModuleApteka. SimpleDataSetAllAptk.
FieldByName ('Num_aptk'). AsString;. SimpleDataSetTovar_v_Apteke. Active:
=true;;
Обработчик события "OnClick"
компонента "DBLookupComboBox2":TFTorgPredApteki.
DBLookupComboBox2Click (Sender: TObject);. SimpleDataSetTovar_v_Apteke. Active:
=false;. SimpleDataSetTovar_v_Apteke. DataSet.commandText: ='SELECT
"TovarApt". "Kod_rashoda","Apteki".
"Aptk_adres",'
+'"Apteki".
"Aptk_telf", "PreparSprav". "Name_tovara",
"TorgPred". "Price_opt", '
+'"TovarApt".
"Tovar_price_ed","TovarApt". "Tovar_ost",
"TovarApt". "Tovar_prod", '
+'"PreparSprav".
"Zh_n_pr", "TovarApt". "Min_zps" '
+'FROM "Apteki",
"PreparSprav", "TovarApt", "TorgPred" '
+'WHERE "Apteki".
"Num_aptk"="TovarApt". "Num_aptk" and '
+'"TovarApt".
"Kod_tovara"="PreparSprav". "Kod_tovara" and '
+'"TorgPred". "Kod_tovara"="PreparSprav".
"Kod_tovara" and "PreparSprav". "Kod_tovara"='
+DataModuleApteka.
SimpleDataSetAllPreparat. FieldByName ('Kod_tovara'). AsString;.
SimpleDataSetTovar_v_Apteke. Active: =true;;
Обработчик события "OnClick"
компонента "BitBtn1":TFTorgPredApteki. BitBtn1Click (Sender:
TObject);. Show;;
Обработчик события "OnClick"
компонента "BitBtn2":TFTorgPredApteki. BitBtn2Click (Sender:
TObject);. ShowModal;;
3.2.7 Форма
"FNewTorgPredApteki"
Форма " FNewTorgPredApteki "
предназначена для формирования торгового предложения выбранной аптеки. При
выборе определённого товара, оптовая цена автоматически отображается в
соответствующем поле. Вид формы показан на рисунке 14.
Рисунок 14 - Форма
"FNewTorgPredApteki" для формирования торгового предложения в аптеке
На данной форме разместил компоненты в
соответствии с таблицей 25.
Таблица 25 - Компоненты формы
"FNewTorgPredApteki"
Компонент
|
Назначение
|
Image1
|
Фоновый рисунок
|
DBLookupComboBox1
|
Выбор адреса аптеки
|
DBLookupComboBox2
|
Выбор наименования товара
|
LabeledEdit1
|
Поле ввода "Остаток товара"
|
LabeledEdit2
|
Поле ввода "Продано товара"
|
LabeledEdit3
|
Поле ввода "Розничная цена"
|
LabeledEdit4
|
Поле ввода "Оптовая цена"
|
Label1
|
Надпись "Адрес аптеки"
|
Label2
|
Надпись "Наименование товара"
|
Label3
|
Надпись "Минимальный запас жизн. необ.
препар. "
|
Edit1
|
Поле ввода "Минимальный запас жизн. необ.
препар. "
|
BitBtn1
|
Кнопка "Добавить"
|
Обработчик события "OnActivate"
формы "FNewTorgPredApteki":
TFNewTorgPredApteki. FormActivate (Sender:
TObject);. SimpleDataSetAllAptk. Open;. SimpleDataSetAllPreparat. Open;;
Обработчик события "OnClick"
компонента "DBLookupComboBox2":TFNewTorgPredApteki.
DBLookupComboBox2Click (Sender: TObject);. SimpleDataSetOptPrice. Active:
=false;. SimpleDataSetOptPrice. DataSet.commandText: ='select
"Price_opt" from "TorgPred" where "Kod_tovara"='
+DataModuleApteka.
SimpleDataSetAllPreparat. FieldByName ('Kod_tovara'). AsString;.
SimpleDataSetOptPrice. Active: =true;. Text: =DataModuleApteka.
SimpleDataSetOptPrice. FieldByName ('Price_opt'). AsString;;
Обработчик события "OnClick"
компонента "BitBtn1":TFNewTorgPredApteki. BitBtn1Click (Sender:
TObject);. TransactionID: =1;Not DataModuleApteka. SQLConnection1.
InTransaction then. SQLConnection1. StartTransaction (TransInfo);.
SQLStoredProcAddTorgPredApteki. Params. ParamByName ('P1'). Value:
=DataModuleApteka. SimpleDataSetAllAptk. FieldByName ('Num_aptk'). Value;.
SQLStoredProcAddTorgPredApteki. Params. ParamByName ('P2'). Value:
=DataModuleApteka. SimpleDataSetAllPreparat. FieldByName ('Kod_tovara').
Value;. SQLStoredProcAddTorgPredApteki. Params. ParamByName ('P3'). Value:
=LabeledEdit1. Text;. SQLStoredProcAddTorgPredApteki. Params. ParamByName
('P4'). Value: =LabeledEdit2. Text;. SQLStoredProcAddTorgPredApteki. Params.
ParamByName ('P5'). Value: =LabeledEdit3. Text;.
SQLStoredProcAddTorgPredApteki. Params. ParamByName ('P6'). Value: =Edit1.
Text;. SQLStoredProcAddTorgPredApteki. ExecProc;. SQLConnection1.commit
(TransInfo);('Транзакция выполнена');. SQLConnection1. Rollback
(TransInfo);('Транзакция не выполнена',mtError, [mbOK],0);;
3.2.8 Форма
"FZayavkaPostavka"
Форма " FZayavkaPostavka "
предназначена для формирования заявки на поставку товара в аптеку на основании
"Кода расхода" в торговом предложении аптеки, доступном на форме
"FTorgPredApteki". При выборе определённого препарата, оптовая цена
автоматически отображается в соответствующем поле, а при вводе количества
необходимого товара, сумма подсчитывается автоматически. Вид формы показан на
рисунке 15.
На данной форме разместил компоненты в
соответствии с таблицей 26.
Таблица 26 - Компоненты формы
"FZayavkaPostavka"
КомпонентНазначение
|
|
Image1
|
Фоновый рисунок
|
Label2
|
Надпись "Поставщик"
|
Label3
|
Надпись "Наименование препарата"
|
Label4
|
Надпись "Количество"
|
Label5
|
Надпись "Цена (опт.)"
|
Label6
|
Надпись "Сумма"
|
Label7
|
Надпись "Номер документа"
|
Label8
|
Надпись "Код расхода"
|
Label9
|
Надпись "Дата заказа
|
Edit1
|
Поле ввода "Цена (опт.)"
|
Edit2
|
Поле ввода "Количество"
|
Edit3
|
Поле ввода "Сумма"
|
Edit4
|
Поле ввода "Номер документа"
|
DBLookupComboBox1
|
Выбор поставщика
|
DBLookupComboBox2
|
Выбор препарата
|
DBLookupComboBox3
|
Выбор кода расхода
|
DateTimePicker1
|
Выбор даты заказа
|
BitBtn1
|
Кнопка "Оформить заявку"
|
Рисунок 15 - Форма
"FZayavkaPostavka"
Обработчик события "OnActivate"
формы "FZayavkaPostavka":
TFZayavkaPostavka. FormActivate (Sender:
TObject);. SQLConnection1. Connected: =true;. SimpleDataSetAllPstvsh. Open;.
SimpleDataSetAllAptk. Open;. SimpleDataSetTovarApt. Open;;
+' "PreparSprav",
"TorgPred"'
+' WHERE "TorgPred".
"Kod_tovara"="PreparSprav". "Kod_tovara" and
"TorgPred". "Kod_pstvsh"='
+DataModuleApteka. SimpleDataSetAllPstvsh.
FieldByName ('Kod_pstvsh'). AsString;. SimpleDataSetZayavkaPostavka. Active:
=true;;
Обработчик события "OnClick"
компонента "DBLookupComboBox2":TFZayavkaPostavka.
DBLookupComboBox2Click (Sender: TObject);. SimpleDataSetOptPrice. Active:
=false;. SimpleDataSetOptPrice. DataSet.commandText: ='select "Price_opt"
from "TorgPred" where "Kod_tovara"='
+DataModuleApteka.
SimpleDataSetAllPreparat. FieldByName ('Kod_tovara'). AsString;.
SimpleDataSetOptPrice. Active: =true;. Text: =DataModuleApteka.
SimpleDataSetOptPrice. FieldByName ('Price_opt'). AsString;;
Обработчик события "OnClick"
компонента "Edit3":TFZayavkaPostavka. Edit3Click (Sender: TObject);.
Text: =IntToStr (StrToInt (Edit1. Text) *StrToInt (Edit2. Text));;
Обработчик события "OnClick"
компонента "BitBtn1":TFZayavkaPostavka. BitBtn1Click (Sender:
TObject);. TransactionID: =1;Not DataModuleApteka. SQLConnection1.
InTransaction then. SQLConnection1. StartTransaction (TransInfo);.
SQLStoredProcAddZakaz. Params. ParamByName ('P1'). Value: =DataModuleApteka.
SimpleDataSetZayavkaPostavka. FieldByName ('NumTorgPred'). Value;.
SQLStoredProcAddZakaz. Params. ParamByName ('P2'). Value: =DataModuleApteka.
SimpleDataSetTovarApt. FieldByName ('Kod_rashoda'). Value;.
SQLStoredProcAddZakaz. Params. ParamByName ('P3'). Value: =StrToInt (Edit1.
Text);. SQLStoredProcAddZakaz. Params. ParamByName ('P4'). Value:
=DateTimePicker1. Date;. SQLStoredProcAddZakaz. Params. ParamByName ('P5').
Value: =StrToInt (Edit4. Text);. SQLStoredProcAddZakaz. ExecProc;.
SQLConnection1.commit (TransInfo);('Транзакция выполнена');. SQLConnection1.
Rollback (TransInfo);('Транзакция не выполнена',mtError, [mbOK],0);:
=CreateOleObject ('Excel. Application'); // Создать OLE объект Excel.
WorkBooks. Add (); // Создать рабочую книгу Excel. Visible: =True; // Сделать
Excel видимым
// Занести в ячейку значение. Cells [1,1].
Value: ='Номер документа';. Cells [1,3]. Value: =Edit4. Text;. Cells [2,1].
Value: ='Дата заказа';. Cells [2,3]. Value: =DateToStr (DateTimePicker1.
Date);. Cells [3,1]. Value: ='Поставщик';. Cells [3,3]. Value:
=DBLookupComboBox1. Text;. Cells [4,1]. Value: ='Номер договора';. Cells [4,3].
Value: =DataModuleApteka. SimpleDataSetAllPstvsh. FieldByName ('Kod_pstvsh').
AsString;. Cells [5,1]. Value: ='Наименование препарата';. Cells [5,3]. Value:
=DataModuleApteka. SimpleDataSetAllPreparat. FieldByName ('Name_tovara').
AsString;. Cells [6,1]. Value: ='Количество';. Cells [6,3]. Value: =Edit2.
Text;. Cells [7,1]. Value: ='Цена (сумма) ';. Cells [7,3]. Value: =Edit3.
Text;;
3.2.9 Форма
"FNewPreparat"
Форма " FNewPreparat "
предназначена для добавления нового препарата в справочник лекарственных
препаратов. Вид формы показан на рисунке 16.
На данной форме разместил компоненты в
соответствии с таблицей 27.
Таблица 27 - Компоненты формы
"FNewPreparat"
Компонент
|
Назначение
|
LabeledEdit1
|
Поле ввода группы препарата
|
LabeledEdit2
|
Поле ввода наименования препарата
|
LabeledEdit3
|
Поле ввода единицы измерения
|
CheckBox1
|
Выбор является ли лекарственный препарат
жизненно необходимом
|
BitBtn1
|
Кнопка "Добавить препарат"
|
Рисунок 16 - Форма
"FNewPreparat"
Обработчик события "OnClick"
компонента "BitBtn1":
procedure TFNewPreparat. BitBtn1Click (Sender: TObject);.
TransactionID: =1;Not DataModuleApteka. SQLConnection1. InTransaction then.
SQLConnection1. StartTransaction (TransInfo);. SQLStoredProcAddPreparat.
Params. ParamByName ('P1'). AsString: =LabeledEdit1. Text;.
SQLStoredProcAddPreparat. Params. ParamByName ('P2'). AsString: =LabeledEdit2.
Text;. SQLStoredProcAddPreparat. Params. ParamByName ('P3'). AsString:
=LabeledEdit3. Text;CheckBox1. Checked then n: =1n: =0;.
SQLStoredProcAddPreparat. Params. ParamByName ('P4'). Value: =n;.
SQLStoredProcAddPreparat. ExecProc;. SQLConnection1.commit
(TransInfo);('Транзакция выполнена');. SQLConnection1. Rollback
(TransInfo);('Транзакция не выполнена',mtError, [mbOK],0);.
SimpleDataSetAllPreparat. Close;. SimpleDataSetAllPreparat. Open;;
3.2.10 Форма
"FManagerOtchet"
Форма "FManagerOtchet "
предназначена для отображения информации по заявкам поставщикам (заявка на
поставку) с возможностью просмотра по каждому поставщику и печатью
соответствующего отчёта. Вид формы показан на рисунке 17.
Рисунок 17 - Форма
"FManagerOtchet"
На данной форме разместил компоненты в
соответствии с таблицей 28.
Таблица 28 - Компоненты формы
"FManagerOtchet"
Компонент
|
Назначение
|
DBGrid1
|
Вывод информации
|
DBLookupComboBox1
|
Выбор поставщика
|
BitBtn1
|
Кнопка "Печать"
|
Обработчик события "OnActivate"
формы "FManagerOtchet":
TFManagerOtchet. FormActivate (Sender:
TObject);. SimpleDataSetAllPstvsh. Open;. SimpleDataSetManagerOtchet. Open;;
Обработчик события "OnClick"
компонента "DBLookupComboBox1":TFManagerOtchet.
DBLookupComboBox1Click (Sender: TObject);. SimpleDataSetManagerOtchet. Close;.
SimpleDataSetManagerOtchet2. Close;. SimpleDataSetManagerOtchet2.
DataSet.commandText: ='select * from "manager_otchet2" ('
+DataModuleApteka. SimpleDataSetAllPstvsh.
FieldByName ('Kod_pstvsh'). AsString+') ';. DataSource: =DataModuleApteka.
DataSourceManagerOtchet2;. SimpleDataSetManagerOtchet2. Open;;
Обработчик события "OnClick"
компонента "BitBtn1":
procedure TFManagerOtchet. BitBtn1Click (Sender: TObject);:
=CreateOleObject ('Excel. Application'); // Создать OLE объект Excel.
WorkBooks. Add (); // Создать рабочую книгу Excel. Visible: =True; // Сделать
Excel видимым
// Занести в ячейку значение. Cells [1,1]. Value: ='Отчёт по
заявкам поставщикам ' + DataModuleApteka. SimpleDataSetAllPstvsh. FieldByName
('Name_pstvsh'). AsString;. Cells [2,1]. Value: ='Дата '+ DateToStr (Date);
// Определить количество столбцов DBGrid1: =DBGrid1. Columns.
Count;j: =1 to i do
// Занести в ячейки 3 строки заголовки столбцов DBGrid1.
Cells [3,j]. Value: = DBGrid1. Columns. Items [j-1]. Title. Caption;. Range
[chr (96+j) +': '+chr (96+j)]. Select; // Выделить ячейки
// Установить ширину ячейки OExcel в зависимости от ширины
столбца DBGrid1. Selection. ColumnWidth: =DBGrid1. Columns. Items [j-1].
Width/5;. Selection. WrapText: = True; // Переносить по словам;. Range ['1:
1']. Select; // Выделить ячейку 1 столбца 1 строки. Selection. WrapText: =
False;: =5; // Номер строки. SimpleDataSetManagerOtchet. First; // Перейти на
первую записьnot DataModuleApteka. SimpleDataSetManagerOtchet. Eof do // Пока
не будет достигнут конец файлаj: =1 to i do
// Заносить в ячейку Excel содержимое полей, которые
отражаются в DBGrid1. Cells [istr,j]. Value: =DataModuleApteka.
SimpleDataSetManagerOtchet. FieldByName (DBGrid1. Columns. Items [j-1].
FieldName). AsString;. SimpleDataSetManagerOtchet. Next; // Перейти на
следующую запись: =istr+1; // Увеличить номер строки;. Range ['A3: '+chr
(96+j-1) +IntToStr (istr)]. Select; // Выделить ячейки
// Обрамление сплошной линией всех выделенных ячеек.
Selection. Borders [xlEdgeLeft]. LineStyle: =xlContinuous;. Selection. Borders
[xlEdgeRight]. LineStyle: =xlContinuous;. Selection. Borders [xlEdgeTop].
LineStyle: =xlContinuous;. Selection. Borders [xlEdgeBottom]. LineStyle:
=xlContinuous;i>1 then. Selection. Borders [xlInsideVertical]. LineStyle:
=xlContinuous;. Selection. Borders [xlInsideHorizontal]. LineStyle:
=xlContinuous;. Range ['D'+IntToStr (istr) +': D'+IntToStr (istr+1)]. Select;
// Объединение ячеек. Selection. MergeCells: =True;.
Selection. HorizontalAlignment: = xlLeft;. Selection. VerticalAlignment: =
xlCenter;;
3.2.11 Форма
"FNewApteka"
Форма " FNewApteka "
предназначена для добавления информации в базу данных о новой аптеке. Вид формы
показан на рисунке 18.
Рисунок 18 - Форма "FNewApteka"
На данной форме разместил компоненты в
соответствии с таблицей 29.
Таблица 29 - Компоненты формы
"FNewApteka"
Компонент
|
Назначение
|
LabeledEdit1
|
Поле ввода адреса новой аптеки
|
LabeledEdit2
|
Поле ввода телефона новой аптеки
|
BitBtn1
|
Кнопка "Сохранить"
|
Обработчик события "OnClick"
компонента "BitBtn1":
TFNewApteka. BitBtn1Click (Sender:
TObject);. TransactionID: =1;Not DataModuleApteka. SQLConnection1.
InTransaction then. SQLConnection1. StartTransaction (TransInfo);.
SQLStoredProcAddAptk. Params. ParamByName ('P1'). AsString: =LabeledEdit1.
Text;. SQLStoredProcAddAptk. Params. ParamByName ('P2'). Value: =LabeledEdit2.
Text;. SQLStoredProcAddAptk. ExecProc;. SQLConnection1.commit
(TransInfo);('Транзакция выполнена');. SQLConnection1. Rollback (TransInfo);('Транзакция
не выполнена',mtError, [mbOK],0);. SimpleDataSetAllAptk. Close;.
SimpleDataSetAllAptk. Open;;
3.2.12 Форма
"FNewPostavshik"
Форма " FNewPostavshik "
предназначена для добавления информации в базу данных о новом поставщике. Вид
формы показан на рисунке 19.
Рисунок 19 - Форма
"FNewPostavshik"
На данной форме разместил компоненты в
соответствии с таблицей 30.
Таблица 30 - Компоненты формы
"FNewPostavshik"
КомпонентНазначение
|
|
Image1
|
Фоновый рисунок
|
LabeledEdit1
|
Поле ввода наименования поставщика
|
LabeledEdit2
|
Поле ввода адреса поставщика
|
LabeledEdit3
|
Поле ввода телефона поставщика
|
BitBtn1
|
Кнопка "Сохранить"
|
Обработчик события "OnClick"
компонента "BitBtn1":
procedure TFNewPostavshik. BitBtn1Click (Sender: TObject);.
TransactionID: =1;Not DataModuleApteka. SQLConnection1. InTransaction then.
SQLConnection1. StartTransaction (TransInfo);. SQLStoredProcAddPstvsh. Params.
ParamByName ('P1'). AsString: =LabeledEdit1. Text;. SQLStoredProcAddPstvsh.
Params. ParamByName ('P2'). AsString: =LabeledEdit2. Text;.
SQLStoredProcAddPstvsh. Params. ParamByName ('P3'). Value: =LabeledEdit3.
Text;. SQLStoredProcAddPstvsh. ExecProc;. SQLConnection1.commit
(TransInfo);('Транзакция выполнена');. SQLConnection1. Rollback
(TransInfo);('Транзакция не выполнена',mtError, [mbOK],0);.
SimpleDataSetAllPstvsh. Close;. SimpleDataSetAllPstvsh. Open;;
3.2.13 Форма
"FNewTorgPred"
Форма " FNewTorgPred "
предназначена для добавления информации о торговом предложении каждого
поставщика На данной форме разместил компоненты в соответствии с таблицей 31.
Таблица 31 - Компоненты формы
"FNewTorgPred"
Компонент
|
Назначение
|
Label1
|
Надпись "Поставщик"
|
Label2
|
Надпись "Препарат"
|
Label3
|
Надпись "Цена (оптовая)"
|
Label4
|
Надпись "руб. "
|
DBLookupComboBox1
|
Выбор поставщика
|
DBLookupComboBox1
|
Выбор лекарственного препарата
|
Edit1
|
Поле ввода оптовой цены
|
BitBtn1
|
Кнопка "Сохранить"
|
Обработчик события "OnActivate"
формы "FNewTorgPred":
TFNewTorgPred. FormActivate (Sender:
TObject);. SimpleDataSetAllPstvsh. Open;. SimpleDataSetAllPreparat. Open;;
Обработчик события "OnClick"
компонента "BitBtn1":
procedure TFNewTorgPred. BitBtn1Click (Sender: TObject);.
TransactionID: =1;Not DataModuleApteka. SQLConnection1. InTransaction then.
SQLConnection1. StartTransaction (TransInfo);. SQLStoredProcAddTorgPred.
Params. ParamByName ('P1'). Value: =DataModuleApteka. SimpleDataSetAllPreparat.
FieldByName ('Kod_tovara'). Value;. SQLStoredProcAddTorgPred. Params.
ParamByName ('P2'). Value: =DataModuleApteka. SimpleDataSetAllPstvsh.
FieldByName ('Kod_pstvsh'). Value;. SQLStoredProcAddTorgPred. Params.
ParamByName ('P3'). Value: =Edit1. Text;. SQLStoredProcAddTorgPred. ExecProc;.
SQLConnection1.commit (TransInfo);('Транзакция выполнена');. SQLConnection1.
Rollback (TransInfo);('Транзакция не выполнена',mtError, [mbOK],0);
end;
4.
Тестирование программного продукта
4.1
Организация процесса тестирования
Тестирование в соответствии с рисунком 6 представляет собой
деятельность по проверке программного кода и документации. Она должна заранее
планироваться и систематически проводиться специально назначенным независимым
тестировщиком. Работа тестировщика начинается до утверждения спецификаций требований.
Он проверяет требования к ПП на полноту и возможность тестирования, определяет
методы тестирования.
Одновременно с началом этапа планирования и создания
спецификаций требований тестировщик разрабатывает стратегию тестирования. После
утверждения спецификаций требований им разрабатывается и детализируется план
тестирования. Тогда же тестировщик создает наборы тестов для проведения
интеграционного и системного тестирований. Тестирование завершается созданием
отчета о тестировании, в котором представляются все результаты его проведения.
Рисунок 21 - Цикл тестирования
Существуют два принципа тестирования программ:
Функциональное
тестирование (тестирование "черного ящика");
Структурное тестирование
(тестирование "белого ящика").
Тестирование "черного ящика - известны функции программы
и исследуется работа каждой функции: как выполняется функция, как принимаются
входные данные, как выдаются результаты, как сохраняется целостность данных.
Тестирование "белого ящика" - известна внутренняя
структура программы и исследуется внутренние элементы программы и связи между
ними, т.е. внутреннее поведение программы: проверяются ветви для всех условий,
проверяются циклы, правильность внутренних структур данных.
4.2 Методы
тестирования программного продукта
4.2.1
Модульное тестирование программного продукта
Модульное тестирование реализует принцип "белого
ящика".
Тестированию подвергаются:
интерфейс модуля для
проверки правильности ввода-вывода;
внутренние структуры
данных для проверки целостности сохраняемых данных;
независимые пути -
однократное выполнение всех операторов модуля;
пути обработки ошибок;
граничные условия.
4.2.1.1
Модуль "Авторизация пользователя" (UnitAuth. pas)
a) После запуска программы выбрать пользователя, на
форме появится поле ввода соответствующего пароля пользователя;
b) Ввести
пароль и нажать кнопку "Войти", данная форма закроется и откроется
форма для выбранного пользователя;) Если пароль по истечении 3 попыток введён
неверно, программа закроется.) При вводе неправильного пароля будет выдано
сообщении о предупреждении и количестве попыток.
4.2.1.2
Модуль "Продавец" (UnitProdavec. pas)
a) После нажатия кнопки "Товар", появится
компонент PageControl1, вкладка "Товар" с таблицей данных о товаре (DBGrid1),
компонентом DBLookupComboBox1, кнопками "Продать" и
"Печать";
b) При
выборе адреса аптеки в компоненте DBLookupComboBox1, данные таблицы будет
отсортированы по соответствующему выбору;) При нажатии на кнопку
"Печать", содержимое таблицы формируется отчётом в Excel’е;) При
использовании компонента CheckBox1, вкладка "Товар" вместе с
компонентом PageControl1 появляется /исчезает;) При нажатии на кнопку
"Выход" приложение закрывается.
4.2.1.3
Модуль "Менеджер" (UnitManager. pas)
a) При нажатии кнопки "Аптеки", появится
компонент PageControl1, вкладка "Аптеки" с таблицей данных об аптеках
(DBGrid1) и кнопкой "Торговое предложение в аптеке", при нажатии на
которую откроется форма "Торговое приложение в аптеке" (модуль
UnitTorgPredApteki. pas);
b) При нажатии
кнопки "Поставщики", станет активна вкладка "Поставщики"
компонента PageControl1 с таблицей данных о поставщиках (DBGrid2);) При
нажатии кнопки "Отчёты", станет активна вкладка "Отчёты"
компонента PageControl1 с кнопкой открытия формы отчёта "Заявка на
поставку" (модуль UnitManagerOtchet. pas);) При нажатии кнопки
"Справочник", станет активна вкладка "Справочник
препаратов" компонента PageControl1 с таблицей данных о лекарственных
препаратах (DBGrid3) и кнопка "Новый препарат", нажав которую
откроется форма ввода нового препарата (модуль UnitNewPreparat. pas);) При
нажатии кнопки "Товар", откроется форма "Торговое предложение в
аптеке" (модуль UnitTorgPredApteki. pas);) При использовании
компонента CheckBox1, вкладки "Аптеки", "Поставщики",
"Отчёты", "Справочник" компонента PageControl1 появляются
/исчезают;) При нажатии на кнопку "Выход" приложение
закрывается.
4.2.1.4
Модуль "Управляющий" (UnitDirector. pas)
a) При нажатии кнопки "Аптеки", появится
компонент PageControl1, вкладка "Аптеки" с таблицей данных об аптеках
(DBGrid1) и кнопкой "Добавить новую аптеку", при нажатии на которую
откроется форма "Добавление новой аптеки" (модуль UnitNewApteka.
pas);
b) При
нажатии кнопки "Поставщики", станет активна вкладка
"Поставщики" компонента PageControl1 с таблицей данных о поставщиках
(DBGrid2) и кнопками "Новый поставщик" и "Торговое
предложение", открывающие формы добавления нового поставщика (модуль
UnitNewPostavshik. pas) и торгового предложения поставщика (модуль
UnitNewTorgPred. pas);) При нажатии кнопки "Отчёты", станет активна
вкладка "Отчёты" компонента PageControl1;) При нажатии кнопки
"Справочник", станет активна вкладка "Справочник
препаратов" компонента PageControl1 с таблицей данных о лекарственных
препаратах (DBGrid3) и кнопка "Новый препарат", нажав которую
откроется форма ввода нового препарата (модуль UnitNewPreparat. pas);) При
использовании компонента CheckBox1, вкладки "Аптеки",
"Поставщики", "Отчёты", "Справочник" компонента
PageControl1 появляются /исчезают;) При нажатии на кнопку "Выход"
приложение закрывается.
4.2.1.5
Модуль "Торговое предложение в аптеке" (UnitTorgPredApteki. pas)
a) При запуске активна таблица DBGrid1 с данными о
торговом предложении каждой аптеки.
b) При
использовании одного из компонентов DBLookupComboBox1 ("Выберите
аптеку") и DBLookupComboBox2 ("Название препарата") данные в
таблице DBGrid1 фильтруются соответственно сделанному выбору;) При нажатии
кнопки "Сформировать торговое предложение", откроется новая форма
"Формирование торгового предложения в аптеке" (модуль
UnitNewTorgPredApteki. pas);) При нажатии кнопки "Заявка на
поставку", откроется новая форма "Оформление заказа на товар"
(модуль UnitZayavkaPostavka. pas).
4.2.1.6
Модуль "Формирование торгового предложения в аптеке"
(UnitNewTorgPredApteki. pas)
a) Выбрать адрес аптеки (DBLookupComboBox1),
наименование товара (DBLookupComboBox2), после выбора наименования товара в
поле "Оптовая цена" появляется соответствующая цена;
b) Ввести
остаток товара, продано товара, розничная цена и минимальный запас жизн. необ.
препар.;) При нажатии на кнопку "Добавить", соответствующая запись
добавляется в БД;) Если данные введены неверно или поля остались пустые,
при нажатии на кнопку "Добавить" появится сообщении об ошибке
"Транзакции не выполнена" и откат транзакции.
4.2.1.7
Модуль "Оформление заказа на товар" (UnitZayavkaPostavka. pas)
a) Ввести номер документа, выбрать дату заказа,
поставщика, наименование препарата и код расхода, указать количество
необходимого товара;
b) После
выбора наименования товара поле "Цена (опт.)" заполнится
соответствующей ценой, а при указании необходимого количества товара, сумма
посчитается автоматически;) При нажатии на кнопку "Оформить заявку",
соответствующая запись добавляется в БД;) Если данные введены неверно или
поля остались пустые, при нажатии на кнопку "Оформить заявку"
появится сообщении об ошибке "Транзакции не выполнена" и откат
транзакции.
4.2.1.8
Модуль "Отчёт менеджера (заявки на поставку)" (UnitZayavkaPostavka.
pas)
a) При запуске модуля и открытии формы становится
активна таблица DBGrid1с данными о заявках и компонентами: DBLookupComboBox1
(выбор названия поставщика) и кнопка "Печать";
b) При нажатии на кнопку "Печать" содержимое
таблицы DBGrid1 формируется отчётом в Excel’е.
4.2.1.9
Модуль "Новый препарат" (UnitNewPreparat. pas)
a) Ввести группу лекарственного препарата, наименование,
единицу измерения и отметить является ли данный препарат жизненно необходимым;
b) При нажатии на кнопку "Добавить препарат"
соответствующая запись добавляется в БД;) Если данные введены неверно или
поля остались пустые, при нажатии на кнопку "Добавить препарат"
появится сообщении об ошибке "Транзакции не выполнена" и откат
транзакции.
4.2.1.10
Модуль "Добавление новой аптеки" (UnitNewApteka. pas)
a) Ввести адрес и телефон аптеки;
b) При нажатии на кнопку "Сохранить"
соответствующая запись добавляется в БД;) Если данные введены неверно или поля
остались пустые, при нажатии на кнопку "Сохранить" появится сообщении
об ошибке "Транзакции не выполнена" и откат транзакции.
4.2.1.11
Модуль "Новый поставщик" (UnitNewPostavshik. pas)
a) Ввести наименование, адрес, телефон поставщика;
b) При нажатии на кнопку "Сохранить"
соответствующая запись добавляется в БД;) Если данные введены неверно или поля
остались пустые, при нажатии на кнопку "Сохранить" появится сообщении
об ошибке "Транзакции не выполнена" и откат транзакции.
4.2.1.12
Модуль "Торговое предложение" (UnitNewTorgPred. pas)
a) Выбрать поставщика, лекарственный препарат и ввести
оптовую цену;
b) При нажатии на кнопку "Сохранить"
соответствующая запись добавляется в БД;) Если данные введены неверно или поля
остались пустые, при нажатии на кнопку "Сохранить" появится сообщении
об ошибке "Транзакции не выполнена" и откат транзакции.
4.2.2
Тестирование интеграции
Тестирование интеграции проводится для проверки сборки
модулей в программную систему. В основном используется принцип "черного
ящика". Используется как нисходящее, так и восходящее тестирование.
Тестирование проводится для обнаружения ошибок интерфейса:
потеря данных при
прохождении через интерфейс;
отсутствие в модуле
необходимой ссылки;
неблагоприятное влияние
одного модуля на другой;
подфункции при
объединении не образуют требуемую функцию;
проблемы при работе с
глобальными данными.
Для обнаружения ошибок интерфейса необходимо проверить
сначала все технологические цепочки обработки данных. Работу каждого модуля
после выполнения предыдущего модуля для проверки неблагоприятного влияния.
Результаты тестирования интеграции представлены в таблице
Таблица 32 - Тестирование интеграции приложения
Kr_Apteka
|
Модуль "Авторизация пользователя"
|
Модуль "Продавец"
|
Модуль "Менеджер"
|
Модуль "Управляющий"
|
Модуль "Торговое предложение в
аптеке"
|
Модуль "Формирование торгового предложения
в аптеке"
|
Модуль "Оформление заказа на товар"
|
Модуль "Отчёт менеджера (заявки на
поставку)"
|
Модуль "Новый препарат"
|
Модуль "Добавление новой аптеки"
|
Модуль "Новый поставщик"
|
Модуль "Торговое предложение"
|
Модуль "Авторизация пользователя"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Продавец"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Менеджер"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Управляющий"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Торговое предложение в
аптеке"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Формирование торгового предложения
в аптеке"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Оформление заказа на товар"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Отчёт менеджера (заявки на
поставку)"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Новый препарат"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Добавление новой аптеки"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Новый поставщик"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
Модуль "Торговое предложение"
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
4.2.3
Тестирование правильности
Тестирование правильности проводится с целью проверки всех
функциональных требований и требований эффективности, т.е. соответствие системы
ожиданиям заказчика. Используется принцип "черного ящика". При
обнаружении отклонений от требований создается список недостатков.
Исходные данные контрольного примера приведены в приложении
Б.
Результаты проверки программы показали,
что программа работает правильно.
5.
Технологическая часть
5.1
Руководство пользователя
Разместить программу D: \work\Delphi_Kr_Apteka_v1\ Kr_Apteka.
exe, а базу данных D: \work\ DB_APT. GDB.
Запустим программу Kr_Apteka. exe. Открывается окно
"авторизация".
Для того чтобы авторизоваться выберите пользователя и ведите
пароль и нажмите кнопку "Войти".
Открывается форма в зависимости от выбранного пользователя.
Слева на форме будет представлено меню соответствующего пользователя с теми
возможностями, которые ему разрешены и требуются для работы. Функции, которые
не разрешены пользователю, не отображаются.
В зависимости от требований, при нажатии кнопок меню, справа
будут появляться соответствующие вкладки для работы. На каждой вкладке
представлен соответствующий необходимый функционал пользователя. Например продавец
в отличии от менеджера не сможет оформить заявку поставщику на поставку
лекарственных препаратов, а менеджер не сможет заключить добавить новую аптеку
или внести информацию о поставщике и торговом предложении данного поставщика
(данные функции доступны управляющему).
Рабочий функционал продавца представлен кнопкой
"Товар" и соответствующими функциями на 1 вкладке.
Рабочий функционал менеджера представлен кнопками,
соответствующим 4 вкладкам с необходимым рабочим интерфейсом, а также кнопкой
"Товар", которая в отличии от кнопки продавца предлагает более
расширенный интерфейс (представленный в отдельных модулях) на отдельно
открываемой форме "Торговое предложение в аптеке". Менеджер на данной
форме имеет возможность отслеживать информацию о товаре в каждой аптеке, цены,
продажи и по необходимости сформировать необходимое торговое предложение для
определённой аптеки или оформить заявку на новый товар поставщику.
Рабочий функционал управляющего представлен возможностью
просматривать необходимые ему данные и формировать соответствующие отчёты.
Помимо этого управляющий может добавить новую аптеку, нового поставщика и
торговое предложение.
Заключение
В соответствии с заданием к курсовому проекту разработана
автоматизированная система учета закупки лекарственных препаратов. В результате
работы для каждого из трёх пользователей была разработана соответствующая форма
с необходимым рабочим интерфейсом и возможностью авторизации каждого из них.
В ходе работы реализован весь рабочий функционал для продавца
и менеджера с возможностью печати необходимых отчётов. Для управляющего
разработан необходимый рабочий функционал, но не реализованы отчёты.
Наряду с разработкой была изучена предметная область,
составлена концептуальная модель, выбрана среда разработки системы и модель
данных. Также выполнено логическое и физическое проектирование.
По результатам проделанной работы была подготовлена
пояснительная записка.
Список
использованных источников
1.
Фаронов В.В. Delphi 6. Учебный курс. - М.: "Нолидж", 2001
.
Фаронов В.В. Delphi. Программирование на языке высокого уровня. Учебник для
вузов. - СПб.: Питер, 2007
.
Культин Н.Б. Основы программирования в Delphi 7.0. СП.: БХВ - Петербург, 2003
.
Зуев Е.А. Программирование на языке TURBO PASCAL 6.0, 7.0 - М.: Веста, Радио и
связь, 1993
.
Голицина О.Л., Попов И.И. Основы алгоритмизации и программирования: Учебное
пособие. - М: Форум, 2008
.
Культин Н.Б. Delphi в задачах и примерах СП.: БХВ - Петербург, 2003
.
Бобовский С. Delphi 7 учебный курс. "Питер", 2008
.
С.В. Глушаков, А.Л. Клевцов - "Программирование в среде Delphi 7.0";
.В.
Фаронов - "Программирование баз данных в Delphi 7";
.В.Э.
Гофман - "Delphi7";
.
И.В. Боровский - "Программирование в Delphi 2005";
.
Автор неизвестен - "Delphi. Готовые алгоритмы";
.
Гализеев В.П. - "Программирование в среде Delphi 7";
.А.
А. Шкрыль - "Delphi Народные советы";
.
А.В. Рудаков - "Технология разработки программных продуктов";
.
Гагарина - "Основы технологии разработки программных продуктов. Учебное
пособие";
Приложение А
/*
* ER/Studio Data Architect 8.5 SQL Code Generation
* Company: Microsoft
* Project: Model3. DM1
* Author: Microsoft
*
* Date Created: Friday, November 08, 2013 10: 22: 59
* Target DBMS: InterBase
*/
/*
* TABLE: Apteki
*/TABLE Apteki (_aptkINTEGER NOT NULL,_adresCHAR (16) NOT
NULL,_telfNUMERIC (16, 0) NOT NULL,PK8 PRIMARY KEY (Num_aptk)
);
/*
* TABLE: Postavshiki
*/TABLE Postavshiki (_pstvshINTEGER NOT NULL,_pstvshCHAR (32)
NOT NULL,_pstvshCHAR (32) NOT NULL,_pstvshNUMERIC (16, 0) NOT NULL,PK2 PRIMARY
KEY (Kod_pstvsh)
);
/*
* TABLE: PreparSprav
*/TABLE PreparSprav (_tovaraINTEGER NOT NULL,_tovCHAR (32)
NOT NULL,_tovaraCHAR (32) NOT NULL,_izCHAR (8, 0) NOT NULL,_n_prBINARY (1) NOT
NULL,PK7 PRIMARY KEY (Kod_tovara)
);
/*
* TABLE: TorgPred
*/TABLE TorgPred (NOT NULL,_tovaraINTEGER NOT
NULL,_pstvshINTEGER NOT NULL,_optNUMERIC (8,2) NOT NULL,PK3 PRIMARY KEY
(NumTorgPred)
);
/*
* TABLE: TovarApt
*/TABLE TovarApt (_rashodaINTEGER NOT NULL,_ostNUMERIC (8, 0)
NOT NULL,_prodNUMERIC (8, 0) NOT NULL,_price_edNUMERIC (8,2) NOT
NULL,_zpsNUMERIC (8, 0) NOT NULL,_tovaraINTEGER NOT NULL,_aptkINTEGER NOT
NULL,PK6 PRIMARY KEY (Kod_rashoda)
);
/*
* TABLE: Zakaz
*/TABLE Zakaz (_zakzINTEGER NOT NULL,NOT NULL,_rashodaINTEGER
NOT NULL,_tov_kolNUMERIC (8, 0) NOT NULL_zakzDATE NOT NULL,_opltDATE NOT
NULL,_postDATE,_tov_kolNUMERIC (8, 0),_docNUMERIC (8, 0) NOT NULL,PK4 PRIMARY
KEY (Num_zakz)
);
/*
* INDEX: "Ref21"
*/INDEX "Ref21" ON "TorgPred"
(Kod_pstvsh)
;
/*
* INDEX: "Ref72"
*/INDEX "Ref72" ON "TorgPred"
(Kod_tovara)
;
/*
* INDEX: "Ref77"
*/INDEX "Ref77" ON "TovarApt"
(Kod_tovara)
;
/*
* INDEX: "Ref89"
*/INDEX "Ref89" ON "TovarApt" (Num_aptk)
;
/*
* INDEX: "Ref63"
*/INDEX "Ref63" ON "Zakaz" (Kod_rashoda)
;
/*
* INDEX: "Ref35"
*/INDEX "Ref35" ON "Zakaz" (NumTorgPred)
;
/*
* TABLE: "TorgPred"
*/TABLE "TorgPred" ADD CONSTRAINT
"RefPostavshiki1"KEY (Kod_pstvsh)"Postavshiki"
(Kod_pstvsh);TABLE "TorgPred" ADD CONSTRAINT
"RefPreparSprav2"KEY (Kod_tovara)"PreparSprav"
(Kod_tovara);
/*
* TABLE: "TovarApt"
*/TABLE "TovarApt" ADD CONSTRAINT
"RefPreparSprav7"KEY (Kod_tovara)"PreparSprav"
(Kod_tovara);TABLE "TovarApt" ADD CONSTRAINT
"RefApteki9"KEY (Num_aptk)"Apteki" (Num_aptk);
/*
* TABLE: "Zakaz"
*/TABLE "Zakaz" ADD CONSTRAINT
"RefTovarApt3"KEY (Kod_rashoda)"TovarApt"
(Kod_rashoda);TABLE "Zakaz" ADD CONSTRAINT
"RefTorgPred5"KEY (NumTorgPred)"TorgPred" (NumTorgPred);
Приложение Б
Тестовый пример
Таблица: Apteki (Аптеки)
Num_aptk
|
Aptk_adres
|
Aptk_telf
|
|
|
Номер аптеки
|
Название аптеки
|
Телефон аптеки
|
|
|
1
|
Аптека 1
|
344455
|
|
|
2
|
Аптека 2
|
344545
|
|
|
3
|
Аптека 3
|
345555
|
|
|
|
|
|
|
|
Таблица: PreparSprav (Справочник препаратов)
|
|
Kod_tovara
|
Grup_tov
|
Name_tovara
|
Ed_iz
|
Zh_n_pr
|
Код товара
|
Группа товара
|
Наименование препарата
|
Единица измерения
|
Жизн. Необх. Препарат
|
1
|
Группа 1
|
Первый препарат
|
шт.
|
0
|
2
|
Группа 1
|
Второй препарат
|
шт.
|
0
|
3
|
Группа 2
|
Третий препарат
|
уп.
|
1
|
|
|
|
|
|
|
|
|
Таблица: Postavshiki (Поставщики)
Kod_pstvsh
|
Name_pstvsh
|
Adres_pstvsh
|
Tel_pstvsh
|
Код поставщика
|
Название поставщика
|
Адрес поставщика
|
Телефон поставщика
|
1
|
Первый поставщик
|
Платова 19
|
321222
|
2
|
Второй поставщик
|
Пушкина 25
|
321819
|
3
|
Третий поставщик
|
Ермака 54
|
324555
|
Таблица: TorgPred (Торговое предложение)
NumTorgPred
|
Kod_tovara
|
Kod_pstvsh
|
Price_opt
|
Номер торгового предложения
|
Код товара
|
Код поставщика
|
Оптовая цена
|
1
|
1
|
1
|
250
|
2
|
2
|
1
|
345
|
3
|
3
|
2
|
445
|
4
|
2
|
2
|
344
|
5
|
4
|
1
|
558
|
Таблица: TovarApt (Товар в аптеке)
Kod_rashoda
|
Num_aptk
|
Kod_tovara
|
Tovar_ost
|
Tovar_prod
|
Tovar_price_ed
|
Min_zps
|
Код расхода
|
Номер аптеки
|
Код товара
|
Остаток товара в аптеке
|
Продано товара
|
Розничная цена 1 ед. товара
|
Минимальный запас жизненно необходимых
препаратов
|
1
|
1
|
1
|
0
|
0
|
290
|
0
|
2
|
1
|
2
|
0
|
0
|
375
|
0
|
3
|
2
|
3
|
0
|
0
|
490
|
15
|
4
|
2
|
4
|
0
|
0
|
590
|
10
|
Таблица: Zakaz (Заказ)
Num_zakz
|
NumTorgPred
|
Kod_rashoda
|
Zak_tov_kol
|
Data_zakz
|
Data_oplt
|
Data_post
|
Post_tov_kol
|
Num_doc
|
Номер заказа
|
Номер торгового предложения
|
Код расхода
|
Заказано товара
|
Дата заказа
|
Дата оплаты
|
Дата поставки
|
Поступило товара
|
Номер документа
|
1
|
1
|
1
|
100
|
15.11.2013
|
16.11.2013
|
17.11.2013
|
100
|
10001
|
2
|
4
|
2
|
200
|
15.11.2013
|
16.11.2013
|
17.11.2013
|
200
|
10001
|
3
|
5
|
4
|
100
|
18.11.2013
|
19.11.2013
|
20.11.2013
|
100
|
10002
|