Диплом: Автоматизация учета рабочего времени сотрудников МКУ "Селецкое"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
98
Приложение А
Исходный код хранимой процедуры расчёта выплат по ЛН
«ALTER PROCEDURE [dbo].[CalcSeekPay]
@IDSeekPay int --Код ЛН
AS
BEGIN
DECLARE @sYear INT; --Год выписки ЛН
DECLARE @idEmpl INT; --Код сотрудника
DECLARE @cDay INT; --Количество дней
DECLARE @ExpAll INT; --Процент оплаты
DECLARE @Exper REAL; --Трудовой стаж
DECLARE @Total1 MONEY; --Сумма зароботка за год-1
DECLARE @Total2 MONEY; --Сумма зароботка за год-2
DECLARE @MaxTotal1 MONEY; --Максимальная возвращаемая
сумма ФСС в год-1
DECLARE @MaxTotal2 MONEY; --Максимальная возвращаемая
сумма ФСС в год-2
DECLARE @MinDay MONEY; --Минимальная оплата в день по
МРОТ в текущий год ЛН
DECLARE @kf REAL; --Коэффициент местности в текущий год ЛН
DECLARE @pr REAL; --Процент от опыта или типа заболевания
DECLARE @DayPay MONEY; --Дневная оплата по ЛН
--Узнаём данные из ЛН, данных о сотруднике и причине болезни
SELECT
@sYear=YEAR(sp.sDate)
, @idEmpl=sp.Employee
, @cDay=DATEDIFF(DAY,sp.sDate,sp.eDate)
, @ExpAll=ISNULL(rs.ExpAll,0)
, @Exper=ISNULL(e.Exper,0)
FROM SeekPay sp
INNER JOIN Employee e ON e.ID=sp.Employee
99
LEFT JOIN ReasonSeek rs ON rs.ID=sp.ReasonSeek
WHERE sp.ID=@IDSeekPay;
--общая сумма в год-1
SELECT
@Total1=SUM(ISNULL(p.Total,0))
FROM Pay p
INNER JOIN Works w ON w.ID=p.Works
WHERE (p.YearPay=@sYear-1) AND (w.Employee=@idEmpl);
--общая сумма в год-2
SELECT
@Total2=SUM(ISNULL(p.Total,0))
FROM Pay p
INNER JOIN Works w ON w.ID=p.Works
WHERE (p.YearPay=@sYear-2) AND (w.Employee=@idEmpl);
--максимальная сумма, которую вернёт ФСС в год-1
SELECT
@MaxTotal1 = FSS
FROM MinMaxTotal
WHERE mmYear=@sYear-1;
--максимальная сумма, которую вернёт ФСС в год-2
SELECT
@MaxTotal2 = FSS
FROM MinMaxTotal
WHERE mmYear=@sYear-2;
--Минимальная оплата в год ЛН по МРОТ и коэффициент области
SELECT
@MinDay = MROT*24/730
100
,@kf=KF
FROM MinMaxTotal
WHERE mmYear=@sYear;
--Проверяем, всё ли сумму возвращает ФСС в год-1
IF @MaxTotal1<@Total1
SET @Total1=@MaxTotal1;
--Проверяем, всё ли сумму возвращает ФСС в год-2
IF @MaxTotal2<@Total2
SET @Total2=@MaxTotal2;
--Выявляем процент оплаты ЛН
IF @ExpAll=0 --тип заболевания не оплачивается
SET @pr=0
ELSE
BEGIN
IF @ExpAll=1 --тип заболевания не зависит от стажа и
оплачивается 100%
SET @pr=1
ELSE --процент оплаты зависит от стажа
SET
@pr=CASE
WHEN @Exper<5 THEN 0.6 --менее 5 лет 60%
WHEN (@Exper>=5) AND (@Exper<8) THEN 0.8 --от 5
до 8 лет 80%
ELSE 1 --более 8 лет 100%
END
END;
IF @Exper<0.5 --если стаж работы менее полугода, то считается по
МРОТ в любом случае
SET @DayPay=@MinDay
101
ELSE
BEGIN
SET @DayPay=(@Total1+@Total2)/730*@kf*@pr; --расчёт
оплаты в день
IF @DayPay<@MinDay --оплата в день меньше оплаты по
МРОТ, принимаем за оплату в день оплату по МРОТ
SET @DayPay=@MinDay;
END;
UPDATE SeekPay --вносим данные в оплату ЛН
SET
Total=@cDay*@DayPay --общая сумма
,DayPay=@DayPay --оплата в день
,Emloyer=CASE WHEN @cDay>3 THEN @DayPay*3 ELSE Total
END --за счёт работодателя оплачивается первые 3 дня или всё, если меньше 3
дней
,FSS=CASE WHEN @cDay>3 THEN @DayPay*(@cDay-3) ELSE 0
END --ФСС возмещает после 3-х дней или 0, если болел меньше 3-х дней
WHERE ID=@IDSeekPay
END».
102
Приложение Б
Исходный код запросов для формирования отчётов
Для отчёта о днях временной нетрудоспособности за период был
разработан запрос:
«Select
e.Name AS [Сотрудник]
, rs.Name AS [Причина ЛН]
, convert(varchar(10), sp.sDate,104) AS [Начало]
, convert(varchar(10), sp.eDate,104) AS [Окончание]
, sp.DayPay AS [В день]
, sp.Emloyer AS [За счёт работодателя]
, sp.Fss AS [Выплата ФСС]
, sp.Total AS [Общая]
from SeekPay sp
inner join ReasonSeek rs on rs.ID=sp.ReasonSeek
inner join Employee e on e.ID=sp.Employee
where sp.sDate between :sDate and :eDate
Order by [Сотрудник], [Начало]».
Для отчёта о выплатах за период был разработан запрос:
«select
p.MonthPay+' '+Cast(p.YearPay as varchar(5)) as [Дата выплаты]
, e.Name as [Сотрудник]
, d.Name as [Отдел]
, ps.Name as [Должность]
, p.Total as [Сумма]
from Pay p
inner join Works w on w.ID=p.Works
inner join Department d on d.ID=w.Department
inner join Employee e on e.ID=w.Employee
left join Post ps on ps.ID=w.Post
where (DATEFROMPARTS(p.YearPay, p.MonthNumb, 1) between :sDate and
:eDate)
103
order by [Сотрудник]».
Для отчёта об отработанных днях за месяц разработан запрос:
«select e.Name as [Сотрудник]
, d.Name as [Отдел]
, ps.Name as [Должность]
, p.WorkTime as [Отработано]
, p.Holiday as [Сверхурочные]
from Pay p
inner join Works w on w.ID=p.Works
inner join Department d on d.ID=w.Department
inner join Employee e on e.ID=w.Employee
left join Post ps on ps.ID=w.Post
where (p.MonthNumb =:mnt) and (p.YearPay=:yer)
order by [Сотрудник]».
104
Приложение В
Фрагмент исходного кода клиентского приложения
unit uWorkPay;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids,
Vcl.Menus, Vcl.ExtCtrls;
type
TfrmWorkPay = class(TForm)
pnlMain: TPanel;
pnlSub: TPanel;
pmMain: TPopupMenu;
pmSub: TPopupMenu;
imAddMain: TMenuItem;
imEditMain: TMenuItem;
imDeleteMain: TMenuItem;
imAddSub: TMenuItem;
imEditSub: TMenuItem;
imDeleteSub: TMenuItem;
grdMain: TDBGrid;
grdSub: TDBGrid;
procedure pmMainPopup(Sender: TObject);
procedure pmSubPopup(Sender: TObject);
procedure imAdd(Sender: TObject);
procedure imEdit(Sender: TObject);
procedure imDelete(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmWorkPay: TfrmWorkPay;
implementation
{$R *.dfm}
105
uses
uDM, uOneRecord;
procedure TfrmWorkPay.pmMainPopup(Sender: TObject);
begin
imEditMain.Visible:=grdMain.DataSource.DataSet.RecordCount>0;
imDeleteMain.Visible:=grdMain.DataSource.DataSet.RecordCount>0;
end;
procedure TfrmWorkPay.pmSubPopup(Sender: TObject);
begin
imAddSub.Visible:=grdMain.DataSource.DataSet.RecordCount>0;
imEditSub.Visible:=grdSub.DataSource.DataSet.RecordCount>0;
imDeleteSub.Visible:=grdSub.DataSource.DataSet.RecordCount>0;
end;
procedure TfrmWorkPay.imAdd(Sender: TObject);
var
frm: TfrmOneRecord;
begin
Application.CreateForm(TfrmOneRecord,frm);
frm.Tag:=(Sender as TMenuItem).Tag;
frm.mode:=True;
case frm.Tag of
1: grdMain.DataSource.DataSet.Append;
2: grdSub.DataSource.DataSet.Append;
end;
frm.ShowModal;
frm.Free;
end;
procedure TfrmWorkPay.imEdit(Sender: TObject);
var
frm: TfrmOneRecord;
begin
Application.CreateForm(TfrmOneRecord,frm);
frm.Tag:=(Sender as TMenuItem).Tag;
frm.mode:=False;
case frm.Tag of
1: grdMain.DataSource.DataSet.Edit;
2: grdSub.DataSource.DataSet.Edit;
end;
frm.ShowModal;
106
frm.Free;
end;
procedure TfrmWorkPay.imDelete(Sender: TObject);
begin
if MessageDlg('Вы действительно хотите удалить
запись?',mtWarning,mbOkCancel,0)=mrOk then
case (Sender as TMenuItem).Tag of
1: grdMain.DataSource.DataSet.Delete;
2: grdSub.DataSource.DataSet.Delete;
end;
end;
end.

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)