Дипломная работа: Автоматизация расчета заработной платы отдела технического сопровождения в ООО «DataPro»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
93
ПРИЛОЖЕНИЯ
Приложение 1
Файл form__zapros1.pas
unit Form__zapros1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.DBGrids, Vcl.StdCtrls,
Vcl.ComCtrls, Vcl.Grids,DateUtils,Excel2000,ComObj;
type
TForm_zapros1 = class(TForm)
StringGrid_time: TStringGrid;
MonthCalendar_begin: TMonthCalendar;
MonthCalendar_end: TMonthCalendar;
Label1: TLabel;
Label2: TLabel;
DBGrid_otdel: TDBGrid;
Label3: TLabel;
Button1: TButton;
DBGrid_zavod: TDBGrid;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure view_time;
procedure FormShow(Sender: TObject);
procedure MonthCalendar_endClick(Sender: TObject);
procedure MonthCalendar_beginClick(Sender: TObject);
procedure DBGrid_otdelCellClick(Column: TColumn);
procedure Button1Click(Sender: TObject);
procedure view_otdel;
procedure view_dbgrid_otdel;
procedure DBGrid_zavodCellClick(Column: TColumn);
private
{ Private declarations }
94
public
{ Public declarations }
end;
var
Form_zapros1: TForm_zapros1;
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;
95
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);
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
96
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+', sotrud-
nik.first_name,'+buf_kav+' '+buf_kav+', sotrudnik.second_name) AS FIO '
+' FROM otdel INNER JOIN (dolgnost INNER JOIN sotrudnik ON dolgnost.id_dolgnost = sotrud-
nik.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 := DaysBe-
tween(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;
97
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));
//вывожу время работы
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 '
Источник: https://baza.diplomsite.ru/previewfile/719