// *************************************************************************** // * * // * Funkcja oblicza ilo˜† dni,miesiecy i lat urlopu bezpˆatnego do oblicze- * // * nia sta¾u urlopowego. Sprawdzany jest okres od Daty Od do Daty Do. Dane * // * dotycz¥ okresu aktualnego zatrudnienia i pobierane s¥ z ewidencji nie- * // * obecno˜ci * // * Argumenty: data_od * // * data_do * // * * // * 07.09.2009 WA-PRO (Dziaˆ Rozwoju Oprogramowania) * // *************************************************************************** local data_od=0 data_do=0 suma_dni_urlopu_bezplatnego=0 data_rozpoczecia_pracy=0 data_zatrudnienia=0 bezplatny=0 //ilo˜† peˆnych miesiecy urlopu bezpˆatnego w roku dni_bez_w_roku=0 a1=0 a2=0 a3=0 a4=0 ost=0 s_dni=0 poz_num=0 zliczyl=0 wprowadzil=0 i=0 start=1 d_od=0 d_do=0 mc_od=0 mc_do=0 rok_od=0 rok_do=0 lat_sch=0 end Czy˜†TabNum() data_rozpoczecia_pracy=Data pierwszego zatrudnienia () data_zatrudnienia=Zatrudniony Od (data) if data < data_zatrudnienia Return (0) end poz_num=0 StartNieobecno˜ci(data_zatrudnienia) //od pocz¥tku zatrudnienia lub pocz¥tku roku Loop Nast©pnaNieobecno˜†() Post©p() if eof() or Nieobecno˜†(Data od)>data //do koäca okresu sprawdzania lub zwolnienia if poz_num=0 Return(0) end break //nie dalej ni¾ do koäca roku end if Nieobecno˜†(Kod Powodu)<>'B' cycle end wprowadzil=0 data_od=Nieobecno˜† (Data Od) data_do=Nieobecno˜† (Data Do) if data_od < data_zatrudnienia data_od=data_zatrudnienia end if data_do > data data_do=data end if data_od > data_do cycle end if start a1=data_od a2=data_do TabNum(1,1)=a1 TabNum(1,2)=a2 end if data_od > a2+1 or start poz_num=poz_num+1 TabNum(poz_num,1)=data_od TabNum(poz_num,2)=data_do a1=data_od end a2=data_do start=0 end i=0 while i < poz_num i=i+1 suma_dni_urlopu_bezplatnego=suma_dni_urlopu_bezplatnego+TabNum(i,2)-TabNum(i,1)+1 rok_od=rok(TabNum(i,1)) rok_do=rok(TabNum(i,2)) mc_od=miesi¥c(TabNum(i,1)) mc_do=miesi¥c(TabNum(i,2)) d_od=dzieä(TabNum(i,1)) d_do=dzieä(TabNum(i,2)) if rok_od < rok_do while rok_od < rok_do lat=lat+1 rok_od=rok_od + 1 end miesiecy=miesiecy + 12-mc_od if d_od=1 and d_do=OstatniDzieä(d_do) miesiecy=miesiecy + 1 else dni=dni+dzieä(OstatniDzieä(TabNum(i,1))) - d_od + 1 end miesiecy=miesiecy+mc_do - 1 if d_do=OstatniDzieä(TabNum(i,2)) miesiecy=miesiecy + 1 else dni=dni + d_do end if mc_do < mc_od - 1 lat=lat-1 end else if mc_do > mc_od if d_do=dzieä(OstatniDzieä(TabNum(i,2))) and d_od=1 miesiecy=miesiecy + mc_do-mc_od + 1 else miesiecy=miesiecy + mc_do-mc_od - 1 if d_do > d_od - 2 miesiecy=miesiecy + 1 dni=dni + d_do - d_od + 1 else dni=dni+dzieä(OstatniDzieä(TabNum(i,1))) - d_od+1 + d_do end end else dni=dni + d_do - d_od + 1 end end end lat=lat+int(miesiecy/12) miesiecy=miesiecy - 12*int(miesiecy/12) miesiecy=miesiecy + int(dni/30) dni=dni - 30*int(dni/30) //info('ewid: lat='&num2txt(lat)&&'; mcy='&num2txt(miesiecy)&&'; dni='&num2txt(dni)&&'; ewid: suma dni='&num2txt(suma_dni_urlopu_bezplatnego)) Return(suma_dni_urlopu_bezplatnego)