Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Проектирование реализации операций бизнес-процесса «Запасы-склад (приходование товара) ».

Содержание:

Введение

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

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

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

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

В данной курсовой работе будет разработан модуль приема товара на склад.

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

Разработанная программа позволит автоматизировать направление «расчет заработной платы».

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

  • Выполнить характеристику задач, которые необходимо автоматизировать;
  • Описать программное и техническое обеспечение;
  • Описать БД и процесс разработки программы;
  • Протестировать полученное приложение.

Объектом исследования является склад. Предметом исследования являются автоматизация работы работника склада.

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

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

    1. Выбор комплекса задач автоматизации

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

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

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

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

У складского учета выделяют следующие цели:

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

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

    1. Характеристика существующих бизнес – процессов

В деятельности кладовщика по приему товара наблюдаются следящие бизнес-процессы, которые представлены на рисунке 1.

Рисунок 1. Бизнес-процессы

Декомпозиция приема товара показано на следующем рисунке 2.

Рисунок 2. Декомпозиция приема товара

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

Сегодня у многих товаров прием товара не автоматизирован, а идет в ручном режиме

    1. Характеристика документооборота, возникающего при решении задачи.

Документооборот в деятельности кладовщика в процессе приема (складирования) товара показан на рисунке 3.

Рисунок 3. Документооборот приема (складирования) товара

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

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

Причем не рассматривается детально данный процесс.

    1. Обоснование проектных решений по информационному обеспечению.

Информационное обеспечение (ИО) – это совокупность методов и средств построения информационного фонда предприятия, организации его функционирования и использования.

ИО работника склада должна служить за контролем поступления товара на склад, и состоянием склада – числом товаров на складе.

ИО состоит из:

• Системы классификации и кодирования;

• Системы унифицированной документации, которая используется в ИО;

• Информационная база.

В работе используются следующие классификаторы:

  • Единицы измерения;
  • Категория продуктов;
  • Продукты;
  • Поставщики.

Все классификаторы заполняются работником склада.

Классификатор единицы измерения:

Структурная формула классификатора следующая

F = [Наименование]:[XX] — Код единицы измерения

Пример заполнения — 19.

Классификатор код категории продуктов:

Структурная формула классификатора следующая

F = [Наименование]:[XXX] — код категории продуктов

Пример заполнения — 888.

Классификатор код продукта:

Структурная формула классификатора следующая

F = [Наименование]:[XXXXX] — Код продукта

Пример заполнения — 12345.

Классификатор код поставщика:

Структурная формула классификатора следующая

F = [Наименование]:[XXX] — код поставщика.

Пример заполнения — 828.

Для разработки базы данных была выбрана реляционная модель баз данных.

Для разработки БД в теории БД есть три модели – сетевая, иерархическая и реляционная модель БД.

Для иерархической модели характерно то, что в данной модели используется только два типа связи между объектами БД: «один к одному» или «один ко многим». В иерархической БД доступ осуществляется только при помощи созданных ранее связей. Характерной чертой иерархической модели состоит в том, что от одного элемента до другого мог быть только один маршрут.

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

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

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

– Связность (Реляционное представление дает ясную картину взаимосвязей атрибутов из различных отношений);

– Точность;

– Гибкость;

– Секретность;

– Простота внедрения (Физическое размещение однородных (табличных) файлов намного проще, чем размещение иерархических и сетевых структур);

– Независимость данных(БД должна допускать возможность расширения, т.е. добавления новых атрибутов и отношений)[1].

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

    1. Обоснование проектных решений по программному обеспечению.

Для создания программы была выбрана среда разработки Delphi 7.

Язык програмирования Delphi представляет собой естественный итог развития языка под названием Turbo Pascal (несложно догадатся, что сам Turbo Pascal произошел из простого Паскаля)... Кстати в 1983 году, А. Хейлсберг с другими энтузиастами, создав фирму Borland и сотворили Turbo Pascal.

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

А Turbo Pascal, уже с версии 5.5, вместил в себе еще и объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с доступом к метаданным классов в компилируемом коде.

Отменной чертой Object Pascal от С++ является именно то, что все объекты по умолчанию находятся в динамической памяти. Но в виртуальных методах NewInstance и FreeInstance есть возможность переопределения.

Object Pascal представляет собой итог расширения Turbo Pascal.

Язык Delphi мощное и необратимое воздействие оказал на создание языка C#. Великое множество его решений и элементов вошли в С#.

Самой первой автономной и полноценной версией Delphi для .NET считается именно Delphi 8.

В 2006 году компания Borland, имеющая комерческие права на JBuilder, Delphi и C++ Builder, из за их убыточности, задумывается о продаже этого направления.

Но в итоге, в 2007 году правоприемником стает компания CodeGear, подконтрольная Borland, которая и дальше радует нас постоянными интересными новинками и обновлениями.

Из стран СНД, первым Borland Delphi появился в Росийской Федерации (1993 год). Думаю не стоит говорить о том что он буквально сразу же приобрел широкую известность. Которая достаточно долгое время поддерживалась благодаря постоянным новинкам и обновлениям (выходили которые фактически каждый год). И сегодня с выходом каждой новой версии, програмирование в среде Delphi стает все более насыщенным и комфортным.

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

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

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

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

1. Разработанные программы получают улучшенную отладку. В интегрированном отладчике Delphi предусмотрено множество полезных свойств.

2. Наличие высокоскоростного компилятора обеспечивает быстрый и беспроблемный перевод программ в машинный код. Delphi оснащен самым быстрым в мире на данный момент компилятором.

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

4. Delphi обладает простыми и функциональными способами формирования баз данных (БД).

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

Для разработки базы данных была выбрана СУБД Microsoft Access 2007.

MS Access – реляционная клиент-серверная система управления базами данных (СУБД) от компании Microsoft. Реляционная означает, что она основана на таблицах. Рассмотрим эту систему подробнее.

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

Рассмотрим преимущества и недостатки данной СУБД.

Преимущества СУБД Microsorf Access

  • Простой и понятный интерфейс. Приступить к работе с данной СУБД можно, не имея никаких особых навыков. Кроме того, на помощь новичку приходят многочисленные справочные пособия, онлайн- и офлайн-курсы.
  • СУБД MS Access общеизвестна и очень популярна в настольных ПК. Это значит, что всегда можно обратиться за помощью к знакомому, уже давно использующему данную СУБД, за советом, а также вместе работать с одной базой данных по сети.
  • Практически безграничные возможности экспорта данных: данные из таблиц щелчком одной клавиши мыши можно перенести в Excel, Word, экспортировать в XML опубликовать в PDF, не говоря уже о том, чтобы без проблем перенести выбранные объекты в другую базу данных.
  • Невысокая цена. Если покупать MS Access в составе полного пакета Microsoft Office, то, по сравнению с другими платными СУБД, цена окажется очень заманчивой.
  • Широкий выбор конструкторов для построения форм, отчетов и запросов, с помощью которых можно отфильтровать данные и вывести их в удобном виде.
  • Широкие возможности импорта данных: если у вас есть табличные данные, созданные при помощи текстового процессора MS Word или табличного процессора MS Excel, с помощью мастера без труда перенесете их в свою базу. Импорт, кроме того, можно выполнить из простого текстового документа, из документа XML, а также из файлов баз данных, созданных в других СУБД (таких как dBASE. PARADOX).
  • Возможность создания пароля на своей базе данных.
  • Встроенный язык VBA высокого уровня.
  • Возможность записи макросов.
  • Редактор SQL.

Для программистов можно выделить еще один значительный плюс: ядро Access JET 4 встроено в операционные системы Microsoft, начиная с Windows-98. Это значит, что разработанное приложение, использующее в работе базу данных, созданную в Access, можно без проблем переносить на любой компьютер с ОС Windows. Оно будет работать, не требуя установки самой СУБД. В крайнем случае потребуется лишь установка RUNTIME - версии, которую можно абсолютно бесплатно скачать с сайта Microsoft.

Как видим, достоинства СУБД MS Access налицо. Но все плюсы могут перекрыться вполне существенными минусами. Рассмотрим их.

Недостатки СУБД Microsoft Access

  • MS Access относится к файл-серверным СУБД. Это означает, что вся обработка данных происходит непосредственно на компьютере клиента, пользователя. Серверная часть лишь извлекает данные и передает их по требованию. Это приводит к тому, что по локальной сети курсируют большие потоки данных, и при большом количестве пользователей, работающих с базой данных, может случиться перегрузка сети. Классическая файл-серверная архитектура всегда влечет за собой низкую производительность при большом количестве пользователей. В версии MS Access 2010 этот вопрос частично решен.
  • Отсутствие надежных средств защиты данных. По сути, используется только пароль на базе данных и пароль пользователя. Для опытного специалиста не представляет никакой сложности снять такую защиту.
  • Многопользовательский режим возможен только в одноранговой сети или в сети с файловым сервером.
  • Для разработки нестандартного интерфейса требуется привлекать программистов.
  • Редактор запросов SQL примитивен, использовать его неудобно.
  • Данная СУБД не бесплатная.
  • MS Access заточен под операционные системы Windows. Чтобы попытаться использовать данные, созданные в этой СУБД в других ОС (например, LINUX), придется изрядно повозиться. Проще перенести данные в другую СУБД.

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

2.1. Информационная модель и её описание.

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

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

Рисунок 4. Информационная модель

2.2. Характеристика нормативно-справочной, входной и оперативной информации

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

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

  • Единицы измерения товара – штуки, кг., гр., булки, литры;
  • Категории продуктов – мясо, рыба, крупы, и т.д.;
  • Продукты – перечень продуктов;
  • Поставщики – список поставщиков продуктов.

2.3. Характеристика результатной информации.

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

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

2.4. Общие положения (дерево функций и сценарий диалога).

Программа создается для одного пользователя – работника склада - кладовщика.

Дерево функций данной программы показано на рисунке 5.

Рисунок 5. Дерево функций программы

Сценарий диалога программы представлен на рисунке 6.

Рисунок 6. Сценарий функций программы

2.5. Характеристика базы данных.

EPR-модель базы данных показана на рисунке 7.

Рисунок 7. EPR-модель базы данных

База данных состоит из шести таблиц, которые в режиме конструктора показаны на рисунках 8 - 12.

Рисунок 8. Таблица «Группа продуктов»

Рисунок 9. Таблица «Продукты»

Рисунок 10. Таблица «Единицы измерения (продуктов)»

Рисунок 11. Таблица «Поставщики»

Рисунок 12. Таблица «Приход товара»

2.6. Структурная схема пакета (дерево вызова программных модулей).

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

В таблице 1 представлены модули программы

Таблица 1. Описание модулей

№ п/п

Название модуля

Назначение функции

General

Модуль главной формы

Ed_izmer

Модуль добавления единицы измерения

Postav_ik

Модуль добавления нового поставщика

Prihod

модуль «Приход»

Prihod_prod

Модуль склад

Product_group

Модуль добавления группы товаров

Products

Модуль добавления товара/продуктов

Select_product

Модуль продажи товара/продуктов

2.7 Описание программных модулей.

Дерево вызова программных модулей программы представлено на рисунке 13.

Рисунок 13. Дерево вызова программных модулей приложения

    1. Контрольный пример реализации проекта и его описание.

Посла запуска программы откроется окно, показанное на рисунке 14.

Рисунок 14. Главное окно программы (часть)

Далее на главную форму добавим справочники. Для этого следует нажать на пункт меню «Справочники» и выбрать все четыре пункта, как показано на рисунке 15.

Рисунок 15. Пункт меню «Справочники»

В результате на форме откроются 4 справочника, где хранится вся информация, как показано на рисунке 16.

Рисунок 16. Главная форма с добавлением справочников

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

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

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

Удаление записи из справочника осуществляется нажатием на кнопку «Удалить», в результате откроется окно, в котором необходимо подтвердить процесс удаления.

Далее рассмотрим, как организован процесс приходирования товара. Для этого надо нажать подпункт «Меню» - «Приход», в результате откроется окно, показанное на рисунке 17.

Рисунок 17. Приход товара

Для добавления товара, следует нажать «Новая запись», в результате откроется окно, представленное на рисунке 18.

Рисунок 18. Приход товара

Что бы добавить следует нажать кнопку «Новая запись» и тогда откроется окно, показанное на рисунке 19, поля следует заполнить, то есть выбрать нужные товары, единицы измерения, группу товаров и поставщика из списков.

Рисунок 19. Форма добавления товара

После заполнения всех полей, поле «Сумма» подсчитывается автоматически. Затем надо сохранить запись. И таблице приход товара добавится новая запись.

Для просмотра склада открывается таблица «Товары».

ЗАКЛЮЧЕНИЕ

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

Для решения данной цели было выполнено:

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

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

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

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

  1. Иванова И.Д. Информатика. Базы данных. Системы управления базами данных. Microsoft Асеева: Теоретические основы, примеры и задания, практические работы [текст]: учебник / И. Д. Иванова, М. М. Корниенко.— Харьков: Издательство «Ранок». 2009.
  2. Информационная модель. [онлайн] – URL: https://ru.wikipedia.org/wiki/

ПРИЛОЖЕНИЯ

procedure TForm_prihod.Button1Click(Sender: TObject);

begin

//новая запись

form_prihod_prod.Caption:='Приход: новое' ;

dm.table_prihod.Edit;

dm.table_prihod.append;

form_prihod_prod.DateTimePicker1.Date:=sysutils.Date;

form_prihod_prod.docum_number.Text:='';

form_prihod_prod.Showmodal;

end;

rocedure TForm_prihod.Button2Click(Sender: TObject);

begin

//удаление записи

if dbgrid1.DataSource.DataSet.RecordCount<>0 then

begin

if (MessageBox(Handle, 'Удалить запись?', 'Внимание !!!', MB_YESNO) = IDYES) then

begin

dm.table_prihod.Edit;

form_prihod_prod.table_storage.Edit;

//из таблицы storage

dm.ADOQuery_delete.SQL.Clear;

dm.ADOQuery_delete.DataSource:=dm.prihod;

dm.ADOQuery_delete.SQL.Add('DELETE storage.*, storage.id FROM storage WHERE (((storage.id_prihod)=:id));');

dm.ADOQuery_delete.ExecSQL;

dm.ADOQuery_delete.Active:=false;

//из таблицы prihod

dm.table_prihod.Edit;

dm.table_prihod.Delete;

end;

end

else ShowMessage('Нет записей для удаления');

end;

procedure TForm_prihod.Button3Click(Sender: TObject);

begin

//закрытие формы

Close;

end;

procedure TForm_prihod.DBGrid1DblClick(Sender: TObject);

begin

//Двойной клик на записи, если записей еще нет, то создаем новую

if dbgrid1.DataSource.DataSet.RecordCount=0 then

begin

form_prihod_prod.Caption:='Приход: новое' ;

dm.table_prihod.Edit;

dm.table_prihod.append;

form_prihod_prod.docum_number.Text:='';

form_prihod_prod.DateTimePicker1.Date:=sysutils.Date;

end

//иначе заполняем форму prihod_prod текущими данными

else

begin

dm.table_prihod.Edit;

form_prihod_prod.table_storage.Edit;

form_prihod_prod.table_storage.First;

form_prihod_prod.docum_number.Text:= dm.table_prihod.FieldByName('number_docum').value;

form_prihod_prod.DateTimePicker1.Date:= dm.table_prihod.FieldByName('date_prihoda').Value;

end;

//показываем форму prihod_prod

form_prihod_prod.Caption:='Приход: '+dm.table_prihod.FieldByName('number_docum').AsString;

form_prihod_prod.Showmodal;

end;

procedure TForm_prihod.FormActivate(Sender: TObject);

begin

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

//то мы должны проверить заполнены они или нет

if form_general.table_ed_izmer.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Единиц измерения". Для продолжения работы Вам необходимо заполнить справочник.');close;end

else begin

if form_general.table_product_group.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Категории продуктов". Для продолжения работы Вам необходимо заполнить справочник.');close;end

else begin

if form_general.table_postav_ik.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Поставщики". Для продолжения работы Вам необходимо заполнить справочник.');close;end

else begin

if form_general.table_products.RecordCount=0 then begin ShowMessage('У Вас не заполнен справочник "Продукты". Для продолжения работы Вам необходимо заполнить справочник.');close;end

else begin

//обновляем данные

form_general.table_ed_izmer.Refresh;

form_general.table_product_group.Refresh;

form_general.table_postav_ik.Refresh;

form_general.table_products.Refresh;

//установка фокуса при активации формы

dbgrid1.SetFocus;

end;

end;

end;

end;

end;

procedure TForm_prihod.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//процедура закрытия формы

Action:=cafree;

end;

procedure TForm_prihod_prod.Button1Click(Sender: TObject);

begin

//новая запись

if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); docum_number.SetFocus; end

else begin

if (table_copy_prihod.Lookup('number_docum', docum_number.text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text) then begin ShowMessage('Такой номер уже существует');docum_number.Text:=''; docum_number.SetFocus; end

else begin

if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"'); dblookup_postav_ik.SetFocus;end

else begin

if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"'); DateTimePicker1.SetFocus;end

else begin

dm.table_prihod.FieldByName('date_prihoda').Value:=DateTimePicker1.Date;

dm.table_prihod.FieldByName('number_docum').Value:=docum_number.text;

dm.table_prihod.Post;

dm.table_prihod.edit;

table_storage.Edit;

table_storage.append;

table_storage.FieldByName('id_prihod').Value:= dm.table_prihod.FieldByName('id').AsInteger;

form_select_prod.Showmodal;

end;

end;

end;

end;

end;

procedure TForm_prihod_prod.Button2Click(Sender: TObject);

begin

//удалить запись

if dbgrid1.DataSource.DataSet.RecordCount<>0 then

begin

if (MessageBox(Handle, 'Удалить запись?', 'Внимание !!!', MB_YESNO) = IDYES) then

begin

table_storage.Edit;

table_storage.Delete;

adoquery_summa.Active:=false;

adoquery_summa.Active:=true;

end;

end

else ShowMessage('Нет записей для удаления');

end;

procedure TForm_prihod_prod.Button3Click(Sender: TObject);

begin

//закрытие формы

Close;

end;

procedure TForm_prihod_prod.DBGrid1DblClick(Sender: TObject);

begin

//двойной клик для редактирования записи

if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); docum_number.SetFocus; end

else begin

if (table_copy_prihod.Lookup('number_docum', docum_number.text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text) then begin ShowMessage('Такой номер уже существует'); docum_number.Text:=''; docum_number.SetFocus; end

else begin

if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"'); dblookup_postav_ik.SetFocus;end

else begin

if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"'); DateTimePicker1.SetFocus;end

else begin

dm.table_prihod.FieldByName('date_prihoda').Value:= DateTimePicker1.Date;

dm.table_prihod.FieldByName('number_docum').Value:= docum_number.text;

dm.table_prihod.Post;

dm.table_prihod.edit;

table_storage.Edit;

table_storage.FieldByName('id_prihod').Value:= dm.table_prihod.FieldByName('id').AsInteger;

if table_storage.FieldByName('id_product_group').AsInteger<>0 then

form_select_prod.DBLookup_product_group.KeyValue:= table_storage.FieldByName('id_product_group').Value;

//открываем форму редактирования

form_select_prod.Showmodal;

end;

end;

end;

end;

end;

procedure TForm_prihod_prod.FormActivate(Sender: TObject);

begin

//пересчет итоговой суммы при активации формы

adoquery_summa.Active:=false;

adoquery_summa.Active:=true;

end;

procedure TForm_prihod_prod.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

//проверка перед закрытием формы и закрытие формы

//сохранение формы

if ( MessageBox(Handle, 'Cохранить документ?', 'Внимание !!!', MB_OkCANCEL)= IDOk) then begin

if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); CanClose:=false;docum_number.SetFocus; end

else begin

if (table_copy_prihod.Lookup('number_docum',docum_number.Text,'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString<>docum_number.Text)then begin ShowMessage('Такой номер уже существует');CanClose:=false;docum_number.Text:=''; docum_number.SetFocus; end

else begin

if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"');CanClose:=false;dblookup_postav_ik.SetFocus;end

else begin

if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"');CanClose:=false;DateTimePicker1.SetFocus;end

else begin

dm.table_prihod.Edit;

dm.table_prihod.FieldByName('date_prihoda').Value:=DateTimePicker1.Date;

dm.table_prihod.FieldByName('number_docum').Value:=docum_number.text;

dm.table_prihod.FieldByName('sum').Value:=dbedit_summa.Field.Value;

dm.table_prihod.post;

end;

end;

end;

end;

end

//при отказе от сохранения, проверяем, если уже заполненные записи продуктов и если такие есть, то не даем закрыть форму, пока все не будет заполнено правильно

else if dbgrid1.DataSource.DataSet.RecordCount<>0 then

begin

if docum_number.Text='' then begin ShowMessage('Не заполнено поле "Номер документа"'); CanClose:=false;docum_number.SetFocus; end

else begin

if (table_copy_prihod.Lookup('number_docum',docum_number.Text, 'number_docum')<>null) and (dm.table_prihod.FieldByName('number_docum').AsString <> docum_number.Text) then begin ShowMessage('Такой номер уже существует');CanClose:=false;docum_number.Text:=''; docum_number.SetFocus; end

else begin

if dblookup_postav_ik.Text='' then begin ShowMessage('Не заполнено поле "Поставщик"');CanClose:=false;dblookup_postav_ik.SetFocus;end

else begin

if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Дата прихода"');CanClose:=false;DateTimePicker1.SetFocus;end

else begin

dm.table_prihod.Edit;

dm.table_prihod.FieldByName('date_prihoda').Value:= DateTimePicker1.Date;

dm.table_prihod.FieldByName('number_docum').Value:= docum_number.text;

dm.table_prihod.FieldByName('sum').Value:= dbedit_summa.Field.Value;

dm.table_prihod.post;

end;

end;

end;

end;

end

//если записей нет, отменяем изменения

else dm.table_prihod.cancel;

end;

для события OnCalcFields компонента table_storage:

procedure TForm_prihod_prod.table_storageCalcFields(DataSet: TDataSet);

begin

//вычисляемое поле сумма

table_storage.FieldByName('summa').Value:= table_storage.FieldByName('price').Value* table_storage.FieldByName('quantity').Value;

end;

procedure TForm_select_prod.Button1Click(Sender: TObject);

begin

//Нажатие на кнопку ОК. Проверяем и сохраняем.

if dblookup_products.Text='' then begin ShowMessage('Не заполнено поле "Продукт"');dblookup_products.SetFocus;end

else begin

if dblookup_ed_izmer.Text='' then begin ShowMessage('Не заполнено поле "Ед.изм."');dblookup_ed_izmer.SetFocus;end

else begin

if quantity.Text='' then begin ShowMessage('Не заполнено поле "Количество"');quantity.SetFocus;end

else begin

if price.Text='' then begin ShowMessage('Не заполнено поле "Цена"'); price.SetFocus;end

else begin

if DateTimePicker1.ToString='' then begin ShowMessage('Не заполнено поле "Срок реализации"'); DateTimePicker1.SetFocus;end

else begin

if ( MessageBox(Handle, 'Cохранить документ?', 'Внимание !!!', MB_OkCANCEL)= IDOk) then begin

form_prihod_prod.table_storage.Edit; form_prihod_prod.table_storage.FieldByName('id_product_group').Value:= form_general.table_products.FieldByName('id_product_group').Value;

form_prihod_prod.table_storage.FieldByName('date_realization').Value:= DateTimePicker1.Date;

form_prihod_prod.table_storage.Post;

end

else form_prihod_prod.table_storage.Cancel;

close;

end;

end;

end;

end;

end;

end;

для события OnClick кнопки Button2 (Отмена):

procedure TForm_select_prod.Button2Click(Sender: TObject);

begin

//кнопка отмена

form_prihod_prod.table_storage.Cancel;

form_select_prod.Close;

end;

для события OnClick компонента DBLookup_products:

procedure TForm_select_prod.DBLookup_productsClick(Sender: TObject);

begin

//заполняем поля по умолчанию при выборе продукта

DBLookup_ed_izmer.KeyValue:=products.DataSet.FieldByName('id_ed_izmer').Value;

form_prihod_prod.table_storage.FieldByName('id_ed_izmer').Value:= dblookup_ed_izmer.KeyValue;

DateTimePicker1.Date:=sysutils.Date+ products.DataSet.FieldByName('time_hraneniya').Value;

end;

для события OnClick компонента DBLookup_product_group:

procedure TForm_select_prod.DBLookup_product_groupClick(Sender: TObject);

begin

//включем фильтр при выборе группы продукта

form_general.table_products.Filtered:=true;

form_general.table_products.Filter:='id_product_group='+ inttostr(DBLookup_product_group.KeyValue);

//отключаем фильтр, если в выбранной категории нет продуктов

if products.DataSet.RecordCount=0 then

begin ShowMessage('Список продуктов пустой, выберите другую категорию или заполните справочник "Продукты".');

form_general.table_products.Filtered:=false;

end;

end;

для события OnClose формы form_select_prod:

procedure TForm_select_prod.FormClose(Sender: TObject; var Action: TCloseAction);

begin

//пересчитываем итоговую сумму и закрываем форму.

form_prihod_prod.table_storage.Cancel;

form_general.table_products.Filtered:=false;

form_prihod_prod.adoquery_summa.Active:=false;

form_prihod_prod.adoquery_summa.Active:=true;

end;

procedure TForm_products.Button2Click(Sender: TObject);

//удаление записи

begin

//если записи отсутствуют то выводим сообщение, иначе проверяем используется

//ли данный продукт на складе, если нет то удаляем запись

if dbgrid1.DataSource.DataSet.RecordCount<>0 then

begin

if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)= IDYES) then

if (form_prihod_prod.table_storage.Locate('id_product', form_general.table_products.FieldByName('id').Value, [loCaseInsensitive,loPartialKey])) then ShowMessage('Нельзя удалить данный продукт, так как он используется в складе.')

else form_general.table_products.Delete

end

else ShowMessage('Нет записей для удаления');

end;

  1. Иванова И.Д. Информатика. Базы данных. Системы управления базами данных. Microsoft Асеева: Теоретические основы, примеры и задания, практические работы [текст]: учебник / И. Д. Иванова, М. М. Корниенко.— Харьков: Издательство «Ранок». 2009.— с. 35

  2. Информационная модель. [онлайн] – URL: https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C (дата обращения 27.02.2017)