Дипломная работа: Автоматизация учета рабочего времени и расчета заработной платы на предприятии ОАО "Пелла"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
92
implementation
{$R *.dfm}
uses datamodule;
procedure TForm_zapros1.Button1Click(Sender: TObject);
var E,myRange, Sheet : variant;
buf_zapros : string; i,j : integer;
begin
//создаю айл Excle
E := CreateOleObject('Excel.Application'); E.WorkBooks.open(GetCurrentDir+'\шаблоны\tabel.xlsx');
E.Visible := True;//включаю отображени программы Excel
Sheet:=E.Sheets.Item[1];
E.Cells[1,2] := 'Табель учета рабочего времени и зарплаты за период с
'+datetostr(form_zapros1.MonthCalendar_begin.Date)
+' до '+ datetostr(form_zapros1.MonthCalendar_end.Date);
for i := 0 to form_zapros1.StringGrid_time.RowCount do
for j := 0 to form_zapros1.StringGrid_time.ColCount do
E.Cells[i+1+2,j+1] := form_zapros1.StringGrid_time.Cells[j,i];
end;
procedure TForm_zapros1.DBGrid_otdelCellClick(Column: TColumn);
begin view_time; end;
procedure TForm_zapros1.DBGrid_zavodCellClick(Column: TColumn);
begin view_otdel;end;
procedure TForm_zapros1.FormCreate(Sender: TObject);
begin
form_zapros1.MonthCalendar_begin.Date := IncMonth(Now(),-1);
form_zapros1.MonthCalendar_end.Date := Now();end;
procedure TForm_zapros1.FormShow(Sender: TObject);
begin view_otdel; view_time; end;
procedure TForm_zapros1.MonthCalendar_beginClick(Sender: TObject);
begin view_time;end;
procedure TForm_zapros1.MonthCalendar_endClick(Sender: TObject);
begin view_time;end;
procedure TForm_zapros1.view_time;
var buf_Zapros : string; buf_kav : string;
i,j : integer;
myYear, myMonth, myDay : Word; date_time_begin,date_time_end : string;
kolvo_hours1,zarplata : real;
begin
buf_kav := ''''; //получаю дату
DecodeDate(form_zapros1.MonthCalendar_begin.Date, myYear, myMonth, myDay);
93
date_time_begin := buf_kav+inttostr(myYear)+'-'+inttostr(myMonth)+'-'+inttostr(myDay)+buf_kav;//YYYY-
MM-DD
DecodeDate(form_zapros1.MonthCalendar_end.Date, myYear, myMonth, myDay);
date_time_end := buf_kav+inttostr(myYear)+'-'+inttostr(myMonth)+'-'+inttostr(myDay)+buf_kav;//YYYY-MM-
DD
form_zapros1.StringGrid_time.ColWidths[0] := 90;//табельный номер
form_zapros1.StringGrid_time.ColWidths[1] := 250;//фио
form_zapros1.StringGrid_time.ColWidths[2] := 70;//время
buf_zapros := 'SELECT sotrudnik.tabel_nomer, CONCAT(sotrudnik.family,'+buf_kav+' '+buf_kav+',
sotrudnik.first_name,'+buf_kav+' '+buf_kav+', sotrudnik.second_name) AS FIO '
+' FROM otdel INNER JOIN (dolgnost INNER JOIN sotrudnik ON dolgnost.id_dolgnost =
sotrudnik.id_dolgnost) ON otdel.id_otdel = dolgnost.id_otdel '
+' WHERE otdel.id_otdel =
'+form_zapros1.DBGrid_otdel.DataSource.DataSet.FieldByName('id_otdel').AsString
+' ORDER BY sotrudnik.family, sotrudnik.first_name;';
datamodule1.Query_buf.Close; datamodule1.Query_buf.SQL.Clear;
datamodule1.Query_buf.SQL.Text := buf_Zapros; datamodule1.Query_buf.Open;
//вывожу количество строк
form_zapros1.StringGrid_time.RowCount := datamodule1.Query_buf.RecordCount+1;
//вывожу количество столбцов
form_zapros1.StringGrid_time.ColCount :=
DaysBetween(form_zapros1.MonthCalendar_end.Date,form_zapros1.MonthCalendar_begin.Date)+3+2;
//заполняю нулями
for i := 1 to form_zapros1.StringGrid_time.RowCount do
for j := 1 to form_zapros1.StringGrid_time.ColCount do
form_zapros1.StringGrid_time.Cells[j,i] := '0';
//заполняю столбцы
i:= 0; form_zapros1.StringGrid_time.Cells[0,i] := 'Табель_номер';
form_zapros1.StringGrid_time.Cells[1,i] := 'ФИО'; datamodule1.Query_buf.First;
i := 1;
//вывожу фио и табельный номер
while not datamodule1.Query_buf.eof do begin
form_zapros1.StringGrid_time.Cells[0,i] := datamodule1.Query_buf.FieldByName('tabel_nomer').AsString;
form_zapros1.StringGrid_time.Cells[1,i] := datamodule1.Query_buf.FieldByName('FIO').AsString;
i:= i+1; datamodule1.Query_buf.Next;
end;
//вывожу даты в загаловки
for i := 0 to form_zapros1.StringGrid_time.colCount-1 do
form_zapros1.StringGrid_time.Cells[i+2+2,0] := datetostr(incday(form_zapros1.MonthCalendar_begin.Date,i));
94
//вывожу время работы
for i := 1 to form_zapros1.StringGrid_time.RowCount do
for j := 2+2 to form_zapros1.StringGrid_time.ColCount do
begin //плучаю дату
// DecodeDate(incday(form_zapros1.MonthCalendar_begin.Date,j), myYear, myMonth, myDay);
DecodeDate(strtodate(form_zapros1.StringGrid_time.Cells[j,0]), myYear, myMonth, myDay);
date_time_begin := buf_kav+inttostr(myYear)+'-'+inttostr(myMonth)+'-'+inttostr(myDay)+buf_kav;//YYYY-
MM-DD
buf_Zapros :='SELECT kolvo_hours '
+' FROM work_time '
+' WHERE work_time.date_work = '+date_time_begin
+' AND work_time.tabel_nomer = '+buf_kav+form_zapros1.StringGrid_time.Cells[0,i]+buf_kav+';';
datamodule1.Query_buf.Close; datamodule1.Query_buf.SQL.Clear;
datamodule1.Query_buf.SQL.Text := buf_Zapros; datamodule1.Query_buf.Open;
if datamodule1.Query_buf.RecordCount <> 0 then
form_zapros1.StringGrid_time.Cells[j,i] := datamodule1.Query_buf.FieldByName('kolvo_hours').AsString;
end;
//вывожу кол-ыво часови зарплату
//вывжу названия столбцов
form_zapros1.StringGrid_time.Cells[2,0] := 'Сумма часов';
form_zapros1.StringGrid_time.Cells[3,0] := 'Зарплата';
for i := 1 to form_zapros1.StringGrid_time.RowCount-1 do
begin kolvo_hours1 := 0;
for j := 2+2 to form_zapros1.StringGrid_time.ColCount do begin
kolvo_hours1 := kolvo_hours1 +strtofloat(form_zapros1.StringGrid_time.Cells[j,i]); //подсчитываю кол-во
часов в строке
end;
form_zapros1.StringGrid_time.Cells[2,i] := floattostr(kolvo_hours1); //узнаю оклад
buf_zapros := 'SELECT dolgnost.oklad '
+' FROM dolgnost INNER JOIN sotrudnik ON dolgnost.id_dolgnost = sotrudnik.id_dolgnost '
+' WHERE sotrudnik.tabel_nomer ='+form_zapros1.StringGrid_time.Cells[0,i]+';';
datamodule1.Query_buf.Close; datamodule1.Query_buf.SQL.Clear;
datamodule1.Query_buf.SQL.Text := buf_Zapros; datamodule1.Query_buf.Open;
form_zapros1.StringGrid_time.Cells[3,i] :=
floattostr(kolvo_hours1*datamodule1.Query_buf.FieldByName('oklad').AsFloat); end;
end;
procedure TForm_zapros1.view_otdel;
var buf_zapros : string;
begin
95
if form_zapros1.DBGrid_zavod.DataSource.DataSet.RecordCount <> 0 then
begin buf_zapros := 'SELECT otdel.id_otdel, otdel.name_otdel as Название_отдела '
+' FROM otdel '
+' WHERE otdel.id_zavod =
'+form_zapros1.DBGrid_zavod.DataSource.DataSet.FieldByName('id_zavod').AsString
+' ORDER BY otdel.name_otdel;';
datamodule1.Query_otdel_view.Close; datamodule1.Query_otdel_view.SQL.Clear;
datamodule1.Query_otdel_view.SQL.Text := buf_zapros; datamodule1.Query_otdel_view.Open;
view_dbgrid_otdel; view_time; end;
end;
procedure TForm_zapros1.view_dbgrid_otdel;
begin
form_zapros1.DBGrid_otdel.Columns[0].Visible := False;
form_zapros1.DBGrid_otdel.Columns[1].Width := 280;
end;
end.
96
Приложение 2
Файл Form_sotrudnik.pas
unit Form__sotrudnik;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, Data.DB;
type
TForm_sotrudnik = class(TForm)
DBGrid_sotrudnik: TDBGrid;
Button_delete: TButton;
Button_update: TButton;
GroupBox1: TGroupBox;
Label_tabel: TLabel;
Edit_tabel: TEdit;
Edit_family: TEdit;
Edit_name: TEdit;
Edit_secondname: TEdit;
Edit_phone: TEdit;
DBGrid_dolgnost: TDBGrid;
GroupBox_login: TGroupBox;
Label_login: TLabel;
Edit_login: TEdit;
Edit_password: TEdit;
DBGrid_dostup: TDBGrid;
Button_add: TButton;
DBGrid_otdel: TDBGrid;
CheckBox_login: TCheckBox;
DBGrid_zavod: TDBGrid;
Label17: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button_deleteClick(Sender: TObject);
procedure Button_updateClick(Sender: TObject);
procedure Button_addClick(Sender: TObject);
procedure clear_label;
Источник: https://baza.diplomsite.ru/previewfile/2418