View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000942 | Зарплата | General | public | 2016-04-06 23:43 | 2021-03-10 13:36 |
| Reporter | ruslan | Assigned To | ruslan | ||
| Priority | urgent | Severity | crash | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Summary | 0000942: -Зарплата- Расчет больничных при отработанном периоде менее 12 месяцев на предприятии | ||||
| Description | Расчет среднендневной ЗП происходит некорректно. потому что неправильно рассчитывается период расчета. 1. При отработанном периоде менее 12 месяцев, но более 1 полного календарного месяца до момента наступления больничного. Расчетный период берется с 01 по последний день месяца ПОЛНЫХ отработанных месяцев до наступления страхового случая(т.е. больничного). 2. При отработанном периоде менее 1 полного календарного месяца(с 01 по последнее число месяца) до наступления страхового случая(больничного) считается фактически отработанное до наступления страхового случая кол-во дней... | ||||
| Additional Information | В принципе в форме расчета период по умолчанию 12 месяцев, однако при расчете нужно учитывать фактически отработанное время на предприятии до даты больничного в полных месяцах, и соответственно брать кол-во дней не просто по кол-ву месяцев указанных пользователем, а именно с учетом отработанных на предприятии. Например, 1. Сотрудник устроен с 12.12.2015 в марте рассчитывают больничный с 24.02.2016 по 28.02.2016, период расчета будет с 01.01.2016 по 31.01.2016 -31 календарный день, допустим у сотрудника 3 дня отпуска за свой счет с 04.01.2016 по 06.01.2016 тогда расчетный период будет 31-3=28 календарных дней. 2. Если для случая п.1 больничный будет в в январе, например с 24.01 по 28.01 то расчетный период будет с 12.12.2015 по 23.01(43 дня календарных как вроде аналогично примеру http://epodatok.com.ua/ru/article/1124), НО вот как рассчитать ЗП за такой период я нигде не нашел. | ||||
| Tags | No tags attached. | ||||
|
|
|
|
|
Месяц, в котором работник был принят на работу с первого рабочего дня, но не с первого календарного числа, не принимает участие в расчете выплат. http://bz.ligazakon.ua/magazine_article/BZ009076 |
|
|
Приложил процедуры для расчета и возможности печати расшифровки |
|
|
ZPLT_CALCSLVBL1.sp (4,471 bytes)
create procedure ZPLT_CALCSLVBL1 (
PRSNID integer,
BDATE timestamp,
EDATE timestamp,
BLDATE date,
SUBTYP integer = 0)
returns (
MONTH__SUMMA double precision,
MONTH_DAYS double precision,
MONTH_HLDDAYS integer,
MONTH_WKNDAYS integer,
MONTH_FCTDAYS double precision,
WTIME double precision,
MONTH_BLDAYS integer,
DAYWITHOUTPAY double precision)
as
declare variable XDATE date;
declare variable DAYOFWEEK integer;
declare variable XDAYS double precision;
declare variable CDATE timestamp;
declare variable DATE1 timestamp;
declare variable DATE2 timestamp;
declare variable K double precision;
declare variable MZPID integer;
begin
MONTH__SUMMA =0.0;
MONTH_HLDDAYS =0.0;
MONTH_FCTDAYS =0.0;
WTIME =0.0;
MONTH_BLDAYS =0;
DAYWITHOUTPAY =0.0;
/* ��������� ��� �� ������� ������ */
select Days from Zplt_HldDays(:bDate, :eDate) into :Month_HLDDays;
--���-�� ��������� ����
month_days=0.0;
--���-�� ���� ����
month_wkndays=0.0;
xDate = :bDate;
while (:xDate <= :eDate) do begin
Month_Days = Month_Days + 1;
Select Result from F_DayOfWeek(:xDate) into :DayOfWeek;
if (:DayOfWeek in (5,6)) then Month_WknDays = Month_WknDays + 1;
xDate = :xDate + 1;
end
Month_FctDays=:Month_Days;
/*������� ��� �� ������ ���*/
for select CI.blDate, CI.elDate
from ZpltCalcSlv S
join ZpltCalcIncr CI on CI.SlvID=S.ID and CI.blDate <= :eDate and CI.elDate >= :bDate
and CI.blDate is not Null and CI.elDate is not Null
join ZpltIncr I on I.ID=CI.IncrID and I.System_Flag in (3, 8, 9)
where S.PrsnID=:PrsnID
into :Date1, :Date2 do begin
if (:Date1 < :bDate) then Date1 = :bDate;
if (:Date2 > :eDate) then Date2 = :eDate;
select Result + 1 from F_ElapsedDays(:Date1, :Date2) into :XDays;
Month_FctDays = :Month_FctDays - :XDays;
Month_Bldays = :Month_Bldays + :XDays;
end
for select V.bDate, V.eDate
from ZpltSertVacat V
where V.PrsnID=:PrsnID and V.Typ=1
and V.bDate <= :eDate and V.eDate >= :bDate
and V.bDate is not Null and V.eDate is not Null
into :Date1, :Date2 do begin
if (:Date1 < :bDate) then Date1 = :bDate;
if (:Date2 > :eDate) then Date2 = :eDate;
select Result + 1 from F_ElapsedDays(:Date1, :Date2) into :XDays;
DayWithOutPay = :DayWithOutPay + :XDays;
Month_FctDays = :Month_FctDays - :DayWithOutPay;
end
Select xDate from F_MONTHLASTDAY(:edate) into :CDate;
if (:edate<>:cdate) then edate=:cdate;
--������������ �� ��� ����
Select coalesce((Sum(S.wTime)),0.0) from ZpltCalcMst M, ZpltCalcSlv S
where M.DAT_ >= :BDATE and M.DAT_ <= :EDATE and M.Avans=0
and S.MstID=M.ID and S.PrsnID = :PrsnID into :WTime;
--����� ��������� �� ���
MONTH__SUMMA=0.0;
Select coalesce(Sum(C.cSumma),0.0) from ZpltCalcMst M, ZpltCalcSlv S,
ZpltCalcIncr C, ZpltIncr I
where M.DAT_ >= :BDATE and M.DAT_ <= :EDATE and M.Avans=0
and S.MstID=M.ID and S.PrsnID = :PrsnID and C.SlvID=S.ID
and I.ID=C.IncrID
-- ����� ��������, �����, ��������
and (I.System_Flag in (0, 1, 7, 15) or I.System_Flag is Null or
(I.System_Flag = 5 and :blDate >= '04.07.2015') )
into :month__summa;
--����� ���� ��������� ��� ������������ �������� ����(������ ��� ����� �� �����������
-- ��� ������� ������ �� ������ ��)
if (SubTyp=2) then
begin
select Result + 1 from F_ElapsedDays(:bdate, :CDate) into :XDays;
Select coalesce(Sum(C.cSumma),0.0) from ZpltCalcMst M, ZpltCalcSlv S,
ZpltCalcIncr C, ZpltIncr I
where M.DAT_ >= :BDATE and M.DAT_ <= :CDate and M.Avans=0
and S.MstID=M.ID and S.PrsnID = :PrsnID and C.SlvID=S.ID
and I.ID=C.IncrID
-- ����� ��������, �����, ��������
and (I.System_Flag in (0, 1, 7, 15) or I.System_Flag is Null or
(I.System_Flag = 5 and :blDate >= '04.07.2015') )
-- and not upper(i.name) like '%�����%'
-- ������ ��������� �����, ������ �������� �� ������ ����
into :month__summa;
k=(:month_days)/(:xdays);
Month__Summa = round(:Month__Summa*:k,2);
end
-- ����� �� ���������� ��
if (:SubTyp = 3) then
begin
select ID from CurrTyp where Sys_Flag = 3 into :mzpID;
select Val from Currency_GetValue(:mzpID, :eDate) into :Month__Summa;
Month_Days= 30.44;
Month_FctDays=:Month_Days;
end
Suspend;
end
|
|
|
ZPLT_CALCSLVBL.sp (6,640 bytes)
create or alter procedure ZPLT_CALCSLVBL (
SIID integer)
returns (
SUMMA double precision,
BDATE timestamp,
EDATE timestamp,
ISUMMA double precision,
SUMMA1 double precision,
ALLDAYS double precision,
WRKDAYS integer,
HLDDAYS integer,
WKNDAYS integer,
FCTDAYS double precision,
CLCDAYS integer,
ALLDAYWITHOUTPAY double precision,
ALLBLDAYS integer)
as
declare variable ID integer;
declare variable BLDATE date;
declare variable ELDATE date;
declare variable MONTHCNT integer;
declare variable SLVID integer;
declare variable PRSNID integer;
declare variable INP_DATE date;
declare variable OUT_DATE date;
declare variable DAYWTIME double precision;
declare variable WTIMEALL double precision;
declare variable BLPROC double precision;
declare variable MCNT integer;
declare variable XDATE date;
declare variable DAYOFWEEK integer;
declare variable XDAYS integer;
declare variable MROUND integer;
declare variable CDATE timestamp;
declare variable DATE1 timestamp;
declare variable DATE2 timestamp;
declare variable CALCTYPE integer;
declare variable MONTH__SUMMA double precision;
declare variable MONTH_DAYS double precision;
declare variable MONTH_HLDDAYS integer;
declare variable MONTH_WKNDAYS integer;
declare variable MONTH_FCTDAYS integer;
declare variable WTIME double precision;
declare variable MONTH_BLDAYS integer;
declare variable DAYWITHOUTPAY double precision;
declare variable BCDATE timestamp;
declare variable ECDATE timestamp;
declare variable BLDAYS integer;
declare variable SUBTYP integer;
begin
Summa = 0.0;
SubTyp=0;--������� ������ ���� ����� ��� �������������� ������ ����������� ���� � �������� �� ������ ���� ����� �� ����������
Select CI.ID, CI.blDate, CI.elDate, CI.MonthCnt, CI.SlvID, CI.Proc, CoalEsce(CI.MRound, 0), M.DAT_
from ZpltCalcIncr CI
join ZpltCalcSlv S on S.ID=CI.SlvID
join ZpltCalcMst M on M.ID=S.MstID
where CI.ID=:SIID
into :ID, :BLDATE, :ELDATE, :MonthCnt, :SlvID, :BLProc, :MRound, :cDate;
CalcType = 0;
if (:cDate >= '01.06.2015') then CalcType = 1;
if (:ID is Null) then begin Suspend; Exit; end
Select PrsnID from ZpltCalcSlv where ID=:SlvID into :PrsnID;
Select Inp_Date, DayWTime from Personal where ID = :PrsnID into :Inp_Date, :DayWTime;
Select Result from F_ElapsedDays(:blDate,:elDate) into :BLDays;
BLDays = :BLDays + 1;
--������ ���� ��� ������ �������� ������� �������� ������
out_date = :blDate;
while (out_date is not null)
do
begin
eDate = :out_date; /* ������ ���� ��������� */
out_date = (select first 1 CI.blDate
from ZpltCalcSlv S
join ZpltCalcIncr CI on CI.SlvID=S.ID
and CI.blDate is not Null and CI.elDate is not Null
join ZpltIncr I on I.ID=CI.IncrID and I.System_Flag in (3, 8, 9)
where S.PrsnID=:PrsnID and CI.elDate=:out_date-1.0 order by 1);
end
Out_date= :edate;
/* ����� ��� ���� */
Select xDate from f_MonthFirstDay(:eDate) into :eDate;
/* ��������� ��� ��������� ���� */
eDate = :eDate - 1.0;
/* ����� ������� */
mCnt = -:MonthCnt+1;
Select xDate from F_AddMonth(:eDate, :mCnt) into :bDate;
Select xDate from F_MonthFirstDay(:bDate) into :bDate;
--��������� ���� ����� ������� �� ������:
if (CalcType=1) then
begin
--��������� �������� ����� 12 �����
if (bDate<Inp_Date) then begin
Select xDate from F_MONTHLASTDAY(:Inp_Date) into :bDate;
bDate= :bDate + 1;
--�������� � ������� ������������ �� ����
Select xDate from F_MonthFirstDay(:Inp_Date) into :Date1;
Select xDate from F_MonthFirstDay(:eDate) into :Date2;
if (Date1=Inp_Date) then bDate=:Inp_Date;
--��� ���� ������� ������������ ���
if (Inp_Date>Date2) then
begin
bDate=:Inp_Date;
--�� ������ ���� ������������ ���� ����� ������ �� ���������� �� �������� ������
eDate=:out_date-1;
end
end
end
AllDays = 0; /* ����� � ������ ��� */
WrkDays = 0;
HldDays = 0;
WknDays = 0;
iSumma = 0;
AllDayWithOutPay=0.0;
AllBlDays=0.0;
WTimeAll=0.0;
/*������������� ���� ����� �������� ������ ������ ������*/
for select f.bdate, f.edate from F_MONTHS_DATASET(:bDate, :eDate) f
into :bcdate, :ecdate
do begin
--�� ������, ����� ��������� ��������� ���� ����
if (:bcdate<:bdate) then bcdate=:bdate;
--����� �� ������ ����� �� ����� ����� �� ���������� �� SubTyp<>3 � ��������� ������ ������� �� ������ ���� ������ ��������
if ((extract(month from :ecdate)-extract(month from :edate)=0)and (:ecdate>:edate)) then
begin
ecdate=:edate;
if ((extract(month from :edate)-extract(month from :bdate)=1) and (SubTyp<>3)) then SubTyp=2;
end
select Mbl.month__summa, mbl.month_days, mbl.month_hlddays, mbl.month_wkndays,
mbl.month_fctdays, mbl.daywithoutpay, mbl.wtime, mbl.month_bldays
from ZPLT_CALCSLVBL1(:prsnid, :bcdate, :ecdate, :bldate, :subtyp) MBl
into :month__summa, :month_days, :month_hlddays, :month_wkndays,
:month_fctdays, :daywithoutpay, :wtime, :month_bldays;
AllDays = :AllDays + :Month_Days;
/* ����� � ������ ��� */
WrkDays = :WrkDays +(:Month_Days-:Month_HldDays-:Month_WknDays);
HldDays = :HldDays + :Month_HldDays;
WknDays = :WknDays + :Month_WknDays;
iSumma = :iSumma + :month__summa;
WTimeAll = :WTimeAll + :WTime;
AllBlDays = :AllBldays + :Month_BlDays;
AllDayWithOutPay = :AllDayWithOutPay+:DayWithOutPay;
end
/* ������� ��� �� �������� */
xDate = :blDate;
ClcDays = 0;
while (:xDate <= :elDate) do begin
ClcDays = ClcDays + 1;
Select Result from F_DayOfWeek(:xDate) into :DayOfWeek;
if (:DayOfWeek in (5,6)) then ClcDays = ClcDays - 1;
xDate = :xDate + 1;
end
select Days from Zplt_HldDays(:blDate, :elDate) into :xDays;
ClcDays = :ClcDays - :xDays;
if (:DayWTime=0 or :DayWTime is Null) then DayWTime = 8;
FctDays = :WTimeAll / :DayWTime;
-- ������������ ��������
Summa1 = :iSumma / (:WTimeAll / :DayWTime);
/*����� ��������� ����� 2015 ����*/
if (:CalcType=1) then begin
FctDays = :alldays-:alldaywithoutpay-:Allbldays;
ClcDays = :BlDays;
end
Summa1 = :iSumma / :FctDays;
-- �������� � ���� ��������
if (:MRound = 1) then Summa1 = Cast((Summa1 * 100.00) as integer) / 100.00;
-- ����� ������
Summa = :Summa1 * :ClcDays / 100.00 * :BLProc;
-- �������� � ���� ��������
Summa = Cast(Cast((Summa * 100.0) as Integer) as double precision) / 100.0;
Suspend;
end
|
|
|
mebl_ib5.zip |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2016-04-06 23:43 | ruslan | New Issue | |
| 2016-04-06 23:43 | ruslan | File Added: Правила определения расчетного периода.png | |
| 2016-04-07 00:00 | ruslan | Relationship added | related to 0000841 |
| 2016-04-07 00:00 | ruslan | Relationship deleted | related to 0000841 |
| 2016-04-07 00:00 | ruslan | Relationship added | related to 0000854 |
| 2016-04-07 00:04 | ruslan | Note Added: 0002358 | |
| 2016-04-07 00:05 | ruslan | Note Edited: 0002358 | View Revisions |
| 2018-01-29 09:47 | ruslan | Note Edited: 0002358 | View Revisions |
| 2018-01-29 09:47 | ruslan | Note Edited: 0002358 | View Revisions |
| 2018-03-25 22:52 | ruslan | Note Added: 0003401 | |
| 2018-03-25 22:52 | ruslan | Status | new => resolved |
| 2018-03-25 22:52 | ruslan | Resolution | open => fixed |
| 2018-03-25 22:52 | ruslan | Assigned To | => ruslan |
| 2018-03-25 22:53 | ruslan | File Added: ZPLT_CALCSLVBL.sp | |
| 2018-03-25 22:53 | ruslan | File Added: ZPLT_CALCSLVBL1.sp | |
| 2018-03-26 14:10 | ruslan | File Deleted: ZPLT_CALCSLVBL1.sp | |
| 2018-03-26 14:10 | ruslan | File Added: ZPLT_CALCSLVBL1.sp | |
| 2018-04-02 16:39 | ruslan | File Deleted: ZPLT_CALCSLVBL.sp | |
| 2018-04-02 16:39 | ruslan | File Deleted: ZPLT_CALCSLVBL1.sp | |
| 2018-04-02 16:43 | ruslan | File Added: ZPLT_CALCSLVBL.sp | |
| 2018-04-02 16:43 | ruslan | File Added: ZPLT_CALCSLVBL1.sp | |
| 2018-04-02 16:48 | ruslan | Relationship added | related to 0001306 |
| 2018-04-16 16:28 | ruslan | File Deleted: ZPLT_CALCSLVBL.sp | |
| 2018-04-16 16:29 | ruslan | File Added: ZPLT_CALCSLVBL.sp | |
| 2021-03-10 13:36 | barry | Note Added: 0004464 |