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 |