Автоматизация вещевого учета на военном складе
C = 0,8 — коэффициент сложности приложения Коэффициент коррекции приложения p — увеличение объема работ за счет внесения изменений в алгоритм или программу по результатам уточнения постановок (величина p лежит в пределах от 0 до 0,5). С учетом того, что была поставлена четко задача, доработки все же были. Поэтому возьмем коэффициент = 0,2. На следующем этапе уточняется структура полей в таблицах… Читать ещё >
Автоматизация вещевого учета на военном складе (реферат, курсовая, диплом, контрольная)
ДИПЛОМНЫЙ ПРОЕКТ НА ТЕМУ:
Автоматизация вещевого учета на военном складе
Содержание Введение
I. Специальная часть
1. Постановка задачи
2. Формализация
3. Описание среды программирования
3.1 Требования к техническому обеспечению
3.2 Требования к программному обеспечению
4.1 Алгоритмизация задачи
4.1.1 Описание алгоритма
4.1.2 Структурная схема
4.2 Программирование
4.3 Аномалии и защитное программирование
4.4 Тестирование и отладка
5. Анализ результатов решения
6. Инструкция пользователю
II. Экономическая часть Заключение Литература Приложение программный приложение автоматизация учет
Введение
Военный вещевой склад занимается хранением и выдачей вещевого имущества личному составу военнослужащих.
Для пополнения необходимого количества вещевого имущества военнослужащих, министерство обороны делает заказы у предприятий военнопромышленного комплекса, а так же у предприятий получивших тендер на изготовление военного обмундирования.
Автоматизированный учет поступающего довольствия упростит и систематизирует выдачу и обеспечение военнослужащих РФ материальным имуществом.
I. Специальная часть
1. Постановка задачи Цель дипломного проекта разработать программное приложение по автоматизированному вещевому учету на военном складе, которое позволит:
автоматизировать процесс учёта;
вести контроль/отчетность по выдачам;
производить поиск имущества/наименований на складе;
формировать и выводить на печать отчеты;
Так же приложение должно содержать;
* вкладки с учетными формами и отчетами — с помощью, которых можно быстро найти нужную информацию и произвести необходимые операции для ведения учета;
* должна содержать справку о программе, — которая состоит из описания программного приложения.
Приложение должно быть максимально простым в использовании для пользователя.
2. Формализация Для построения необходимо провести формализацию задачи, являющуюся необходимым этапом разработки задачи и заключающуюся в построении структуры таблиц для хранения информации, схемы их взаимосвязей и описания алгоритмов обработки.
Взаимосвязь показана в схеме данных:
Как правило, разработка проекта реализации задачи выполняется в несколько этапов и начинается с анализа той информации, которая является выходной (формы и отчеты для Access). Только после выяснения структуры и состава этой информации, формулировки запросов для получения отчетов можно сделать вывод о структуре и составе таблиц данных. Необходимым этапом формализации задачи является нормализация базы данных, которая, по сути, представляет собой процесс оптимизации хранения и использования информации в таблицах.
Сначала производится приведение к первой нормальной форме (1NF) — каждой таблице назначается первичный ключ, обеспечивающий уникальность каждой записи. Здесь же удаляются все повторяющиеся группы (точнее создается новая таблица для повторяющихся групп).
В процессе приведения ко второй нормальной форме производится устранение избыточности данных — любое поле в таблице, которое является избыточным или всегда остается неизменным, основанным на значении другого поля, необходимо перенести в другую таблицу.
И, наконец, в 3NF все поля каждой таблицы непосредственно связаны с полем первичного ключа и не зависят от других полей. На практике это делается следующим образом — любое поле не связанное с полем первичного ключа, необходимо перенести в отдельную таблицу.
Наиболее часто используется приведение к третьей нормальной форме (3NF). В результате устраняется избыточность данных и упрощается процесс изменения структуры БД.
На следующем этапе уточняется структура полей в таблицах, и определяются правила ввода. В Borland Delphi 7 проектируем входные и выходные формы и отчеты. На заключительном этапе создается меню и различные интерфейсные промежуточные формы. Затем, в процессе отладки и доработки, возможен возврат на любой этап процесса разработки.
3. Описание среды программирования Для написания приложения была выбрана среда визуального программирования Borland Delphi 7.
Синтаксис Borland Delphi 7 основан на языке программирования Object Pascal. Borland Delphi 7 полностью поддерживает ООП (объектно-ориентированное программирование), что значительно расширяет возможности среды.
Еще одним немаловажным достоинством выбранной среды Borland Delphi 7 является то, что Borland Delphi 7 во всем мире считается одним из самых простых сред программирования, и в отличие от всех широко распространенных сред программирования, является строго типизированным, что позволяет свести количество ошибок практически к нулю (за исключением логических ошибок алгоритма).
Borland Delphi 7 предоставляет широкий спектр средств по управлению базами данных, имеющих даже различные технологии структуры и поддержки.
Для разработки базы данных в данной программе выбор пал на технологию ADO, корпорации Microsoft, за свои широкие возможности и простоту использования.
3.1 Требования к техническому обеспечению Минимальные требования:
процессор Pentium 2;
операционная система Windows 2000;
ОЗУ 64 Мб;
свободное место на жестком диске 50 Мб для приложения.
Рекомендуемые требования:
любой процессор Intel/AMD;
операционная система Windows XP;
ОЗУ 128 Мб;
свободное место на жестком диске 50 Мб.
Для ввода данных необходимо наличие:
клавиатуры;
компьютерной мыши.
3.2 Требования к программному обеспечению
Microsoft Windows 98/2000/XP.
Microsoft Office 97/2000.
4. Методика разработки приложения
4.1 Алгоритмизация задачи
4.1.1 Описание алгоритма БД «Автоматизация вещевого учета на Военном складе «создавалась с нуля на Access 2003.
Таблица № 1: Вещевое имущество.
Имя поля | Тип данных | Формат поля/Размер поля | Обязательное поле | |
Код Вещевого имущества | Счетчик | Длинное целое | Да | |
Наименование | Текстовый | Да | ||
Размер | Числовой | Нет | ||
Таблица № 2: Выдача.
Имя поля | Тип данных | Формат поля/Размер поля | Обязательное поле | |
Код вещевого имущества | Числовой | Длинное целое | Да | |
Выдано | Текстовый | Да | ||
Дата | Дата/время | Да | ||
Размер | Числовой | Длинное целое | Да | |
Сотрудник | Текстовый | Да | ||
Номер накладной | Числовой | Длинное целое | Да | |
Таблица № 3: Поступление.
Имя поля | Тип данных | Формат поля/Размер поля | Обязательное поле | |
Код вещевое имущество | Числовой | Длинное целое | Да | |
Номер накладной | Числовой | Длинное целое | Да | |
Пришло | Текстовый | Да | ||
Дата | Дата/время | Да | ||
Размер | Числовой | Длинное целое | Да | |
Таблица № 4: Склад
Имя поля | Тип данных | Формат поля/Размер поля | Обязательное поле | |
Код вещевого имущества | Счётчик | Длинное целое | Да | |
Количество | Числовой | Длинное целое | Да | |
Таблица № 5: Пользователи
Имя поля | Тип данных | Формат поля/Размер поля | Обязательное поле | |
Ключ (Ключевое поле) | Счётчик | Длинное целое | Да | |
Логин | Текстовый | Да | ||
Пароль | Текстовый | Да | ||
Доступ | Логический | Да/Нет | Да | |
Приложение имеет следующие формы:
Форма «Поступление Довольствия».
Форма нужна для просмотра интересующей вас информации о поступлениях довольствия и накладных.
Форма содержит в себе следующую информацию:
Код вещевого имущества;
Поступило (Наименование предмета);
Количество;
Дата поступления;
Размер;
Номер накладной;
Форма «Выдача довольствия»
Форма нужна для просмотра интересующей вас информации о выдачах довольствия.
Форма содержит в себе следующую информацию:
Код имущества;
Выдано (наименование предмета);
Количество;
Размер;
Дата выдачи;
Номер накладной;
Получатель;
Форма «Состояние склада».
Форма нужна для просмотра интересующей вас информации о количестве довольствия на складе, поиск по наименованию и отчет.
Форма содержит в себе следующую информацию:
Наименование предмета;
Количество;
Форма «Новый предмет».
Форма нужна для добавления нового предмета, если такой отсутствует на складе.
Форма содержит в себе следующую информацию:
Код вещевого имущества;
Наименование предмета;
Размер;
Приложение имеет следующие отчеты:
Отчет «Отчет о поступлениях»
С помощью этого отчета можно посмотреть, о предметах, поступавших на склад за промежуток времени.
Отчет содержит следующую информацию:
Наименование предмета;
Пришло (количество);
Дата поступления;
Размер;
Номер накладной;
Отчет «Отчет о выдачах»
С помощью этого отчета можно посмотреть, о предметах, выдававшихся со склад за промежуток времени.
Отчет содержит следующую информацию:
Наименование предмета;
Выдано (количество);
Дата Выдачи;
Размер;
Номер накладной;
Получатель;
4.1.2 Структурная схема
4.2 Программирование В соответствии со структурной программой, приведенной выше в пункте 4.1.2."Структура приложения" в представленном приложении разработаны программные модули на Borland Delphi 7. А также запросы на языке Microsoft Access 2000. Тексты программных модулей и запросов приведены в пункте V. «Приложение».
4.3 Аномалии и защитное программирование В ходе выполнения приложения возможно появление на экране сообщений:
1. Сообщение «проверьте правильность заполнения полей.
Ошибка возникает при не полном заполнении полей формы.
При этом оператор должен:
1.1. Проверить правильность заполнения полей.
1.2. Возможно, причиной ошибки послужила отсутствие записи в каком либо поле.
4.4 Тестирование и отладка Отладка — исправление ошибок, найденных с помощью тестирования.
Для написания приложения на Borland Delphi я пользовалась движком отладки Borland Debugger Engine. Он имеет некоторые средства отладки такие как:
Контрольная точка остановки приложения (Toggle Breakpoint). Приложение выполняется в нормальном режиме и прерывает свое выполнение на точках остановки приложения.
Запуск приложения до команды, выделенной курсором (Run to Cursor). Приложение выполняется до команды, выделенной курсором в исходном коде. Дальнейшее выполнение приложения осуществляется командами Step Over и Trace Into.
Переход выполнения приложения по адресу (Go to Address). Приложение выполняется до команды по заданному адресу. Далее можно выполнять программу по одной команде на низком уровне.
Окно слежения за переменными, записями и массивами (Inspect window).
Окно слежения за изменениями значений переменных (Evaluate/Modify window).
Окно слежения за выполнением на низком уровне (CPU window).
Тестирование — процесс многократного выполнения приложения с целью выявления ошибок. При тестировании должны использоваться следующие принципы:
необходимой частью каждого теста должно являться описание ожидаемых результатов работы приложения, чтобы можно было быстро выяснить наличие или отсутствие ошибки в ней;
т.к. присутствует тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческой психологии и по многим другим факторам, тестирование должен производить посторонний человек или организация;
должны являться правилом доскональное изучение результатов каждого теста, чтобы не пропустить малозаметную на поверхностный взгляд ошибку в приложении;
необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);
при анализе результатов каждого теста необходимо проверить, не делает ли приложение того, что она не должна делать;
следует сохранять использованные тесты (для повышения эффективности повторного тестирования приложения после ее модификации или установки у заказчика);
следует учитывать так называемый «принцип скопления ошибок»: вероятность наличия не обнаруженных ошибок в некоторой части приложения прямо пропорциональна числу ошибок, уже обнаруженных в этой части;
Хотя приложение прошло тестирование успешно, в ней, тем не менее, могут содержаться ошибки, т.к.
приложение может не соответствовать своей внешней спецификации, что в частности, может привести к тому, что в ее управляющей графе окажутся пропущенными некоторые необходимые пути;
не будут обнаружены ошибки, появление которых зависит от обрабатываемых данных (т.е. на одних исходных данных приложение работает правильно, а на других — с ошибкой).
5. Анализ результатов решения Результатом решения поставленной задачи являются отчеты и формы. Формы представляют собой ведение статистики на производстве, отчеты являются дополнительной статистической информацией. В соответствии с пунктом 4.4 тестирование и отладка производились непосредственно во время разработки проекта. После завершения работы над приложением было еще раз произведено полное тестирование.
Все найденные ошибки были успешно устранены.
Получившийся в результате программный продукт удовлетворяет всем предъявленным требованиям, полностью работоспособен, не требует принципиальных доработок, и готов к эксплуатации.
6. Инструкция пользователю Приложение управления учетом состоит из пяти частей: формы поступления довольствия, формы выдача довольствия, формы состояния склада, формы добавления предмета и отчетов.
Запуск приложения может осуществляется различными способами:
— из главного меню Windows
— иконкой на рабочем столе
— запуск приложения Automation_of_stock_taking.exe
Главная форма содержит следующие вкладки:
Операции по складу;
Отчеты;
Помощь;
Поступление довольствия — эта вкладка открывает форму, позволяющую формировать накладную по поступлению довольствия и формировать отчет.
Выдачаформировать накладную по выдаваемому довольствию со склада.
Состояние складапозволяет просматривать предметы, находящиеся на складе и выводить на печать.
Новый предметпозволяет добавлять предмет на склад если такой отсутствует.
Отчеты — показывает отчет по поступлениям (выдачам) за заданный период Часть «Поступление довольствия» содержит перечень предметов и возможность формирования новых накладных.
На форме имеются:
Таблица поступлений Диалоговые окна и кнопки для формирования накладных Для формирования накладной поступления следует выбрать предмет из выпадающего списка, ввести номер накладной, размер, выбрать дату, количество, и нажать кнопку «Ок»
Часть «Выдача довольствия» содержит перечень предметов и возможность формирования новой накладной для выдачи довольствия со склада.
На форме имеются:
Таблица выдачи Диалоговые окна и кнопки для формирования накладной.
Для формирования накладной выдачи следует выбрать предмет из выпадающего списка, ввести количество, размер, дату, номер накладной, выбрать ответственное лицо и нажать кнопку «Ок».
Часть «Состояние склада» содержит сведения о количестве предметов хранящихся на складе.
На форме имеются:
Перечень предметов Количество предметов Поле для поиска предмета с кнопкой Кнопка для формирования отчета о состоянии склада Кнопка для выхода В текстовом поле следует ввести наименование предмета который необходимо найти, затем при нажатии на кнопку «Найти» будет выделена строка в которой находится искомый предмет и вылетит сообщение с номером строки в которой был найден предмет.
При нажатии на кнопку «Сформировать отчет"данные из таблицы на форме будут перемещены в таблицу Excel что дает возможность печати данных для отчетной информации.
При нажатии на кнопку «Выход» данная форма будет закрыта.
Часть «Новый предмет» служит для добавления нового предмета на склад.
На форме имеются:
Таблица с наименованием предметов Поле для записи нового предмета Поле для введения размера Часть «Отчеты» служит для вывода отчетов о поступлениях (выдачах) предметов довольствия со склада за заданный промежуток времени.
II. Экономическая часть Задача была поставлена разработать приложение по автоматизации вещевого учета на военном складе. Каждое предприятие, пользуясь той или иной компьютерной техникой, требует учет и систематизацию.
При большом объеме информации поиск и общие необходимые сведения, осуществляются вручную, представляя собой довольно трудоемкий процесс. Оформив программный продукт, все операции по поиску и вводу информации выполняются значительно быстрее.
С помощью этого приложения мы добились экономии рабочего времени сотрудников. Теперь они могут выполнять больше операций в день.
Для того чтобы данный программный продукт был реализован на производственном предприятии, необходимо подсчитать экономию внедрения программного продукта.
Расчёт затрат на разработку и внедрение проекта.
Распределение трудоемкости по стадиям разработки:
Табл.1
Этап разработки | Содержание работ | Трудоемкость, ч. | |
Постановка задачи | Разработка проекта, сбор необходимой информации, согласование проекта | ||
Технический проект | Корректировка проекта. Разработка приложения, пояснительной записки. Согласование и утверждение проекта. | ||
Рабочий проект | Описание приложения на языке программирования с комментариями, корректировка и тестирование приложения | ||
Документация и поддержка проекта | Разработка и сдача документации, сопутствующей проекту | ||
ИТОГО | |||
Коэффициент сложности задачи c характеризует относительную сложность приложения по отношению к данной задаче, реализующей стандартные методы решения, сложность которой принята равной 1единице (величина с лежит в пределах от 0,5 до 1,5). Так как этот программный продукт не сложен в написании, включает в себя алгоритмы ввода данных, написан на языке Borland Delphi 7, с использованием СУБД Microsoft Access 2000, сложность задачи устанавливаем 0,8.
c = 0,8 — коэффициент сложности приложения Коэффициент коррекции приложения p — увеличение объема работ за счет внесения изменений в алгоритм или программу по результатам уточнения постановок (величина p лежит в пределах от 0 до 0,5). С учетом того, что была поставлена четко задача, доработки все же были. Поэтому возьмем коэффициент = 0,2
p = 0,2 — коэффициент коррекции приложения в ходе разработки.
Коэффициент увеличения затрат труда, вследствие недостаточного описания задачи, в зависимости от сложности задачи принимается (от 1 до 1,5), данная задача, практически не потребовала уточнения и больших доработок, примем b = 1,2.
b = 1,2 — коэффициент увеличения затрат труда, вследствие недостаточного описания задачи.
Коэффициент квалификации разработчика k определяется в зависимости от стажа работы и составляет для работающих:
— до 2х лет — 0,8;
— от 3х до 5 лет — 1,0;
— от 5 до 8 — 1,2;
— свыше 8 лет — 1,5.
Разработчик данного программного продукта которому было поручено это задание, имел опыт работы по специальности 1 год и поэтому не считается квалифицированным специалистом, примем k = 0,8.
k = 0,8 — коэффициент квалификации разработчика.
Теперь посчитаем заработную плату основную. Оклад работника 3600 руб. Значит:
ЗПосн = ЗП * с * (1 + p) * b * k = 3600 * 0,8 * (1 + 0,2) * 1,2 * 0,8 = 3317 руб. в месяц.
Дополнительная заработная плата (ЗПдоп), в виде премии, в момент реализации проекта не выплачивалась. Суммарные затраты на производственном предприятии остаются такими же как и основная.
172 часа — потрачено на разработку и внедрение программного продукта разработчиком.
Страховые отчисления (СО) берут в размер 26% от основной и дополнительной заработной платы. Найдём фондовые отчисления:
СО = ЗПосн * 26% = 3317 * 26% =862 руб.
8*22=176 количество рабочих часов в месяц.
Суммарные затраты предприятия на заработную плату за время написания программного продукта с учётом фондовых отчислений составят:
ЗПобщая = ЗПсум + СО = (3317+ 862)*172/176= 4048 руб.
Содержание и эксплуатация вычислительной техники.
Число часов отладки приложения составляет: 45 + 85 + 30 = 160
Стоимость 1 машинного часа рассчитывается следующим образом:
Стоимость электроэнергии + Амортизация оборудования + Затраты на ремонт / Фвт, где Фвт — действительный фонд времени работы вычислительного комплекса.
Стоимость 1 КВТ/час электроэнергии составляет: 3 руб.
Один компьютер потребляет 30 ВТ в час.
За год отчисления за электроэнергию, потребляемую одной единицей вычислительного комплекса, составляет:
8 ч. * 22 дня * 12 мес. * 0,3 КВТ/час * 3 руб. / КВТ/ч. = 1900,8
Амортизация зависит от срока использования компьютера. Так как срок его эксплуатации 3 года, то амортизация ещё начисляется.
Амортизация = Стоимость ПК /Срок использования ПК.
Стоимость ПК равна 24 000 руб. Количество лет полезного использования 4 года, значит: 24 000 / 4 = 6000 руб. в год.
Затраты на ремонт ЭВМ составляют 5% от его стоимости ПК:
24 000 руб. * 5% = 1200 руб.
Действительный фонд времени работы вычислительного комплекса рассчитываем так:
Фвт = Фном — Фпроф Фном — номинальный фонд времени работы вычислительного комплекса.
Фпроф — годовые затраты времени на профилактические работы (5% = Фном).
ПК работает в среднем 2112 ч. в год (Фном).Время ремонта ЭВМ в среднем занимает 5% времени работы ПК (Фпроф).Значит:
Фвт=ФномФпроф= (8ч. * 22 дн. * 12 мес.) — (8ч.* 22 дн.* 12 мес.* 0,05)=2112−106=2006 ч.
Стоимость 1 машинного часа работы = 1200+ 6000 + 1900 / 2006 = 4,5 р.
Содержание и эксплуатация вычислительного комплекса составляет:
4,5 р. * 160ч. = 720р. при написании приложения.
Новый ПК для приложения «Автоматизация вещевого учета на Военном складе» .Срок эксплуатации ПК находящегося в отделе 3 года, и он оснащен современной операционной Windows XP и программным продуктом Office 2003, которой достаточно для полноценной работы данного программного продукта.
Смета затрат на разработку приложения:
Табл.2
№ | Наименование статьи расходов | Затраты, руб. | |
Суммарная заработная плата исполнителя | |||
Страховые отчисления | |||
Содержание и эксплуатация вычислительного комплекса | |||
ИТОГО: | |||
Экономический эффект от реализации и внедрения программного продукта.
Рассчитаем экономический эффект, получаемый за счет сокращения времени на поиск необходимой информации о довольствии, после внедрения проекта.
Так как реальной экономии затрат добиться сложно, экономическим эффектом нашего проекта будет экономия рабочего времени сотрудника, вследствие чего он сможет выполнять большее количество работы.
До внедрения программного продукта сотрудник в среднем выполнял 8 операций по поиску и выводу в печати товара на складе. Ранее на поиск товара уходило 15 мин., а так же на поиск данных по выполнению операций уходило, около 13 мин. Следовательно:
Т1 = 15 + 13 = 28 мин.
После внедрения программного продукта тестирование показало, что время выполнения операции уменьшилось и стало = 10 мин.: на поиск товара требовалось 5 минут:
Т2= 10+5=18 мин
?Т = Т1 — Т2 = 28 -18 = 10 мин. 0,16 — экономия времени.
Мы добились экономии времени за счёт внедрения программного продукта. Удобный и простой в использовании интерфейс, формы для быстрого ввода информации, способствуют экономии времени.
Основная заработная плата одного сотрудника на производственном предприятии 9000 руб. в месяц. В месяц сотрудник работает (8ч. * 22рабочих дня) 176
Стоимость 1 ч.(Р) работы:
Рч = 9000 / 176 = 51,1 руб.
Также учтём Страховые отчисления, которые берём в размере 26%.
26% = 0,26
Рфо = (9000 * 0,26) / 176 = 13,2 руб.
Рсум = Рч + Рфо = 51,1 + 13,2 = 64,3 руб./ч Рассчитаем годовой экономический эффект:
Перемножим выигранное время, количество операций в день, количество рабочих дней в месяце и количество рабочих месяцев:
?Тгод = (0,16* 8) * 22 * 12 = 337,92 ч.
Рассчитаем, сколько составит годовая экономия при внедрении программного продукта:
?Тгод * Рсум =
337,92 * 64,3 = 21 728,2 руб/год
Вычтем затраты:
21 728,2 руб — 4899= 16 829,2 руб/ экономический эффект.
Теперь посчитаем, за какое количество времени окупится приложение: Затраты /годовая экономия:
4899 / 21 728,2 = 0,2
Программный продукт окупился менее чем за пол года. Это маленький срок, окупаемости. Сотрудник будет экономить время, работая с приложением, и обслуживать большее количество людей. Это и будет увеличивать прибыль.
III.
Заключение
В данном дипломном проекте была реализована задача автоматизации вещевого учёта на военном складе.
Разработанное программное обеспечение Достоинства программного продукта:
*удобство и простота в эксплуатации ;
*небольшой объем занимаемой памяти;
Разработанное программное обеспечение, позволяет осуществлять:
— автоматизированный учёт предметов довольствия
— контроль за движением довольствия в определённый период времени
— выводить на печать необходимую для работы на складе информацию.
Произведённая экономическая оценка эффективности от внедрения приложения свидетельствует об экономической рентабельности проекта. Срок окупаемости данного приложения составит 2, 5месяца
1.А. Я. Архангельский Программирование в Borland Delphi 7 -М.: Издательство «Бином», 2010.
2. Понамарев В. Базы данных в Delphi 7 — СПб.: Питер, 2011.
3. Жуков А. Изучаем Delphi. — СПб.: Питер, 2009.
4. Петров В. Н. Информационные системы. Учебник — СПб.: Питер, 2002.
Приложение Рисунок № 1 Входная форма.
Рисунок № 2 Главное окно приложения.
Рисунок 2−2Форма «Поступление довольствия».
Рисунок 2−3 Форма «Выдача довольствия»
Рисунок 2−4 Форма «Состояние склада».
Рисунок 2−5 Форма «Добавление предмета».
Рисунок 2−6 Форма «Отчеты».
Рисунок 2−7 «Отчет по поступлению».
Рисунок 2−8 «Отчет по выдачам».
Исходный код приложения.
Главная форма
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, jpeg, ExtCtrls, Menus,
XPMan;
type
TMainF = class (TForm)
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
Image1: TImage;
N11: TMenuItem;
XPManifest1: TXPManifest;
procedure GridSelectAll (Grid: TDBGrid);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button5Click (Sender: TObject);
procedure Button6Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure Button7Click (Sender: TObject);
procedure Button8Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N11Click (Sender: TObject);
procedure N10Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainF: TMainF;
search:string;
implementation
uses Come, Leave, Sklad, About, Otchet, New;
{$R *.dfm}
procedure TMainF. GridSelectAll (Grid: TDBGrid);
begin
Grid.SelectedRows.Clear;
with Grid.Datasource.DataSet do
begin
First;
DisableControls;
try
while not EOF do
begin
Grid.SelectedRows.CurrentRowSelected:=true;
Next;
end;
finally
EnableControls;
end;
end;
end;
procedure TMainF. Button1Click (Sender: TObject);
begin
Postup.Show;
end;
procedure TMainF. Button2Click (Sender: TObject);
begin
Vydach.Show;
end;
procedure TMainF. Button3Click (Sender: TObject);
begin
SkladF.Show;
end;
procedure TMainF. Button5Click (Sender: TObject);
begin
Application.Terminate;
end;
procedure TMainF. Button6Click (Sender: TObject);
begin
AboutF.Show;
end;
procedure TMainF. Button4Click (Sender: TObject);
begin
Vxod.Show;
end;
procedure TMainF. Button7Click (Sender: TObject);
begin
OtchetF.Show;
end;
procedure TMainF. Button8Click (Sender: TObject);
begin
WinExec ('hh.ex);…Справку
end;
procedure TMainF. N4Click (Sender: TObject);
begin
Postup.Show;
end;
procedure TMainF. N5Click (Sender: TObject);
begin
Vydach.Show;
end;
procedure TMainF. N7Click (Sender: TObject);
begin
OtchetF.Show;
end;
procedure TMainF. N6Click (Sender: TObject);
begin
SkladF.Show;
end;
procedure TMainF. N2Click (Sender: TObject);
begin
MainF.Close;
end;
procedure TMainF. N11Click (Sender: TObject);
begin
newt.show;
end;
procedure TMainF. N10Click (Sender: TObject);
begin
AboutF.Show;
end;
end.
Форма «Поступление довольствия «
unit Come;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Grids, DBCtrls, Menus;
type
TPostup = class (TForm)
Goods: TComboBox;
// Razm: TComboBox1;
GoodsL: TLabel;
Dat: TDateTimePicker;
DatL: TLabel;
KolUp: TUpDown;
Kol: TEdit;
KolL: TLabel;
OK: TButton;
Tab: TStringGrid;
Nomer: TEdit;
Label1: TLabel;
Label2: TLabel;
Razm: TComboBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Button1: TButton;
procedure FormCreate (Sender: TObject);
procedure FormShow (Sender: TObject);
procedure OKClick (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Postup: TPostup;
m:integer;
implementation
uses Main, ComObj;
{$R *.dfm}
procedure TPostup. FormCreate (Sender: TObject);
begin
Tab.Cells[0,0]: ='Код вещевого имущества';
Tab.Cells[1,0]: ='Поступило';
Tab.Cells[2,0]:='Количество';
Tab.Cells[3,0]:='Дата поступления';
Tab.Cells[4,0]: ='Размер';
Tab.Cells[5,0]:='Номер накладной';
end;
procedure TPostup. FormShow (Sender: TObject);
var j: longint;
begin
Goods.Text:='';
Nomer.Text:='';
Razm.Text:='';
Dat.Date:=Date;
Goods.Items.Clear;
Razm.Items.Clear;
Kol.Text:='1';
Tab.RowCount:=2;
for j:=0 to 5 do
Tab.Cells[j, 1]: ='';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
MainF.GridSelectAll (MainF.DBGrid1);
if MainF. DBGrid1.SelectedRows.Count>0 then
for j:=0 to MainF. DBGrid1.SelectedRows.Count-1 do
begin
MainF.DBGrid1.DataSource.DataSet.GotoBookmark (pointer (MainF.DBGrid1.SelectedRows.Items[j]));
Goods.Items.Add (MainF.DBGrid1.Fields[0]. AsString);
end;
Goods.ItemIndex:=-1;
m:=1;
end;
procedure TPostup. OKClick (Sender: TObject);
var s, id, k, k_s, d, r, n: string; j: integer;
begin
if Goods. Text<>'' then
try
if StrToInt (Kol.Text)>0 then
begin
n:=Nomer.Text;
r:=Razm.Text;
s:=Goods.Text;
d:=DateToStr (Dat.Date);
k:=Kol.Text;
if Goods. ItemIndex=-1 then
begin
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='INSERT INTO Вещевое_имущество (Наименование) VALUES («'+s+'»)';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = «'+s+'» ';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
id:=MainF.DBGrid1.Fields[0]. AsString;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='INSERT INTO Приход (Номер_накладной, Код_вещевого_имущества, Пришло, Дата, Размер) VALUES («'+n+'», «'+id+'», «'+k+'», «'+d+'», «'+r+'»)';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='INSERT INTO Склад (Код_вещевого_имущества, Количество) VALUES («'+id+'», «'+k+'»)';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
end
else
begin
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = «'+s+'» ';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
id:=MainF.DBGrid1.Fields[0]. AsString;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='INSERT INTO Приход (Номер_накладной, Код_вещевого_имущества, Пришло, Дата, Размер) VALUES («'+n+'», «'+id+'», «'+k+'», «'+d+'», «'+r+'»)';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Количество FROM Склад WHERE Код_вещевого_имущества= '+id;
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
k_s:=IntToStr (StrToInt (MainF.DBGrid1.Fields[0]. AsString)+StrToInt (k));
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='UPDATE Склад SET Количество = «'+k_s+'» WHERE Код_вещевого_имущества = '+id;
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
end;
Tab.Cells[0,m]: =id;
Tab.Cells[1,m]:=s;
Tab.Cells[2,m]:=k;
Tab.Cells[3,m]:=d;
Tab.Cells[4,m]:=r;
Tab.Cells[5,m]:=n;
m:=m+1;
Tab.RowCount:=m;
Goods.Text:='';
Goods.Items.Clear;
Kol.Text:='1';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
Razm.Text:='';
Razm.Items.Clear;
Kol.Text:='1';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
MainF.GridSelectAll (MainF.DBGrid1);
if MainF. DBGrid1.SelectedRows.Count>0 then
for j:=0 to MainF. DBGrid1.SelectedRows.Count-1 do
begin
MainF.DBGrid1.DataSource.DataSet.GotoBookmark (pointer (MainF.DBGrid1.SelectedRows.Items[j]));
Goods.Items.Add (MainF.DBGrid1.Fields[0]. AsString);
end;
Goods.ItemIndex:=-1;
end
else ShowMessage ('Количество должно быть положительным!');
except ShowMessage ('Проверьте заполнение всех полей!');
end;
end;
procedure TPostup. N2Click (Sender: TObject);
begin
MainF.Show;
Postup.Close;
end;
procedure TPostup. N3Click (Sender: TObject);
begin
Postup.Close;
end;
procedure TPostup. Button1Click (Sender: TObject);
var
book: Variant;
i, j: Integer;
begin
book := CreateOleObject ('Excel.Application');
book.Visible:=true;
book.WorkBooks.open ('H:Накладная.xls') ;
// book.WorkBooks.Add;
book.Worksheets[3]. Delete;
book.Worksheets[2].Delete;
book.Worksheets[1].Name:='Поступление довольствия';
book.ActiveSheet.Range['C2']. Value := Nomer. Text;
for i := 1 to Tab. ColCount-1 do
for j := 0 to Tab. RowCount-1 do
book.Cells[j+5, i+1]. value := Tab. Cells[i, j];
end;
end.
Форма «Выдача довольствия»
unit Leave;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, Menus, DB, ADODB;
type
TVydach = class (TForm)
GoodsL: TLabel;
Goods: TComboBox;
Kol: TEdit;
KolUp: TUpDown;
KolL: TLabel;
DatL: TLabel;
OK: TButton;
Tab: TStringGrid;
CenaL: TLabel;
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Razmer1: TComboBox;
Label2: TLabel;
Sotr: TComboBox;
Button1: TButton;
ADOTable1: TADOTable;
DataSource1: TDataSource;
Nomer: TEdit;
Dat: TDateTimePicker;
ADOTable1__: TIntegerField;
ADOTable1DSDesigner: TWideStringField;
ADOTable1DSDesigner2: TDateTimeField;
ADOTable1DSDesigner3: TIntegerField;
ADOTable1DSDesigner4: TWideStringField;
ADOTable1DSDesigner5: TWideStringField;
procedure FormCreate (Sender: TObject);
procedure FormShow (Sender: TObject);
procedure OKClick (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Vydach: TVydach;
x:integer;
implementation
uses Main, ComObj, StrUtils;
{$R *.dfm}
procedure TVydach. FormCreate (Sender: TObject);
begin
Tab.Cells[0,0]: ='Код имущества';
Tab.Cells[1,0]: ='Выдано';
Tab.Cells[2,0]:='Количество';
Tab.Cells[3,0]:='Размер';
Tab.Cells[4,0]:='Дата выдачи';
Tab.Cells[5,0]: ='Номер накладной';
Tab.Cells[6,0]: ='Получатель';
end;
procedure TVydach. FormShow (Sender: TObject);
var j: longint;
begin
Goods.Text:='';
Dat.Date:=Date;
Goods.Items.Clear;
Kol.Text:='';
Nomer.Text:='';
Tab.RowCount:=2;
for j:=0 to 6 do
Tab.Cells[j, 1]: ='';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
MainF.GridSelectAll (MainF.DBGrid1);
if MainF. DBGrid1.SelectedRows.Count>0 then
for j:=0 to MainF. DBGrid1.SelectedRows.Count-1 do
begin
MainF.DBGrid1.DataSource.DataSet.GotoBookmark (pointer (MainF.DBGrid1.SelectedRows.Items[j]));
Goods.Items.Add (MainF.DBGrid1.Fields[0]. AsString);
end;
Goods.ItemIndex:=0;
x:=1;
end;
procedure TVydach. OKClick (Sender: TObject);
var s, id, k, k_s, d, c, rr, ss: string; j: integer;
label met1, met2;
begin
try
if (StrToInt (Kol.Text)>0) and (StrToInt (Nomer.Text)>0) then
begin
ss:=Sotr.Text;
rr:=Nomer.Text;
s:=Goods.Text;
d:=DateToStr (Dat.Date);
k:=Kol.Text;
c:=Razmer1.Text;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = «'+s+'» ';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
id:=MainF.DBGrid1.Fields[0]. AsString;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Количество FROM Склад WHERE Код_вещевого_имущества = '+id;
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
if StrToInt (k)>StrToInt (MainF.DBGrid1.Fields[0]. AsString) then goto met1
else k_s:=IntToStr (StrToInt (MainF.DBGrid1.Fields[0]. AsString)-StrToInt (k));
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='INSERT INTO Выдача (Код_вещевого_имущества, Выдано, Размер, Дата, Сотрудник) VALUES («'+id+'», «'+k+'», «'+c+'», «'+d+'», «'+ss+'»)';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='UPDATE Склад SET Количество = «'+k_s+'» Where Код_вещевого_имущества = '+id;
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.ExecSQL;
Tab.Cells[0,x]: =id;
Tab.Cells[1,x]:=s;
Tab.Cells[2,x]:=k;
Tab.Cells[3,x]:=c;
Tab.Cells[4,x]:=d;
tab.Cells[5,x]:=rr;
tab.Cells[6,x]:=ss;
x:=x+1;
Tab.RowCount:=x;
Goods.Text:='';
Goods.Items.Clear;
Goods.Text:='';
Kol.Text:='';
Razmer1.Text:='';
Nomer.Text:='';
Sotr.Text:='';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
MainF.GridSelectAll (MainF.DBGrid1);
if MainF. DBGrid1.SelectedRows.Count>0 then
for j:=0 to MainF. DBGrid1.SelectedRows.Count-1 do
begin
MainF.DBGrid1.DataSource.DataSet.GotoBookmark (pointer (MainF.DBGrid1.SelectedRows.Items[j]));
Goods.Items.Add (MainF.DBGrid1.Fields[0]. AsString);
end;
Goods.ItemIndex:=0;
goto met2;
met1:
ShowMessage ('Количество выдаваемого имущества превышает количество имущества на складе! На складе всего '+MainF.DBGrid1.Fields[0]. AsString+' ед!');
met2:
end
else ShowMessage ('Количество должно быть положительным!');
except ShowMessage ('Проверьте правильность заполнения!');
end;
end;
procedure TVydach. N2Click (Sender: TObject);
begin
Vydach.Close;
MainF.Show;
end;
procedure TVydach. N3Click (Sender: TObject);
begin
Vydach.Close;
end;
procedure TVydach. Button1Click (Sender: TObject);
var
book: Variant;
i, j: Integer;
begin
book := CreateOleObject ('Excel.Application');
book.Visible:=true;
book.WorkBooks.open ('H:Накладная.xls') ;
// book.WorkBooks.Add;
book.Worksheets[3]. Delete;
book.Worksheets[2].Delete;
book.Worksheets[1].Name:='Выдача довольствия';
book.ActiveSheet.Range['C2']. Value := Nomer. Text;
book.ActiveSheet.Range['C4']. Value := Sotr. Text;
for i := 1 to Tab. ColCount-1 do
for j := 0 to Tab. RowCount-1 do
book.Cells[j+5, i+1]. value := Tab. Cells[i, j];
end;
end.
Форма «Состояние склада»
unit Sklad;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TSkladF = class (TForm)
Tab: TStringGrid;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate (Sender: TObject);
procedure FormShow (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
SkladF: TSkladF;
implementation
uses Main, ComObj;
{$R *.dfm}
procedure TSkladF. FormCreate (Sender: TObject);
begin
Tab.Cells[0,0]: ='Наименование предмета';
Tab.Cells[1,0]: ='Количество';
end;
procedure TSkladF. FormShow (Sender: TObject);
var j, k: longint; sdf: string;
begin
Tab.RowCount:=2;
for j:=0 to 1 do
Tab.Cells[j, 1]: ='';
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT * FROM Склад';
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
MainF.GridSelectAll (MainF.DBGrid1);
if MainF. DBGrid1.SelectedRows.Count>0 then
begin
Tab.RowCount:=MainF.DBGrid1.SelectedRows.Count+1;
for j:=0 to MainF. DBGrid1.SelectedRows.Count-1 do
begin
MainF.DBGrid1.DataSource.DataSet.GotoBookmark (pointer (MainF.DBGrid1.SelectedRows.Items[j]));
Tab.Cells[0,j+1]: =MainF.DBGrid1.Fields[0].AsString;
Tab.Cells[1,j+1]:=MainF.DBGrid1.Fields[1].AsString;
end;
for j:=1 to Tab. RowCount-1 do
begin
MainF.ADOQuery1.Close;
MainF.ADOQuery1.SQL.Clear;
search:='SELECT Наименование FROM Вещевое_имущество WHERE Код_вещевого_имущества = '+Tab.Cells[0,j];
MainF.ADOQuery1.SQL.Add (search);
MainF.ADOQuery1.Open;
Tab.Cells[0,j]:=MainF.DBGrid1.Fields[0].AsString;
end;
end;
for j:=1 to Tab. RowCount-2 do
for k:=j+1 to Tab. RowCount-1 do
if Tab. Cells[0,j]>Tab.Cells[0,k] then
begin
sdf:=Tab.Cells[0,j];
Tab.Cells[0,j]:=Tab.Cells[0,k];
Tab.Cells[0,k]:=sdf;
sdf:=Tab.Cells[1,j];
Tab.Cells[1,j]:=Tab.Cells[1,k];
Tab.Cells[1,k]:=sdf;
end;
end;
procedure TSkladF. Button3Click (Sender: TObject);
begin
SkladF.Close;
end;
procedure TSkladF. Button2Click (Sender: TObject);
var
book: Variant;
i, j: Integer;
begin
book := CreateOleObject ('Excel.Application');
book.Visible:=true;
book.WorkBooks.Add;
book.Worksheets[3]. Delete;
book.Worksheets[2].Delete;
book.Worksheets[1].Name:='Выдача довольствия';
for i := 0 to Tab. ColCount-1 do
for j := 0 to Tab. RowCount-1 do
book.Cells[j+1, i+1]. value := Tab. Cells[i, j];
end;
procedure TSkladF. Button1Click (Sender: TObject);
var i: integer;
begin
for i := 0 to Tab. RowCount -1 do
begin
if Tab. Cells[0,i] = Edit1. Text then
begin
Tab.Row := i;
ShowMessage ('Найдена запись на ' + IntToStr (i) + ' строке.')
MessageBox (handle, PChar ('Такого предмета нет'), PChar ('Внимание'), 48)
else MessageBox (handle, PChar ('Такого предмета нет'), PChar ('Внимание'), 48);
end;
end;
MessageBox (handle, PChar ('Такого предмета нет'), PChar ('Внимание'), 48)
end;
end.
Форма «Новый предмет»
unit New;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, Grids, DBGrids, DB, ADODB,
Menus;
type
TNewT = class (TForm)
DataSource1: TDataSource;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure N2Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
NewT: TNewT;
implementation
uses Main;
{$R *.dfm}
procedure TNewT. N2Click (Sender: TObject);
begin
Mainf.show;
NewT.Close;
end;
procedure TNewT. FormCreate (Sender: TObject);
begin
end;
end.
Форма «Отчеты за период».
unit Otchet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Printers, Grids, DBGrids, DB, ADODB, Menus;
type
TOtchetF = class (TForm)
Com: TRadioButton;
Lev: TRadioButton;
Prnt: TButton;
S: TLabel;
Po: TLabel;
OK: TButton;
PrinterSetupDialog1: TPrinterSetupDialog;
DataSource1: TDataSource;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
D1: TDateTimePicker;
D2: TDateTimePicker;
//procedure probel (k:integer);
procedure OKClick (Sender: TObject);
procedure PrntClick (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure N2Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
OtchetF: TOtchetF;
implementation
uses Main;
{$R *.dfm}
procedure TOtchetF. OKClick (Sender: TObject);
begin
if Com. Checked then
begin
ADOTable1.Active := False;
ADOTable1.TableName := 'Запрос на приход';
ADOTable1.Filter := 'Дата >= ' + DateToStr (D1.Date)+ ' AND Дата <= ' + DateToStr (D2.Date);
ADOTable1.Filtered := True;
ADOTable1.Active := True;
DBGrid1.Visible:=True;
end else begin
ADOTable1.Active := False;
ADOTable1.TableName := 'Запрос на расход';
ADOTable1.Filter := 'Дата >= ' + DateToStr (D1.Date)+ ' AND Дата <= ' + DateToStr (D2.Date);
ADOTable1.Filtered := True;
ADOTable1.Active := True;
DBGrid1.Visible:=True;
end;
Abort;
end;
procedure TOtchetF. PrntClick (Sender: TObject);
var Prntr: TPrinter;
begin
Prntr:=Printer;
OtchetF.ClientHeight:=685;
OK.Visible:=false;
OtchetF.Show;
ShowMessage ('Для правильной печати нужно, чтобы «Настройка печати» не накладывалась на форму отчета при нажатии кнопки ОК.');
if PrinterSetupDialog1. Execute then
begin
Prntr.BeginDoc;
Prntr.Canvas.CopyRect (Rect (100,150,Prntr.PageWidth-100,Prntr.PageHeight-150), OtchetF. Canvas, Rect (0,0,OtchetF.ClientWidth, OtchetF. ClientHeight));
Prntr.EndDoc;
end
else
begin
OK.Visible:=true;
OtchetF.ClientHeight:=717;
end;
end;
procedure TOtchetF. FormClose (Sender: TObject; var Action: TCloseAction);
begin
OtchetF.ClientHeight:=717;
OK.Visible:=true;
end;
procedure TOtchetF. N2Click (Sender: TObject);
begin
OtchetF.Close;
MainF.Show;
end;
procedure TOtchetF. N3Click (Sender: TObject);
begin
OtchetF.Close;
end;
procedure TOtchetF. FormCreate (Sender: TObject);
begin
end;
end.
Форма «Вход».
Unit Vxod;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, DB, ADODB;
type
TVxod = class (TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
LoginEdit: TEdit;
PasswordEdit: TEdit;
Button3: TButton;
UserQuery: TADOQuery;
ADOConnection1: TADOConnection;
procedure Button3Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure FormShow (Sender: TObject);
procedure GClick (Sender: TObject);
procedure graf (k:longint);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Vxod: TVxod;
implementation
uses Main;
{$R *.dfm}
procedure TVxod. Button3Click (Sender: TObject);
begin
Messagedlg ('Введите Ваши имя пользователя и пароль!', mtinformation,[mbOk], 0);
end;
procedure TVxod. Button2Click (Sender: TObject);
begin
Application.Terminate;
end;
procedure TVxod. Button1Click (Sender: TObject);
var
Login:string;
Dostup:boolean;
begin
If (LoginEdit.Text<>'') and (PasswordEdit.Text<>'') then //поля не пустые
begin
UserQuery.Active:=false;
UserQuery.Parameters.ParamByName ('log').Value:=LoginEdit.Text;
UserQuery.Active:=true;
If UserQuery. RecordCount<>0 then
begin
If UserQuery. FieldByName ('Пароль').AsString=PasswordEdit.Text then begin
Login:=LowerCase (LoginEdit.Text);
If UserQuery. FieldByName ('Доступ').AsString='True' then Dostup:=true //and Form2. Show//есть доступ
//then Form2. Show;
else Dostup:=false;
MainF.Show //Close;
end
else Showmessage ('Пароль неверный!');
end;
end
else ShowMessage ('Введите имя пользователя и пароль!');//пустые поля
end;
procedure TVxod. FormCreate (Sender: TObject);
begin
end;
end.