База данных торговой организации

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

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

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

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

Рисунок 4.2- Сценарий диалога в режиме «Справочники»

Рисунок 4.3- Сценарий диалога в режиме «Прайс-лист»

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

1) Выбор пункта меню «Новая закупка/ Новая продажа»;

2) Создание бланка накладной на закупку/продажу;

3) Последовательное добавление товаров в накладную;

4) Проведение накладной;

5) Печать накладной;

6) Завершение работы с окном.

Сценарий диалога в режиме «Новая закупка/новая продажа» представлен на рисунке 4.4.

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

1) Выбор в меню пункта «Отчет»;

2) Выбор типа отчета (по точкам продаж, по менеджерам);

3) Введение интервала дат;

4) Формирование отчета;

5) Печать или просмотр готового отчета;

6) Закрытие формы «Отчеты»

Сценарий диалога для режима «Отчеты» представлен на рисунке 4.5.

Рисунок 4.4- Сценарий диалога в режиме «Новая закупка/новая продажа»

Рисунок 4.5- Сценарий диалога «Отчеты»

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

В данном разделе представлено дерево программных модулей базы данных торговой организации ООО «Марта». Схематическое изображение дерева программных модулей приведено на рисунке 4.6, а описание дано в таблице 4.1.

Таблица 4.1--Описание к схеме дерева программных модулей

Модуль

Описание модуля

uLogin.pas

Модуль формы авторизации пользователя. Форма авторизации содержит элементы управления для ввода логина и пароля пользователя

uMain.pas

Модуль главной формы. Главная форма содержит главное меню приложения и связана со всеми остальными формами

uDM.pas

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

uGroup.pas

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

uContrag.pas

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

uMove.pas

Модуль формы «Перемещение товаров». Содержит элементы управления для формирования и проводки накладных на перемещение товаров между торговыми точками

uOper.pas

Модуль формы «Новая закупка/новая продажа». Содержит элементы управления для формирования и проводки накладных на продажу и закупку товаров

uStore.pas

Модуль формы «Товар на складе». Содержит элементы управления для просмотра информации о наличии товаров на складе

uPhoto.pas

Модуль формы «Фото товара». Форма реализована в виде небольшого окна, содержащего фото товара.

uStaff.pas

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

uRequisite.pas

Модуль формы реквизитов компании

uBook.pas

Модуль формы «Книга закупок/продаж». Содержит элементы управления для просмотра всех операций закупок/продаж товаров либо операций, отобранных

Модуль

Описание модуля

по определенному критерию

uStat.pas

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

uSelRep.pas

Модуль формы «Отчеты по продажам». Содержит элементы управления для построения отчетов по продажам, а также для их печати

uSumToStr.pas

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

Рисунок 4.6- Схема дерева программных модулей

Листинг программных модулей представлен в Приложении.

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

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

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

Рисунок 4.7 - Окно авторизации

Главная форма программы, приведенная на рисунке 4.8, имеет главное меню, посредством которого пользователь может получить доступ ко всем остальным экранным формам приложения.

Рисунок 4.8 Главная форма программы

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

Для ведения прайс-листа, учета товара на складе и оформления приходных и расходных операций создана группа команд в пункте меню «Товар».

Группа команд в пункте меню «Отчеты и статистика» позволяет проанализировать продажи за заданный период времени.

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

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

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

Товар делится на группы, каждый товар имеет уникальный код, цену закупки и цену продажи. Диалоговое окно справочника «Группы товаров» представлено на рисунке 4.9.

Рисунок 4.9- Справочник «Группы товаров»

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

Рисунок 4.10 Форма «Прайс-лист»

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

Рисунок 4.11 - Товар на складе

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

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

Рисунок 4.12 - Перемещение товара

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

Рисунок 4.13 - Окно «Закупка»

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

Рисунок 4.14 - Продажа

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

Рисунок 4.15 - Форма «Книга продаж / покупок»

Информацию по продажам можно просмотреть или распечатать на форме «Отчеты по продажам», вызываемой выбором пункта главного меню «Отчеты и статистика | Отчеты по продажам» (Рисунок 4.16). Можно сформировать за указанный диапазон дат отчет по продажам по всем точкам продаж или по всем менеджерам, а также по конкретным точке продаж или менеджеру.

Визуальное отображение статистики продаж можно просмотреть на форме «Статистика», вызываемой выбором пункта главного меню «Отчеты и статистика | Статистика» (Рисунок 4.17). Любая диаграмма на форме может быть сформирована за любой диапазон дат.

Рисунок 4.16 - Отчет по продажам в разрезе по складам

Рисунок 4.17 - Форма «Статистика»

ЗАКЛЮЧЕНИЕ

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

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

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

– приведена технико-экономическая характеристика ООО «Марта»;

– обоснована необходимость создания базы данных торговой организации ООО «Марта»;

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

– сформулированы назначение и функции базы данных торговой организации;

– произведен выбор прикладного программного обеспечения;

– произведены выбор и обоснование проектных решений;

– проведено проектирование БД, интерфейса, архитектуры АИС;

– разработана база данных торговой организации.

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

– складской учет товара;

– учета прихода и реализации товара;

- формирование выходных документов, аналитики и статистики.

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

1. Мишенин А.И. Теория экономических информационных систем: Учеб. для вузов / А.И. Мишенин.- 4-е изд., доп. и перераб. - М. : Финансы и статистика, 2001. - 240 с. : ил.

2. Титоренко Г.А. Информационные системы в экономике: Учеб. для вузов / Титоренко Г.А. - М. : «ЮНИТИ-ДАНА», 2008. - 463 с.

3. Балдин К. В., Уткин В. Б. Информационные системы в экономике: Учеб. для вузов / Балдин К. В. - М. : Финансы и статистика, 2008. - 395 с.

4. Смирнова Г.Н. Проектирование экономических информационных систем: Учеб. для вузов / Г.Н. Смирнова, А.А. Сорокин, Ю.Ф. Тельнов; Под ред. Ю.Ф. Тельнова. - М. : Финансы и статистика, 2002. - 512 с. : ил.

5. 1С:Розница 8 [Электронный ресурс]: - Электрон. дан. - М., [201-]. - Режим доступа: http://v8.1c.ru/retail/

6. Торговая система СуперМаг Плюс [Электронный ресурс]: - Электрон. дан. - М., [201-]. - Режим доступа: http://www.servplus.ru/trade/supermag/plus/supermag_functions/

7. Shark [Электронный ресурс]: - Электрон. дан. - М., [201-]. - Режим доступа: http://www.shark.ru/catalog/detail.php?ID=114

8. Принципы проектирования и разработки программного обеспечения. Учебный курс MCSD. М.: Русская редакция, 2000.

9. Липаев В.В Управление разработкой программных средств. Методы, стандарты, технология. - М.: Финансы и статистика, 2006.

10. Дейт К. Введение в системы баз данных/Пер. с англ. М.: Наука, 2003. 463 с.

11. Фуфаев Д.Э., Фуфаев Э.В. Базы данных. - М.: “Академия”, 2005. -320 с.

12. Гурвиц Г.А. Microsoft Access 2010. Разработка приложений на реальном примере. - Спб.: БХВ-Петербург, 2010. - 496 с.

13. Рубенкинг Нил Дж. Язык программирования Delphi для «чайников». Введение в Borland Delphi 2006 ??М.: Диалектика, 2007. - 336 с.

14. Вендров А.М. CASE?технологии. Современные методы и средства проектирования информационных систем. ??М.: Финансы и статистика, 2000.

15. Маклаков С. В. Создание информационных систем с AllFusion Modeling Suite. ??М.: Диалог-МИФИ, 2005.

16. Хотяшов Э.Н. Проектирование машинной обработки экономической информации. М.:Финансы и статистика, 2001.-246 с.

17. Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика = Database Systems: A Practical Approach to Design, Implementation, and Management. -- 3-е изд. -- М.: Вильямс, 2003. -- 1436 с.

18. Оскерко В.С., Пунчик З.В. Практикум по технологиям баз данных. - Мн.: «БГЭУ», 2004. - 170 с.

19. Соммервилл Иан. Инженерия программного обеспечения / Пер. с англ. ??6-е издание. ??М.: Вильямс, 2002. ??624 с.

20. Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д. Технология разработки программного обеспечения. ??М.: ИД «ФОРУМ»; ИНФРА-М, 2008. ??С. 400.

21. Грекул В.И., Денищенко Г.Н., Коровкина Н.Л. Проектирование информационных систем. ??М.: Интернет-университет информационных технологий ??ИНТУИТ.ру, 2005.

ПРИЛОЖЕНИЕ

ТЕКСТ МОДУЛЕЙ КЛИЕНТСКОГО ПРИЛОЖЕНИЯ

Модуль ufMain.pas

unit ufMain;

interface uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ActnList, Vcl.ActnMan, Vcl.ToolWin, Vcl.ActnCtrls,

Vcl.Grids, Vcl.DBGrids, Vcl.DBCtrls, Vcl.StdCtrls, Vcl.ImgList, Vcl.Menus, Vcl.ComCtrls, Vcl.DBActns, Vcl.PlatformDefaultStyleActnCtrls, Vcl.StdActns, Vcl.ExtCtrls, Vcl.DBClientActns, Data.DB;

type

TfMain = class(TForm) amMain: TActionManager; tbMain: TToolBar; aConnect: TAction; ToolButton3: TToolButton; ToolButton7: TToolButton;

WindowClose1: TWindowClose; WindowCascade1: TWindowCascade; WindowTileHorizontal1: TWindowTileHorizontal; WindowTileVertical1: TWindowTileVertical; WindowMinimizeAll1: TWindowMinimizeAll; WindowArrange1: TWindowArrange;

mmMain: TMainMenu; N1: TMenuItem; Close1: TMenuItem; Cascade1: TMenuItem;

ileHorizontally1: TMenuItem; ileVertically1: TMenuItem; MinimizeAll1: TMenuItem; Arrange1: TMenuItem; tiMain: TTrayIcon;

pmMain: TPopupMenu; aShowMainForm: TAction; N2: TMenuItem;

N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; aClose: TAction; N10: TMenuItem; N19: TMenuItem; N20: TMenuItem;

tbNavigator: TToolBar; ToolButton12: TToolButton; ToolButton15: TToolButton;

ToolButton2: TToolButton; ToolButton17: TToolButton; ToolButton18: TToolButton; ToolButton19: TToolButton; ToolButton1: TToolButton; ToolButton20: TToolButton; ToolButton21: TToolButton; ToolButton4: TToolButton; ToolButton22: TToolButton; aShowRefBooks: TAction; ToolButton8: TToolButton; ToolButton6: TToolButton; aShowUser: TAction; ToolButton11: TToolButton; ToolButton13: TToolButton; ToolButton14: TToolButton; sbMain: TStatusBar;

dsUI: TDataSource; N7: TMenuItem; N13: TMenuItem; N14: TMenuItem; N15: TMenuItem;

aShowClient: TAction; ToolButton9: TToolButton; ToolButton10: TToolButton; N8: TMenuItem;

amNavigator: TActionManager; DataSetFirst1: TDataSetFirst; DataSetPrior1: TDataSetPrior; DataSetNext1: TDataSetNext; DataSetLast1: TDataSetLast; DataSetInsert1: TDataSetInsert; DataSetDelete1: TDataSetDelete; DataSetEdit1: TDataSetEdit; DataSetPost1: TDataSetPost; DataSetCancel1: TDataSetCancel; DataSetRefresh1: TDataSetRefresh;

ClientDataSetApply1: TClientDataSetApply; N22: TMenuItem;

aShowRequest: TAction; aShowRointers: TAction; N33: TMenuItem; aShowSale: TAction; ToolButton5: TToolButton; ToolButton16: TToolButton; ToolButton23: TToolButton; aShowReceipt: TAction; aShowProduct: TAction; ToolButton24: TToolButton; ToolButton25: TToolButton; aShowProvider: TAction; ToolButton26: TToolButton; N9: TMenuItem;

N11: TMenuItem; N12: TMenuItem; N16: TMenuItem; N17: TMenuItem; N18: TMenuItem; N21: TMenuItem; N23: TMenuItem; N24: TMenuItem;

procedure aConnectExecute(Sender: TObject); procedure aShowRefBooksExecute(Sender: TObject); procedure aCloseExecute(Sender: TObject); procedure aShowMainFormExecute(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure tiMainClick(Sender: TObject);

procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormShow(Sender: TObject);

procedure aShowUserExecute(Sender: TObject); procedure dsUIDataChange(Sender: TObject; Field: TField); procedure aShowClientExecute(Sender: TObject); procedure aShowSaleExecute(Sender: TObject);

procedure aShowReceiptExecute(Sender: TObject); procedure aShowProductExecute(Sender: TObject); procedure aShowProviderExecute(Sender: TObject); private

{ Private declarations }

public

{ Public declarations }

//

procedure FormsClose;

procedure MaxForm (Form : TForm); end;

var

fMain: TfMain; implementation

{$R *.dfm}

uses udmData, ufLogin, ufRefBooks, ufUser, udmReport, ufClient, ufSale, ufReceipt, ufProduct, ufProvider;

procedure TfMain.aCloseExecute(Sender: TObject); begin

Application.Terminate; end;

procedure TfMain.aConnectExecute(Sender: TObject); begin

//

if (dmData.SQLConnection.Connected = true) then

begin

//

dmData.SQLConnection.Connected := false; aConnect.Caption := 'Вход'; aConnect.ImageIndex := 0;

end else begin

//

if (fLogin.ShowModal = mrOk) then begin

//

aConnect.Caption := 'Выход'; aConnect.ImageIndex := 1;

end; end;

end;

procedure TfMain.aShowReceiptExecute(Sender: TObject); begin

MaxForm(fReceipt); end;

procedure TfMain.aShowRefBooksExecute(Sender: TObject); begin

// MaxForm(fRefBooks);

end;

procedure TfMain.aShowSaleExecute(Sender: TObject); begin

MaxForm(fSale); end;

procedure TfMain.aShowUserExecute(Sender: TObject); begin

MaxForm(fUser); end;

procedure TfMain.dsUIDataChange(Sender: TObject; Field: TField); begin

//

sbMain.Panels[0].Text := dmData.cdsUserInfoТип_пользователя.Value; sbMain.Panels[1].Text := dmData.cdsUserInfoФамилия.Value + ' ' +

dmData.cdsUserInfoИмя.Value + ' ' + dmData.cdsUserInfoОтчество.Value;

end;

procedure TfMain.aShowClientExecute(Sender: TObject); begin

MaxForm(fClient); end;

procedure TfMain.aShowMainFormExecute(Sender: TObject); begin

// Show;

SetForegroundWindow(Self.Handle); end;

procedure TfMain.aShowProductExecute(Sender: TObject); begin

// MaxForm(fProduct);

end;

procedure TfMain.aShowProviderExecute(Sender: TObject); begin

MaxForm(fProvider); end;

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

//

CanClose := false; Visible := false;

end;

procedure TfMain.FormKeyPress(Sender: TObject; var Key: Char); begin

if Key = #27 then Hide; end;

procedure TfMain.FormsClose; begin

end;

procedure TfMain.FormShow(Sender: TObject); begin

// WindowMinimizeAll1.Execute;

end;

procedure TfMain.MaxForm (Form : TForm); begin

// WindowMinimizeAll1.Execute;

Form.WindowState := wsMaximized; Form.Show;

end;

procedure TfMain.tiMainClick(Sender: TObject); begin

// aShowMainForm.Execute;

end; end.

Модуль uCommon.pas

unit uCommon; interface

uses DB, ADODB, DBGrids, Windows, SysUtils, ShellAPI, Forms, Variants, Dialogs, DBClient;

procedure ClearMemory (Obj : TObject);

procedure DataSetLocateKey (DS : TDataSet; KeyName : Variant; KeyValue : Variant); procedure DataSetReload (DS : TDataSet);

procedure dbgTitleClick (Column: TColumn); function GetTempDir : WideString; stdcall;

function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle; implementation

procedure ClearMemory (Obj : TObject); begin

//

if (Obj <> nil) then Obj.Free; end;

procedure DataSetLocateKey (DS : TDataSet; KeyName : Variant; KeyValue : Variant); begin

//

if (DS.Locate(KeyName, KeyValue, []) = false) then

raise Exception.Create('Не удалось найти строку с сохраненным значением ключа');

end;

procedure DataSetReload (DS : TDataSet); var

//

KeyName, KeyValue : Variant; I : Integer;

F : TField; begin

//

KeyName := ''; KeyValue := NULL;

for I := 0 to DS.FieldCount - 1 do begin

//

F := DS.Fields.FieldByNumber (I); if (F is TAutoIncField) then

begin

//

KeyName := F.FieldName; KeyValue := F.Value;

end;

end; DS.Close; DS.Open;

if (KeyName <> '') then begin

if (DS.Locate(KeyName, KeyValue, []) = false) then

raise Exception.Create('Не удалось найти строку с сохраненным значением ключа');

end; end;

procedure dbgTitleClick (Column: TColumn); var

//

T : TClientDataSet; SortType : TIndexOptions;

procedure ClearAllTags (); var

I : Integer;

C : TDBGridColumns; begin

//

C := (Column.Grid as TDBGrid).Columns; for I := 0 to C.Count - 1 do

begin

//

if (C[I].Field.FieldName <> Column.Field.FieldName) then begin

//

C[I].Field.Tag := 0;

C[I].Title.Caption := C[I].Field.DisplayName; end

else begin

//

end; end;

end;

begin

//

T := Column.Field.DataSet as TClientDataSet; Column.Field.Tag := Column.Field.Tag + 1; ClearAllTags ();

if (Column.Field.Tag = 1) then begin

SortType := [];

Column.Title.Caption := Column.Field.DisplayName + ' (по возр.)'; end;

if (Column.Field.Tag = 2) then begin

SortType := [ixDescending];

Column.Title.Caption := Column.Field.DisplayName + ' (по убыв.)'; end;

if (Column.Field.FieldKind = fkData) then begin

// T.IndexDefs.Clear; try

T.DeleteIndex('IX'); except

end;

T.AddIndex ('IX', Column.Field.FieldName, SortType + [ixCaseInsensitive]); T.IndexName := 'IX';

end;

if (Column.Field.FieldKind = fkLookup) then begin

// T.IndexDefs.Clear; try

T.DeleteIndex('IX'); except

end;

T.AddIndex ('IX', Column.Field.KeyFields, SortType + [ixCaseInsensitive]); T.IndexName := 'IX';

end;

if (Column.Field.Tag >= 2) then Column.Field.Tag := 0;

end;

function GetTempDir : WideString; stdcall; var

Buffer : array[0..1023] of Char; begin

//

GetTempPath (1024 - 1, &Buffer); SetString(Result, Buffer, Length(Buffer)); Result := Trim (Result);

end;

function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle;

var

zFileName, zParams, zDir: array[0..79] of Char; begin

Result := ShellExecute(Application.MainForm.Handle, nil, StrPCopy(zFileName, FileName), StrPCopy(zParams, Params), StrPCopy(zDir, DefaultDir), ShowCmd);

end;

end.

Модуль udmData.pas

unit udmData; interface

uses

System.SysUtils, System.Classes, Data.DBXDataSnap, IndyPeerImpl, Data.DBXCommon, Datasnap.DBClient, Datasnap.DSConnect, Data.DB, Data.SqlExpr, uRemoteMethods, Vcl.ImgList, Vcl.Controls, RpCon, RpConDS, RpBase, RpSystem, RpDefine, RpRave, Dialogs, IniFiles, Forms, Vcl.DBClientActns, Vcl.DBActns, Vcl.ActnList, Vcl.PlatformDefaultStyleActnCtrls, Vcl.ActnMan, Vcl.AppEvnts;

type

TdmData = class(TDataModule) SQLConnection: TSQLConnection;

DSProviderConnection: TDSProviderConnection; cdsUserInfo: TClientDataSet;

dsUserInfo: TDataSource; ilMain: TImageList; cdsFunction: TClientDataSet; dsFunction: TDataSource; cdsUser: TClientDataSet; dsUser: TDataSource; cdsUserType: TClientDataSet; dsUserType: TDataSource;

cdsUserTypeКод: TAutoIncField; cdsFunctionКод: TAutoIncField; cdsUserКод: TAutoIncField; cdsUserДата_рождения: TDateTimeField; cdsUserКод_Должность: TIntegerField;

cdsUserКод_Тип_пользователя: TIntegerField; cdsUserБлокировать_доступ: TBooleanField; cdsUserДата_регистрации: TDateTimeField; cdsUserТип_пользователя: TStringField; ilDataSet32E_1: TImageList;

ilDataSet32D_1: TImageList; cdsUserПользователь: TStringField; ilDataSet32E_2: TImageList; ilDataSet32D_2: TImageList;

cdsSex: TClientDataSet;

dsSex: TDataSource; cdsUserКод_Пол: TIntegerField; cdsUserПол: TStringField; amNavigator: TActionManager; DataSetFirst1: TDataSetFirst; DataSetPrior1: TDataSetPrior; DataSetNext1: TDataSetNext; DataSetLast1: TDataSetLast; DataSetInsert1: TDataSetInsert; DataSetDelete1: TDataSetDelete; DataSetEdit1: TDataSetEdit; DataSetPost1: TDataSetPost; DataSetCancel1: TDataSetCancel; DataSetRefresh1: TDataSetRefresh;

ClientDataSetApply1: TClientDataSetApply; aeMain: TApplicationEvents;

cdsDates: TClientDataSet; dsDates: TDataSource; cdsUserДолжность: TStringField; cdsUserInfoКод: TIntegerField;

cdsUserInfoФамилия: TStringField; cdsUserInfoИмя: TStringField; cdsUserInfoОтчество: TStringField; cdsUserInfoДата_рождения: TDateTimeField; cdsUserInfoКод_Должность: TIntegerField; cdsUserInfoДолжность: TStringField; cdsUserInfoТелефон: TStringField; cdsUserInfoКод_Тип_пользователя: TIntegerField; cdsUserInfoТип_пользователя: TStringField; cdsUserInfoЛогин: TStringField; cdsUserInfoБлокировать_доступ: TBooleanField; cdsUserInfoДата_регистрации: TDateTimeField; cdsUserInfoКод_Пол: TIntegerField; cdsUserInfoПол: TStringField; cdsFunctionНазвание: TStringField; cdsUserTypeНазвание: TStringField; cdsUserФамилия: TStringField;

cdsUserИмя: TStringField; cdsUserОтчество: TStringField; cdsUserТелефон: TStringField; cdsUserЛогин: TStringField; cdsUserПароль: TStringField; cdsUserEmail: TStringField; cdsClient: TClientDataSet; dsClient: TDataSource;

cdsOrganizationInfo: TClientDataSet; dsOrganizationInfo: TDataSource; cdsProduct: TClientDataSet; dsProduct: TDataSource; cdsProductPackType: TClientDataSet; dsProductPackType: TDataSource; cdsProductType: TClientDataSet; dsProductType: TDataSource;

cdsProvider: TClientDataSet; dsProvider: TDataSource; cdsReceipt: TClientDataSet; dsReceipt: TDataSource; cdsReceiptList: TClientDataSet; dsReceiptList: TDataSource; cdsSale: TClientDataSet; dsSale: TDataSource; cdsSaleList: TClientDataSet; dsSaleList: TDataSource; cdsClientКод: TAutoIncField;

cdsClientНазвание: TStringField; cdsClientТелефон: TStringField; cdsClientАдрес: TStringField; cdsClientРеквизиты_счета: TStringField; cdsProductКод: TIntegerField; cdsProductАртикул: TStringField; cdsProductНазвание: TStringField; cdsProductКод_Тип_товара: TIntegerField; cdsProductКод_Тип_упаковки: TIntegerField; cdsProductКоличество: TFloatField; cdsProductСтоимость: TFloatField; cdsReceiptКод: TLargeintField; cdsReceiptДата: TDateTimeField; cdsReceiptКод_Поставщик: TIntegerField; cdsReceiptListКод_Приход: TLargeintField; cdsReceiptListКод_Товар: TIntegerField; cdsReceiptListКоличество: TFloatField; cdsReceiptListСтоимость: TFloatField; cdsSaleКод: TLargeintField; cdsSaleКод_Клиент: TIntegerField; cdsSaleКод_Пользователь: TIntegerField; cdsSaleДата: TDateTimeField;

cdsSaleКлиент: TStringField; cdsSaleПользователь: TStringField; cdsReceiptПоставщик: TStringField; cdsReceiptКод_Пользователь: TIntegerField; cdsReceiptПользователь: TStringField; cdsSaleListКод_Продажа: TLargeintField; cdsSaleListКод_Товар: TIntegerField; cdsSaleListКоличество: TFloatField; cdsSaleListСтоимость: TFloatField; cdsProductТовар: TStringField; cdsSaleListТовар: TStringField; cdsReceiptListТовар: TStringField; cdsProductТип_товара: TStringField; cdsProductТип_упаковки: TStringField; cdsStatSale: TClientDataSet;

dsStatSale: TDataSource; cdsStatFillStorage: TClientDataSet; dsStatFillStorage: TDataSource; cdsSaleListСтоимость_ед: TFloatField; cdsSaleListТип_упаковки: TStringField;

cdsSaleListСумма: TFloatField; cdsSaleListАртикул: TStringField; cdsSaleListТип_товара: TStringField; cdsSysUnit: TClientDataSet; dsSysUnit: TDataSource;

cdsProductКод_Единица_измерения: TIntegerField; cdsProductЕдиница_измерения: TStringField; cdsSaleListЕдиница_измерения: TStringField; cdsSaleInfo: TClientDataSet;

dsSaleInfo: TDataSource; cdsClientОКПО: TStringField; cdsProviderКод: TAutoIncField; cdsProviderНазвание: TStringField; cdsProviderТелефон: TStringField; cdsProviderАдрес: TStringField;

cdsProviderРеквизиты_счета: TStringField; cdsProviderОКПО: TStringField; cdsOrganizationInfoКод: TIntegerField; cdsOrganizationInfoНазвание: TStringField; cdsOrganizationInfoАдрес: TStringField; cdsOrganizationInfoТелефон: TStringField; cdsOrganizationInfoБанковский_счет: TStringField; cdsOrganizationInfoИНН: TStringField; cdsOrganizationInfoКПП: TStringField; cdsOrganizationInfoЛоготип: TBlobField; cdsOrganizationInfoОКПО: TStringField; cdsProductМасса: TFloatField;

cdsSaleListМасса: TFloatField; cdsSafeUser: TClientDataSet; dsSafeUser: TDataSource; cdsSafeUserКод: TIntegerField; cdsSafeUserФамилия: TStringField; cdsSafeUserИмя: TStringField; cdsSafeUserОтчество: TStringField;

cdsSafeUserДата_рождения: TDateTimeField; cdsSafeUserКод_Должность: TIntegerField; cdsSafeUserДолжность: TStringField; cdsSafeUserТелефон: TStringField; cdsSafeUserКод_Тип_пользователя: TIntegerField; cdsSafeUserТип_пользователя: TStringField; cdsSafeUserЛогин: TStringField; cdsSafeUserБлокировать_доступ: TBooleanField; cdsSafeUserДата_регистрации: TDateTimeField; cdsSafeUserКод_Пол: TIntegerField; cdsSafeUserПол: TStringField; cdsSafeUserПользователь: TStringField;

procedure SQLConnectionAfterConnect(Sender: TObject); procedure SQLConnectionBeforeDisconnect(Sender: TObject); procedure cdsUserAfterEdit(DataSet: TDataSet);

procedure cdsUserAfterInsert(DataSet: TDataSet); procedure cdsUserCalcFields(DataSet: TDataSet);

procedure DataModuleCreate(Sender: TObject); procedure cdsCommonAfterCancel(DataSet: TDataSet); procedure cdsCommonAfterDelete(DataSet: TDataSet); procedure cdsCommonAfterPost(DataSet: TDataSet);

procedure cdsCommonReconcileError(DataSet: TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind;

var Action: TReconcileAction);

procedure cdsCommonBeforeDelete(DataSet: TDataSet); procedure aeMainException(Sender: TObject; E: Exception); procedure cdsClientAfterEdit(DataSet: TDataSet); procedure cdsClientAfterInsert(DataSet: TDataSet);

procedure cdsRequestServicesBeforeInsert(DataSet: TDataSet); procedure cdsOrganizationInfoAfterEdit(DataSet: TDataSet); procedure cdsOrganizationInfoAfterInsert(DataSet: TDataSet); procedure cdsSaleListAfterInsert(DataSet: TDataSet); procedure cdsSaleListAfterEdit(DataSet: TDataSet);

procedure cdsProductCalcFields(DataSet: TDataSet); procedure cdsProductAfterEdit(DataSet: TDataSet); procedure cdsProductAfterInsert(DataSet: TDataSet); procedure cdsProviderAfterEdit(DataSet: TDataSet); procedure cdsProviderAfterInsert(DataSet: TDataSet); procedure cdsReceiptListAfterEdit(DataSet: TDataSet); procedure cdsReceiptListAfterInsert(DataSet: TDataSet); procedure cdsSaleListCalcFields(DataSet: TDataSet); procedure cdsSafeUserCalcFields(DataSet: TDataSet); private

{ Private declarations } FSettings : TIniFile;

FRemoteMethods : TdssmRemoteDataClient; procedure ChildDataSetTest (DataSet: TClientDataSet);

public

{ Public declarations }

procedure ActiveCDS (Value : Boolean); procedure TestActiveConnection; property Settings : TIniFile read FSettings;

property RemoteMethods : TdssmRemoteDataClient read FRemoteMethods; end;

const c_Settings_File : String = 'Settings.ini'; c_Settings_Section_Connection : String = 'Connection';

var

dmData: TdmData;

implementation

{$R *.dfm}

uses ufMain, ufUserEditor, ufClientEditor, ufOrganizationInfoEditor, ufSaleListEditor, ufSaleEditor, ufProductEditor, ufProviderEditor, ufReceiptListEditor;

procedure TdmData.TestActiveConnection; begin

//

if (SQLConnection.Connected = false) then begin

//

raise Exception.Create('Необходимо выполнить вход!'); end;

end;

procedure TdmData.ChildDataSetTest (DataSet: TClientDataSet); var

//

ParentDataSet : TDataSet; begin

//

ParentDataSet := DataSet.MasterSource.DataSet;

if (ParentDataSet.RecordCount = 0) or (ParentDataSet.State = dsInsert) then begin

//

raise Exception.Create('Сначала необходимо добавить запись в родительский набор данных'); end;

end;

procedure TdmData.DataModuleCreate(Sender: TObject); begin

//

FSettings := TIniFile.Create (ExtractFilePath (Application.ExeName) + '\' + c_Settings_File); end;

procedure TdmData.aeMainException(Sender: TObject; E: Exception); begin

//

MessageDlg(E.Message, mtInformation, [mbOK], 0); end;

procedure TdmData.ActiveCDS (Value : Boolean); var

//

I : Integer; S : String;

cds : TClientDataSet; begin

//

S := '';

for I := 0 to Self.ComponentCount - 1 do begin

//

if Self.Components[I] is TClientDataSet then begin

//

cds := (Self.Components[I] as TClientDataSet); try

//

cds.Active := Value; except

on E : Exception do begin

//

if (S <> '') then S := S + #13;

S := S + cds.Name + ' (' + E.Message + ')'; end;

end; end;

end;

if (Value = true) and (S <> '') then begin

MessageDlg('У вас нет доступа к следующим наборам данных: ' + #13 + S, mtInformation, [mbOk], 0);

end; end;

procedure TdmData.cdsClientAfterEdit(DataSet: TDataSet); begin

fClientEditor.ShowModal; end;

procedure TdmData.cdsClientAfterInsert(DataSet: TDataSet); begin

fClientEditor.ShowModal; end;

procedure TdmData.cdsCommonAfterCancel(DataSet: TDataSet); var

//

cds : TClientDataSet; begin

//

cds := DataSet as TClientDataSet; cds.CancelUpdates;

end;

procedure TdmData.cdsCommonAfterDelete(DataSet: TDataSet); var

//

cds : TClientDataSet;

cds := DataSet as TClientDataSet; if cds.ApplyUpdates(0) = 0 then begin

cds.Refresh; end

else begin

// cds.CancelUpdates;

end; end;

procedure TdmData.cdsCommonAfterPost(DataSet: TDataSet); var

//

cds : TClientDataSet; begin

cds := DataSet as TClientDataSet; try

if cds.ApplyUpdates(0) = 0 then begin

cds.Refresh; end

else begin

// try

cds.Edit; except end; Abort;

end; except

try

cds.Edit; except end;

raise; end;

end;

procedure TdmData.cdsCommonReconcileError(DataSet: TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction); begin

//

raise Exception.Create(E.Message); end;

procedure TdmData.cdsOrganizationInfoAfterEdit(DataSet: TDataSet); begin

fOrganizationInfoEditor.ShowModal; end;

procedure TdmData.cdsOrganizationInfoAfterInsert(DataSet: TDataSet);

fOrganizationInfoEditor.ShowModal; end;

procedure TdmData.cdsProductAfterEdit(DataSet: TDataSet); begin

// fProductEditor.ShowModal;

end;

procedure TdmData.cdsProductAfterInsert(DataSet: TDataSet); begin

fProductEditor.ShowModal; end;

procedure TdmData.cdsProductCalcFields(DataSet: TDataSet); begin

//

dmData.cdsProductТовар.Value := dmData.cdsProductНазвание.Value + ' (Цена = ' + dmData.cdsProductСтоимость.AsString + ')';

end;

procedure TdmData.cdsProviderAfterEdit(DataSet: TDataSet); begin

// fProviderEditor.ShowModal;

end;

procedure TdmData.cdsProviderAfterInsert(DataSet: TDataSet); begin

fProviderEditor.ShowModal; end;

procedure TdmData.cdsReceiptListAfterEdit(DataSet: TDataSet); begin

// fReceiptListEditor.ShowModal;

end;

procedure TdmData.cdsReceiptListAfterInsert(DataSet: TDataSet); begin

//

cdsReceiptListКод_Приход.Value := 0; fReceiptListEditor.ShowModal;

end;

procedure TdmData.cdsRequestServicesBeforeInsert(DataSet: TDataSet); begin

//

ChildDataSetTest(DataSet as TClientDataSet); end;

procedure TdmData.cdsSafeUserCalcFields(DataSet: TDataSet); begin

//

cdsSafeUserПользователь.Value := cdsSafeUserФамилия.Value + ' ' + cdsSafeUserИмя.Value + ' ' + cdsSafeUserОтчество.Value;

end;

procedure TdmData.cdsSaleListAfterEdit(DataSet: TDataSet); begin

// fSaleListEditor.ShowModal;

end;

procedure TdmData.cdsSaleListAfterInsert(DataSet: TDataSet); begin

//

cdsSaleListКод_Продажа.Value := 0;

cdsSaleListСтоимость.Value := 0; fSaleListEditor.ShowModal;

end;

procedure TdmData.cdsSaleListCalcFields(DataSet: TDataSet); begin

//

cdsSaleListСумма.Value := cdsSaleListКоличество.Value * cdsSaleListСтоимость_ед.Value; end;

procedure TdmData.cdsCommonBeforeDelete(DataSet: TDataSet); begin

//

if (MessageDlg('Подтвердите удаление?', mtConfirmation, [mbOK, mbCancel], 0) <> mrOk) then begin

// Abort;

end; end;

procedure TdmData.cdsUserAfterEdit(DataSet: TDataSet); begin

fUserEditor.ShowModal; end;

procedure TdmData.cdsUserAfterInsert(DataSet: TDataSet); begin

fUserEditor.ShowModal; end;

procedure TdmData.cdsUserCalcFields(DataSet: TDataSet); begin

//

cdsUserПользователь.Value := cdsUserФамилия.Value + ' ' + cdsUserИмя.Value + ' ' + cdsUserОтчество.Value;

end;

procedure TdmData.SQLConnectionAfterConnect(Sender: TObject); begin

FRemoteMethods := TdssmRemoteDataClient.Create(SQLConnection.DBXConnection); ActiveCDS (True);

end;

procedure TdmData.SQLConnectionBeforeDisconnect(Sender: TObject); begin

// try

ActiveCDS (False); RemoteMethods.Free;

except end;

end; end.

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


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

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

    контрольная работа [458,0 K], добавлен 05.01.2013

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

    курсовая работа [2,9 M], добавлен 24.03.2023

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

    курсовая работа [3,0 M], добавлен 22.12.2014

  • Базы данных и системы управления ими. Разработка базы данных "Торговая организация", позволяющей вести учет имеющегося товара, покупателей и поставки товара. Проектирование таблиц, запросов и форм. Создание отчетов. Обеспечение доступа к информации.

    курсовая работа [1,2 M], добавлен 21.11.2014

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

    дипломная работа [645,3 K], добавлен 21.11.2010

  • Обзор и сравнительная характеристика программного обеспечения для создания СУБД. Принципы организации данных. Основные возможности MS Access. Разработка структуры и реализация средствами SQL базы данных для учета заказов, наличия и продажи автозапчастей.

    курсовая работа [2,5 M], добавлен 27.05.2013

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

    курсовая работа [700,6 K], добавлен 26.01.2010

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

    курсовая работа [2,1 M], добавлен 16.02.2015

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

    дипломная работа [3,1 M], добавлен 13.07.2011

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

    дипломная работа [2,6 M], добавлен 10.10.2015

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