3. Проектирование базы данных по учету затрат в Delphi.
Для подключения базы данных в Delphiиспользуется компоненты IBDatabase, IBTransaction, IBUpdateSQL, IBQuery, DataSource.
.
Для активации компонента IBDatabase и изменяются его свойства как показано в таблице 1.
Таблица 1.
АктивациякомпонентаIBDatabase, IBTransaction,IBQuery, DataSource.
Название компонента | Название свойств | |||||
IBDatabase | DatabaseName | Connected | Defaul Transaction | |||
C:\ZATRAT.GDB Указать путь из окна обзора. | True указать имя и пароль пользователя, которые указывались при регистрации. | IBTransaction1 | ||||
IBTransaction | DefaultDataBase | Active | ||||
IBDatabase | True | |||||
IBQuery | Database | Transaction | UpdateObject | Active | ||
IBDatabase | IBTransaction | IBUpdate | True | |||
DataSource1 | DataSet | |||||
IBQuery |
Для активации компонента IBQuery необходимо также ввести SQL запрос в него, а для компонента IBUpdateSQL сгенерировать SQL запрос. Так как база данных состоит из нескольких таблиц, то используется несколько компонентов IBUpdateSQL, IBQuery, DataSource, которые настраиваются отдельно на каждую таблицу. Они служат для связи с отдельной таблицей базы данных.
Для отображения данных используется компонент DBGrid. Он также используется отдельно для каждой таблицы базы данных.
Главной формой для базы данных является форма 1 (рис.4).
Рисунок 4. Внешний вид формы 1.
На этой форме располагаются компоненты BitBtn, которые служат для навигации по таблице, компонент MainMenu, который используется для переключения между другими формами и компоненты Button – используются для управления базой данных (добавление, редактирование, удаление, сохранения данных). Компонент PageControl используется для переключения между таблицей поступление и таблицей использование. Также при нажатии кнопки «Добавить» происходит открытие формы 3 (рис. 5), которая служит для внесения данных в базу данных поступление. На форме 3 для внесения данных служат компоненты DBEdit.
Рисунок 5. Внешний формы 3 «Поступление».
Для внесения данных в таблицу использование служит форма 4, которая имеет аналогичный вид.
При нажатии на форме 1 в строке меню пункта «Фильтр» открывается список, где можно выбрать «Фильтр поступления» и «Фильтр использования». При нажатии на один из этих пунктов открывается соответствующая форма 5 или 6.
При нажатии на подпункт «Фильтр поступления» обрабатывается следующая процедура:
Form5.Show;
Form1.Hide;
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.Active:=true;
Где первая строка говорит о открытии формы 5 «Фильтр поступления», при этом форма один не закрывается, а скрывается. Это прописано во второй строке. В третьей и четвертой строке активность компонента IBQueryFPostuplenie сначала выключается, а потом включается – это служит для обновления данных, которые были недавно внесены в базу данных.
Форма 5 служит для фильтрации данных из базы данных. Внешний вид формы 5 изображен на рисунке 6.
Рисунок 6. Пример формы 5.
На этой форме для выбора критериев фильтрации данных используются компоненты CheckBox, то есть переключатели, которые расположены на компоненте GroupBox1. При активации CheckBox1 (надпись «По дате») обрабатывается следующая процедура:
procedure TForm5.CheckBox1Click(Sender: TObject);
begin
If Form5.CheckBox1.Checked=true then
begin
Form5.GroupBox2.Visible:=true;
Form5.Button1.Visible:=true;
end;
If Form5.CheckBox1.Checked=false then
begin
Form5.GroupBox2.Visible:=false;
if Form5.CheckBox2.Checked=false then
begin
Form5.Button1.Visible:=false;
end;
end;
В этой процедуре происходит изменение свойства Visible компонентов GroupBox2 и Button1 с False на True, то есть открывается окно для ввода критериев фильтрации. Также при деактивизации этого компонента происходит обратная процедура.
Аналогичная процедура происходит и при активизации и деактивизации компонента CheckBox2:
If Form5.CheckBox2.Checked=true then
begin
Form5.GroupBox3.Visible:=true;
Form5.Button1.Visible:=true;
end;
If Form5.CheckBox2.Checked=false then
begin
Form5.GroupBox3.Visible:=false;
If Form5.CheckBox1.Checked=false then
begin
Form5.Button1.Visible:=false;
end;
end;
При нажатии на кнопку Button1 («Фильтровать») обрабатывается следующая процедура:
If Form5.CheckBox1.Checked=true Then
begin
If Form5.CheckBox2.Checked=false then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PDATA>='''+Form5.Edit1.Text+''' and PDATA<='''+Form5.Edit2.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
If Form5.CheckBox1.Checked=true then
begin
If Form5.CheckBox2.Checked=true then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PDATA>='''+Form5.Edit1.Text+''' and PDATA<='''+Form5.Edit2.Text+''' and PNAZVANIE='''+Form5.Edit3.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
If Form5.CheckBox1.Checked=false then
begin
If form5.CheckBox2.Checked=true then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PNAZVANIE='''+Form5.Edit3.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
В ней происходит проверка, по каким критериям проводить фильтрацию из базы данных. При нахождении выбранного варианта происходит формирование динамического запроса к базе данных, который содержит информацию о критерии фильтрации и выводит результат запроса в компонент DBEdit.
При нажатии в строке меню пункта «Отчет» происходит открытие списка, где выбирается вид отчета: простой отчет или HTML отчет. Для создания простого отчета используются компоненты RvProject и RvDataSetConnection. Компонент RvProject используется для связи с бланком отчета, а компонент RvDataSetConnection для связи с базой данных. При нажатии на подпункт «Отчет» происходит формирование простого отчета, который можно просмотреть, распечатать или сохранить в файл. Для формирования HTML отчета используются компоненты PageProducer, DataSetPageProducer, DataSetTableProducer.
Аналогичный вид имеет форма 6 «Использование затрат». На ней добавлены только критерии фильтрации по виду затрат. Поэтому при нажатии на кнопку «Фильтровать» обрабатывается более сложная процедура:
If Form6.CheckBox1.Checked=true then
begin
If Form6.CheckBox2.Checked=false then
begin
if Form6.CheckBox3.Checked=false then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RDATA>='''+Form6.Edit1.Text+''' and RDATA<='''+Form6.Edit2.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
If Form6.CheckBox1.Checked=true then
begin
If Form6.CheckBox2.Checked=true then
begin
if Form6.CheckBox3.Checked=false then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RDATA>='''+Form6.Edit1.Text+''' and RDATA<='''+Form6.Edit2.Text+''' and RNAZVANIE='''+Form6.Edit3.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
If Form6.CheckBox1.Checked=true then
begin
If Form6.CheckBox2.Checked=true then
begin
if Form6.CheckBox3.Checked=true then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RDATA>='''+Form6.Edit1.Text+''' and RDATA<='''+Form6.Edit2.Text+''' and RNAZVANIE='''+Form6.Edit3.Text+''' and RVIDZATRAT='''+Form6.Edit4.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
If Form6.CheckBox1.Checked=false then
begin
If Form6.CheckBox2.Checked=true then
begin
if Form6.CheckBox3.Checked=false then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RNAZVANIE='''+Form6.Edit3.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
If Form6.CheckBox1.Checked=false then
begin
If Form6.CheckBox2.Checked=true then
begin
if Form6.CheckBox3.Checked=true then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RNAZVANIE='''+Form6.Edit3.Text+''' and RVIDZATRAT='''+Form6.Edit4.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
If Form6.CheckBox1.Checked=false then
begin
If Form6.CheckBox2.Checked=false then
begin
if Form6.CheckBox3.Checked=true then
Begin
DataModule2.IBQueryFRashod.Active:=false;
DataModule2.IBQueryFRashod.SQL.Clear;
DataModule2.IBQueryFRashod.SQL.Add('select RNOM, RNAZVANIE, RVIDZATRAT, RSUMA, RDATA from RASHOD where RVIDZATRAT='''+Form6.Edit4.Text+'''');
DataModule2.IBQueryFRashod.Active:=True;
end;
end;
end;
Форма 7 и форма 8 имеют подобный интерфейс с формой 5 и формой 6 соответственно. Разница состоит в том, что при выборе данных происходит суммирование сумм и одинаковые записи не повторяются. При нажатии на кнопку «Фильтровать» происходит выбор данных. В форме 7 критерии выбора данных происходят также как и в форме 5, различие состоит только в структуре SQL запроса к базе данных:
If Form5.CheckBox1.Checked=true Then
begin
If Form5.CheckBox2.Checked=false then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PDATA>='''+Form5.Edit1.Text+''' and PDATA<='''+Form5.Edit2.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
If Form5.CheckBox1.Checked=true then
begin
If Form5.CheckBox2.Checked=true then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PDATA>='''+Form5.Edit1.Text+''' and PDATA<='''+Form5.Edit2.Text+''' and PNAZVANIE='''+Form5.Edit3.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
If Form5.CheckBox1.Checked=false then
begin
If form5.CheckBox2.Checked=true then
begin
DataModule2.IBQueryFPostuplenie.Active:=false;
DataModule2.IBQueryFPostuplenie.SQL.Clear;
DataModule2.IBQueryFPostuplenie.SQL.add('select PNOM, PNAZVANIE, PSUMA, PDATA from POSNUPLENIE where PNAZVANIE='''+Form5.Edit3.Text+'''');
DataModule2.IBQueryFPostuplenie.Active:=true;
end;
end;
Вывод
В этой курсовой работе создана база данных, которая позволяет учитывать затраты в процессе производства.
Цель деятельности любого предприятия является повышение прибыли. Увеличение прибыли возможно двумя путями – увеличение доли прибыли в цене реализованной продукции или увеличение объема выпускаемой продукции и уменьшение затрат.
Данная программа позволяет руководству предприятия видеть все затраты предприятия и помогать принимать решения для уменьшения затрат.