//********ÿ****************************************************************** //* Ostatnie ˜wiadectwo pracy - wyliczenie urlopu wykorzystanego ponad * //* to, co si© nale¾aˆo do dnia odej˜cia od poprzedniego pracodawcy, je˜li * //* ju¾ tam nie pracuje.Je˜li nadal tam pracuje, to brany jest dzieä poprze-* //* dzaj¥cy rozpocz©cie pracy "u nas". * //* * //* * //* * //* * //* 10.09.2009 WA-PRO (Administrator) * //*************************************************************************** local Rok=Rok (data) data_od=Max(Przebieg pracy zawodowej (Data od),Data(1,1,Rok)) data_zatrudnienia=Data pierwszego zatrudnienia() ilosc_miesiecy_pracy=0 wyksztalcenie$='' sluzba=0 zasady=0 podstawa_wymiaru=0 suma_zaleglego=0 wykorzystany_h=0 snalezny_gh=0 pracowal_do=0 pracowal_od=0 pr_od_start=0 pra_od_start=0 pracowal_od_r=0 godziny_swiadectwa=0 swiadectwo=0 wymrocz=0 zatrudniony_od=Zatrudniony od (data) zatrudniony_do=Zatrudniony do (data) ilmph=0 pozycja$='' pracowal_od_p=0 pracowal_do_p=0 snal_h_1=0 pierwszy_rok=0 ildniz=0 dniz=0 mcez=0 lataz=0 ildnix=0 dnix=0 mcex=0 lt=0 dt=0 mt=0 latax=0 data_rozpoczecia_pracy=Data pierwszego zatrudnienia () data1=Data(1,1,Rok(data)) il_mp_h=0 il_mp_h_start=0 dnia=0 dnih=0 suma_dnih_last=0 suma_dnih=0 wspet=0 i=0 suma_kawalkow=0 mcy_his=0 suma_mcy_his=0 cyc=0 poz_num=0 j=0 k=0 wymiar_h=0 pr_wymiar_h=0 kawalek_h=0 jj=0 jest=0 w_fir=0 zwolniony=0 historia_do=0 his_do=0 zwarta_h=1 byl_luty=0 zatrudniony=Zatrudniony w okresie (data,data) fri=0 fri_ust=0 his_etat=0 z_przeb=1 nak=0 snalezny_hr=0 ang_od=0 ang_do=0 ost_ang_od=0 data_pytania=data k=0 end if zatrudniony_do=0 zatrudniony_do=domyslna_data end if not pierwszy_rok if {Urlop w zatrudnieniu r¢wnolegˆym}='Caˆkowicie niezale¾nie' or {Urlop w zatrudnieniu r¢wnolegˆym}='Niezale¾ny okres nakˆadki' if miesi¥c(zatrudniony_od)< 2 Return(0) end end end if not KartotekaPusta (Kartoteka anga¾y) PierwszyRekord(Kartoteka anga¾y) if not Kartoteka anga¾y (Zwolnienie) or Zawierasi©(data,Kartoteka anga¾y (Data od),Kartoteka anga¾y (Data do)) pr_od_start=Kartoteka anga¾y (Data od) else pr_od_start=data(1,1,rok(data)) end end Kartoteka anga¾y (Data od)=data Set (Kartoteka anga¾y) Previous (Kartoteka anga¾y) ost_ang_od=Kartoteka anga¾y (Data od) Czy˜†TabNum() his_etat=Policz ˜redni wsp¢ˆczynnik etatu z historii (data,0,zasady) Oblicz nale¾ny urlop rehabilitacyjny (zatrudniony_od-1,fri,fri_ust,0,z_przeb,nak) zasady=Zasady urlopowe (data, podstawa_wymiaru) if rok(Zatrudniony_od) = rok(data) or zasady=1 if KartotekaPusta (Przebieg pracy zawodowej) Return (0) end Oblicz sta¾ z aktualnego zatrudnienia R04 (data,ildniz, dniz, mcez, lataz) Oblicz sta¾ z przebiegu zatrudnienia H (data,ildnix, dnix, mcex, latax) if rok(data) > 2003 and rok(data) > rok(data_zatrudnienia) and zasady=2 pierwszy_rok=0 else if data_rozpoczecia_pracy >= data1 R¢¾nica dat w latach miesi¥cach dniach R04 (data_rozpoczecia_pracy, data1, lt, mt, dt) if lt*12+mt>=12 pierwszy_rok=0 else pierwszy_rok=1 end else pierwszy_rok=0 end end if not KartotekaPusta (Przebieg pracy zawodowej) OstatniRekord (Przebieg pracy zawodowej) w_fir=Przebieg pracy zawodowej (W firmie) historia_do=Przebieg pracy zawodowej (Data do) his_do=historia_do case of historia_do >= zatrudniony_od and w_fir historia_do=zatrudniony_od-1 of historia_do >= zatrudniony_od and not w_fir historia_do=OstatniDzieä(zatrudniony_od) else if not Pierwszy_rok if historia_do < zatrudniony_do and ((rok(historia_do)=rok(zatrudniony_od) and miesi¥c(historia_do) >= miesi¥c(zatrudniony_od)) or historia_do=0 or rok(historia_do) > rok(zatrudniony_od)) if dzieä(zatrudniony_od)=1 historia_do=PierwszyDzieä(zatrudniony_od)-1 else historia_do=OstatniDzieä(zatrudniony_od) end end end end end Clear (Przebieg pracy zawodowej) Set (Przebieg pracy zawodowej) Loop w_fir=0 wspet=0 Next (Przebieg pracy zawodowej) if eof() break end if rok(Przebieg pracy zawodowej (Data do)) <> rok(data) and rok(Przebieg pracy zawodowej (Data od)) <> rok(data) cycle end pracowal_od=Przebieg pracy zawodowej (Data od) pracowal_do=Przebieg pracy zawodowej (Data do) w_fir=Przebieg pracy zawodowej (W firmie) if pracowal_od=0 pracowal_od=data(1,1,rok(data)) end if pracowal_do=0 pracowal_do=domyslna_data end Clear (Kartoteka anga¾y) Set (Kartoteka anga¾y) Loop Next (Kartoteka anga¾y) if eof() break end if Kartoteka anga¾y (Zwolnienie) and Zawierasi©(data,Kartoteka anga¾y (Data od),Kartoteka anga¾y (Data do)) cycle end ang_od=Kartoteka anga¾y (Data od) ang_do=Kartoteka anga¾y (Data do) if not pierwszy_rok if not w_fir and (Zawierasi©(pracowal_od,ang_od,ang_do) or Zawierasi©(pracowal_do,ang_od,ang_do) or pracowal_od <=ang_od and pracowal_do >=ang_do) if miesi¥c(ang_od) < miesi¥c(pracowal_do) if {Urlop w zatrudnieniu r¢wnolegˆym}='' or {Urlop w zatrudnieniu r¢wnolegˆym}='Odlicz 1-y miesi¥c nakˆadki' if pracowal_do > OstatniDzieä(pr_od_start) pracowal_do=OstatniDzieä(pr_od_start) end end end end end end if not Przebieg pracy zawodowej (Sta¾) cycle end if rok(pracowal_do) < rok(data) and zasady=2 cycle end if Przebieg pracy zawodowej (Data od) > OstatniDzieä(zatrudniony_od) break end if pracowal_od=0 pracowal_od=pr_od_start end if (zasady=2 and pracowal_do < data(1,1,rok(data))) or pracowal_od > data(31,12,rok(data)) cycle end if pracowal_od > data(31,12,rok(data)) cycle end pracowal_od_r=Przebieg pracy zawodowej (Data od) wspet=Przebieg pracy zawodowej (Wymiar etatu) w_fir=Przebieg pracy zawodowej (W firmie) if w_fir > 0 jest=0 Clear (Kartoteka anga¾y) Set (Kartoteka anga¾y) Loop Next (Kartoteka anga¾y) if eof() break end if w_fir=Kartoteka anga¾y (Id) Loop if Kartoteka anga¾y (Zwolnienie) jest=1 break end Next (Kartoteka anga¾y) if eof() break end end if jest break end end end if jest if data <= Kartoteka anga¾y (Data do) or Kartoteka anga¾y (Data do)=0 cycle end end end if wspet < 0 Ostrze¾enie ('Bˆ¥d! Ujemny wsp¢ˆczynnik etatu !') Return (0) end if wspet=0 or wspet > 1 wspet=1 end if pracowal_od < data(1,1,rok(data)) and zasady=2 pracowal_od=data(1,1,rok(data)) end if pracowal_do > data(31,12,rok(data)) or pracowal_do=0 pracowal_do=data(31,12,rok(data)) end j=0 while j < poz_num j=j+1 if Zawierasi© (pracowal_od,TabNum(j,1),TabNum(j,2)) or Zawierasi© (pracowal_do,TabNum(j,1),TabNum(j,2)) case of Zawierasi© (pracowal_od,TabNum(j,1),TabNum(j,2)) and Zawierasi© (pracowal_do,TabNum(j,1),TabNum(j,2)) cyc=1 break of Zawierasi© (pracowal_od,TabNum(j,1),TabNum(j,2)) pracowal_od=TabNum(j,2)+1 of Zawierasi© (pracowal_do,TabNum(j,1),TabNum(j,2)) pracowal_do=TabNum(j,1)-1 end end end if cyc cyc=0 cycle end if w_fir and pracowal_do >= ost_ang_od cycle end poz_num=poz_num+1 TabNum(poz_num,1)=pracowal_od TabNum(poz_num,2)=pracowal_do if TabNum(poz_num,2)=0 TabNum(poz_num,2)=domyslna_data end TabNum(poz_num,3)=wspet TabNum(poz_num,4)=w_fir TabNum(poz_num,5)=zwolniony end ////// Zbudowano tablic© TabNum : historia tegoroczna /////////// if poz_num=0 Return(0) end jj=0 while jj < poz_num jj=jj+1 if (zasady=2 and TabNum(jj,2) < data(1,1,rok(data))) or TabNum(jj,1) > data(31,12,rok(data)) k=jj while k < poz_num k=k+1 TabNum(k-1,1)=TabNum(k,1) TabNum(k-1,2)=TabNum(k,2) TabNum(k-1,3)=TabNum(k,3) TabNum(k-1,4)=TabNum(k,4) TabNum(k-1,5)=TabNum(k,5) end poz_num=poz_num-1 end end if jj=0 snalezny_h=0 snal_h_l=0 wykorzystany_gh=0 Return (0) end if TabNum(1,1) < data(1,1,rok(data)) and zasady=2 TabNum(1,1)=data(1,1,rok(data)) end if TabNum(poz_num,2) > data(31,12,rok(data)) TabNum(poz_num,2)=data(31,12,rok(data)) end if not pierwszy_rok case of {Urlop w zatrudnieniu r¢wnolegˆym}='Odlicz 1-y miesi¥c nakˆadki' or {Urlop w zatrudnieniu r¢wnolegˆym}='' if miesi¥c(TabNum(poz_num,2))=miesi¥c(zatrudniony_od) and not pierwszy_rok TabNum(poz_num,2)=data(dzieä(OstatniDzieä(zatrudniony_od)),miesi¥c(zatrudniony_od),rok(data)) else if miesi¥c(TabNum(poz_num,2)) > miesi¥c(zatrudniony_od) if miesi¥c(zatrudniony_od)=1 TabNum(poz_num,2)=data(31,12,rok(data)-1) else TabNum(poz_num,2)=data(dzieä(PierwszyDzieä(zatrudniony_od)-1),miesi¥c(zatrudniony_od)-1,rok(data)) end end end of {Urlop w zatrudnieniu r¢wnolegˆym}='Caˆkowicie niezale¾nie' or {Urlop w zatrudnieniu r¢wnolegˆym}='Niezale¾ny okres nakˆadki' if miesi¥c(zatrudniony_od)=1 Return(0) end if miesi¥c(TabNum(poz_num,2)) >= miesi¥c(zatrudniony_od) while TabNum(poz_num,1) > PierwszyDzieä(zatrudniony_od) - 1 poz_num=poz_num-1 if poz_num=0 Return(0) end end TabNum(poz_num,2)=PierwszyDzieä(zatrudniony_od) - 1 if miesi¥c(zatrudniony_od) > 1 TabNum(poz_num,2)=data(dzieä(PierwszyDzieä(zatrudniony_od)-1),miesi¥c(zatrudniony_od)-1,rok(data)) else Return(0) end if TabNum(poz_num,1) > TabNum(poz_num,2) TabNum(poz_num,1)=TabNum(poz_num,2) end end end end while TabNum(poz_num,1) > TabNum(poz_num,2) and poz_num > 0 poz_num=poz_num - 1 end if poz_num < 1 snalezny_h=0 snal_h_l=0 wykorzystany_gh=0 Return (0) end if pierwszy_rok jj=0 while jj < poz_num jj=jj+1 if TabNum(jj,1) > zatrudniony_od if jj = poz_num poz_num=poz_num-1 break else k=jj while jj < poz_num TabNum(k,1)=TabNum(k+1,1) TabNum(k,2)=TabNum(k+1,2) TabNum(k,3)=TabNum(k+1,3) TabNum(k,4)=TabNum(k+1,4) TabNum(k,5)=TabNum(k+1,5) end end else if TabNum(jj,2) > zatrudniony_od TabNum(jj,2)=zatrudniony_od - 1 end end end end if poz_num=0 Return(0) end ////// Tablica TabNum zostaˆa ostatecznie uporz¥dkowana /////////// jj=1 while jj < poz_num jj=jj+1 if TabNum(jj,1) > TabNum(jj-1,2)+1 zwarta_h=0 end end if miesi¥c(TabNum(poz_num,2))=2 byl_luty=1 end pracowal_od=0 pracowal_do=0 jj=0 while jj < poz_num jj=jj+1 mcy_his=0 pracowal_do_p=pracowal_do pracowal_od=TabNum(jj,1) pracowal_do=TabNum(jj,2) wspet=TabNum(jj,3) if pierwszy_rok case of dzieä(pracowal_od)=1 and dzieä(pracowal_do)=dzieä(OstatniDzieä(pracowal_do)) mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od)+1 of dzieä(pracowal_od)=1 dnih=dnih+dzieä(pracowal_do) mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od) of dzieä(pracowal_do)=dzieä(OstatniDzieä(pracowal_do)) dnih=dnih+dzieä(OstatniDzieä(pracowal_od))-dzieä(pracowal_od)+1 if miesi¥c(pracowal_od)=2 and dnih >= 28 if rok(data)/4-int(rok(data)/4) < 0.00001 // rok przest©pny - dnih=dnih+1 // - uproszczenie else // wystarczaj¥ce dnih=dnih+2 // do roku 2100 end end mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od) of dzieä(pracowal_od) <= dzieä(pracowal_do+1) and miesi¥c(pracowal_od) < miesi¥c(pracowal_do) mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od) dnih=dnih+dzieä(pracowal_do)-dzieä(pracowal_od)+1 of dzieä(pracowal_od) > dzieä(pracowal_do-1) and miesi¥c(pracowal_od) < miesi¥c(pracowal_do) mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od)-1 dnih=dnih+dzieä(OstatniDzieä(pracowal_od))-dzieä(pracowal_od)+1+dzieä(pracowal_do) of dzieä(pracowal_od) <= dzieä(pracowal_do) and miesi¥c(pracowal_od)=miesi¥c(pracowal_do) dnih=dnih+dzieä(pracowal_do)-dzieä(pracowal_od)+1 end if zwarta_h if miesi¥c(pracowal_od)=2 and miesi¥c(pracowal_do)=3 and dzieä(pracowal_do) >= dzieä(pracowal_od-1) if rok(data)/4-int(rok(data)/4) < 0.00001 // rok przest©pny - if dnih=29 // - uproszczenie dnih=30 end else if dnih=28 dnih=30 end end end if jj=poz_num and dnih >= dzieä(OstatniDzieä(TabNum(jj,2))) mcy_his=mcy_his+1 dnih=dnih-dzieä(TabNum(jj,2)) end else if miesi¥c(pracowal_od)=2 and miesi¥c(pracowal_do)=3 and dzieä(pracowal_do) >= dzieä(pracowal_od-1) if rok(data)/4-int(rok(data)/4) < 0.00001 // rok przest©pny - if dnih=29 // - uproszczenie dnih=30 end else if dnih=28 dnih=30 end end end if dnih > 29 mcy_his=mcy_his+1 dnih=Max(dnih-30,0) end end wymiar_h=Oblicz wymiar urlopu R04 H (pracowal_od,pracowal_do, podstawa_wymiaru, ilosc_miesiecy_pracy, sluzba, wyksztalcenie$,1,swiadectwo,wymrocz,pierwszy_rok) kawalek_h=mcy_his*wspet*podstawa_wymiaru/12 if {Czy zaokr¥gla† pierwszy urlop ?}='Tak' and {Urlopy w ci¥gu roku zaokr¥gla†} = 'ka¾dy okres osobno' kawalek_h=Zaokr¥glenie w g¢r© (kawalek_h) end snalezny_h=snalezny_h+kawalek_h suma_mcy_his=suma_mcy_his+mcy_his else if zasady=1 // stare zasady naliczania urlopu pr_wymiar_h=Oblicz wymiar urlopu H (data,pracowal_do, wymiar_h, ilosc_miesiecy_pracy, wymrocz) if data >= data(1,1,2004) and wymiar_h=18 wymiar_h=20 end else // nowe zasady naliczania urlopu wymiar_h=Oblicz wymiar urlopu R04 H (pracowal_od,pracowal_do, podstawa_wymiaru, ilosc_miesiecy_pracy, sluzba, wyksztalcenie$,1,swiadectwo,wymrocz,pierwszy_rok) if miesi¥c(pracowal_do_p)=miesi¥c(pracowal_od) mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od) else mcy_his=miesi¥c(pracowal_do)-miesi¥c(pracowal_od)+1 end kawalek_h=mcy_his/12 snal_h_1=wymiar_h*wspet*kawalek_h if {Urlopy w ci¥gu roku zaokr¥gla†} = 'ka¾dy okres osobno' snal_h_1=Zaokr¥glenie w g¢r© (snal_h_1) end snalezny_h=snalezny_h+snal_h_1 end snal_h_1=0 end end if zasady=1 snalezny_h=pr_wymiar_h end if {Urlopy w ci¥gu roku zaokr¥gla†}='ka¾dy okres osobno' snalezny_h=Zaokr¥glenie w g¢r© (snalezny_h) end snalezny_h=Max(snalezny_h,0) wykorzystany_h=Pracownik (Wykorzystany urlop wypoczynkowy) PierwszyRekord (Kartoteka anga¾y) if not eof() godziny_swiadectwa=Kartoteka anga¾y (Wymiar godzinowy peˆnego etatu) end if godziny_swiadectwa=0 if {Domy˜lny wymiar godzin peˆnego etatu}=0 godziny_swiadectwa=8 else godziny_swiadectwa={Domy˜lny wymiar godzin peˆnego etatu} end end wykorzystany_gh=wykorzystany_h*godziny_swiadectwa wykorzystany_gh=max(wykorzystany_gh - snalezny_gh,0) end snalezny_h=snalezny_h+fri_ust*his_etat snal_h_l=snalezny_h if not pierwszy_rok or {Czy zaokr¥gla† pierwszy urlop ?}='Tak' case of {Urlop w zatrudnieniu r¢wnolegˆym}='Niezale¾ny okres nakˆadki' snalezny_h=int(snalezny_h) of {Urlop w zatrudnieniu r¢wnolegˆym}='Caˆkowicie niezale¾nie' if miesi¥c(TabNum(poz_num,2))< 2 Return(0) end if miesi¥c(zatrudniony_od) > 1 if miesi¥c(TabNum(poz_num,2)) >= miesi¥c(zatrudniony_od)-1 snalezny_h=int(snalezny_h) else Return(0) end else snalezny_h=Zaokr¥glenie w g¢r© (snalezny_h) end else snalezny_h=Zaokr¥glenie w g¢r© (snalezny_h) end end if {Urlop w zatrudnieniu r¢wnolegˆym}='Odlicz 1-y miesi¥c nakˆadki' or {Urlop w zatrudnieniu r¢wnolegˆym}='' if miesi¥c(historia_do) > miesi¥c(zatrudniony_od) and zatrudniony_do > data snalezny_h=Zaokr¥glenie w g¢r© (snal_h_l) end end wykorzystany_h=max(wykorzystany_h - snalezny_h,0) //info('last_swi : snalezny_h='&num2txt(snalezny_h)&&'; snal_hl='&num2txt(snal_h_l)) Return(wykorzystany_h)