// *************************************************************************** // * * // * * // * * // * * // * 25.01.2011 WA-PRO (Administrator) * // *************************************************************************** local et_nor_do_ang=0 etat_znormal=0 data_prop_od=0 data_prop_do=0 rokur=rok(na_dzien) ang_do=0 ang_od=0 zatrudniony_od=Zatrudniony od (na_dzien) zatrudniony_do=Zatrudniony do (na_dzien) licz_do=0 licz_od=0 licz_do_prev=na_dzien mcy_ang=0 dni_ang=0 kda=0 kdh=0 pier_ang=1 last_ang_do=0 zwol=0 i=0 wspet=999 wspet_o=999 data_k=0 dzien_k=0 miesiac_k=0 dzielna=0 mc_poprzedni=0 mcy_z_angazy=0 przesunal=0 max_mc=0 angaz_startowy$='' historia_do=0 umowa_OK=0 jest=0 wymiar_proporcjonalny=0 wymiar_roboczy=0 wymiar_dla_wspet=0 wym_dla_wsp_noz=0 dodatek=0 start=1 minimum=380 okres_n_od=0 okres_n_do=0 mca=0 mcy_odlicz=0 zatrudniony=0 ii=0 poz_num=0 his_num=0 mcy_ang_tot=0 zmiana=0 poprzedni_poszedl=0 wspet_akt=0 dodaj=0 od_miesiaca=0 do_miesiaca=0 w_firmie=0 j=0 k=0 jest=0 ij=0 licznik=0 przeb_od=0 przeb_do=0 end if KartotekaPusta (Kartoteka anga¾y) Return (0) end if zatrudniony_do=0 zatrudniony_do=data(31,12,rok(na_dzien)) end if zatrudniony_od < data(1,1,rok(na_dzien)) zatrudniony_od=data(1,1,rok(na_dzien)) end etat_znormal=Policz znormalizowany wsp¢ˆczynnik etatu (na_dzien,0,zasady,pm,dnia,dnih,nak) mcy_ang=miesi¥c(zatrudniony_do) - miesi¥c(zatrudniony_od)+1 et_nor_do_ang=etat_znormal if mcy_ang > 0 et_nor_do_ang=et_nor_do_ang*12/mcy_ang end mcy_ang=0 wymiar_roboczy=wymiar_ustawowy kdh=Max(dnih-30*Int(dnih/30),0) if zatrudniony_do=0 zatrudniony_do=data(31,12,rok(na_dzien)) end zatrudniony_do=Min(zatrudniony_do,data(31,12,rok(na_dzien))) Czy˜†TabNum() Clear (Kartoteka anga¾y) Set (Kartoteka anga¾y) poz_num=0 poz_num=0 Loop Next (Kartoteka anga¾y) if eof() break end if Kartoteka anga¾y (Data od) > data(31,12,rok(na_dzien)) break end ang_od=Kartoteka anga¾y (Data od) ang_do=Kartoteka anga¾y (Data do) if ang_do <= 0 ang_do=data(31,12,rok(na_dzien)) end if poz_num > 0 if Zawierasi©(ang_od,PierwszyDzieä(TabNum(poz_num,1)),OstatniDzieä(TabNum(poz_num,2))) if Zawierasi©(ang_do,PierwszyDzieä(TabNum(poz_num,1)),OstatniDzieä(TabNum(poz_num,2))) TabNum(poz_num,2)=OstatniDzieä(TabNum(poz_num,2)) cycle end end end if ang_do < data(1,1,rok(na_dzien)) cycle end if ang_od < data(1,1,rok(na_dzien)) and ang_do > data(1,1,rok(na_dzien)) ang_od=data(1,1,rok(na_dzien)) end poz_num=poz_num+1 TabNum(poz_num,1)=ang_od TabNum(poz_num,2)=ang_do TabNum(poz_num,3)=Etat(Kartoteka anga¾y (Etat)) TabNum(poz_num,4)=Kartoteka anga¾y (Zwolnienie) end if poz_num=0 Return(0) end if TabNum(poz_num,2) < na_dzien and not TabNum(poz_num,4) WstawDoListyInformacji(Pracownik (Nazwisko)&&Pracownik (Imi©)&&'brak anga¾u') end j=0 k=poz_num i=0 licznik=1 while i < poz_num i=i+1 if i > 1 and TabNum(i-1,4) if TabNum(i,1) > na_dzien break end licznik=i j=0 end j=j+1 if i >= poz_num break end end i=licznik poz_num=j if i > 1 k=0 if j > 0 Loop if k >= j break end TabNum(k+1,1)=TabNum(i+k,1) TabNum(k+1,2)=TabNum(i+k,2) TabNum(k+1,3)=TabNum(i+k,3) TabNum(k+1,4)=TabNum(i+k,4) k=k+1 end end end i=0 while i < poz_num i=i+1 if TabNum(i,1) < data(1,1,rok(na_dzien)) TabNum(i,1)=data(1,1,rok(na_dzien)) end if TabNum(i,2) > data(31,12,rok(na_dzien)) TabNum(i,2)=data(31,12,rok(na_dzien)) end end i=0 while i < poz_num i=i+1 if i > 1 if miesi¥c(TabNum(i,1))=miesi¥c(TabNum(i-1,2)) and rok(TabNum(i,1))=rok(TabNum(i-1,2)) if miesi¥c(Tabnum(i,1))=12 poz_num=i break else case of {Strategia zmiany wymiaru etatu} ='Liczenie wg stanu na ostatni dzieä miesi¥ca' Tabnum(i-1,2)=PierwszyDzieä(TabNum(i-1,2))-1 Tabnum(i,1)=data(1,miesi¥c(TabNum(i,1)),rok(TabNum(i,1))) of {Strategia zmiany wymiaru etatu} ='Liczenie wg stanu na 1-y dzieä miesi¥ca' Tabnum(i,1)=OstatniDzieä(TabNum(i,1))+1 Tabnum(i-1,2)=OstatniDzieä(TabNum(i-1,2)) of {Strategia zmiany wymiaru etatu} ='Liczenie wg stanu dotycz¥cego ponad poˆowy miesi¥ca' if dzieä(TabNum(i,1)) > 15 Tabnum(i,1)=OstatniDzieä(TabNum(i,1))+1 Tabnum(i-1,2)=OstatniDzieä(TabNum(i-1,2)) else Tabnum(i-1,2)=PierwszyDzieä(TabNum(i-1,2))-1 Tabnum(i,1)=data(1,miesi¥c(TabNum(i,1)),rok(TabNum(i,1))) end of {Strategia zmiany wymiaru etatu} ='Liczenie najkorzystniej dla pracownika' if TabNum(i,3) > TabNum(i-1,3) Tabnum(i-1,2)=PierwszyDzieä(TabNum(i-1,2))-1 Tabnum(i,1)=data(1,miesi¥c(TabNum(i,1)),rok(TabNum(i,1))) else Tabnum(i,1)=OstatniDzieä(TabNum(i,1))+1 Tabnum(i-1,2)=OstatniDzieä(TabNum(i-1,2)) end end end end end end umowa_OK=Umowa OK (na_dzien) i=0 if not KartotekaPusta (Przebieg pracy zawodowej) and {Urlop w zatrudnieniu r¢wnolegˆym} <> 'Caˆkowicie niezale¾nie' or {Urlop w zatrudnieniu r¢wnolegˆym} <> '' Clear (Przebieg pracy zawodowej) Set (Przebieg pracy zawodowej) Next (Przebieg pracy zawodowej) Loop if eof() break end if Przebieg pracy zawodowej (Data do) > OstatniDzieä(na_dzien) Next (Przebieg pracy zawodowej) cycle end przeb_do=Przebieg pracy zawodowej (Data do) if przeb_do=0 przeb_do=domyslna_data end jest=0 ij=0 while ij < poz_num ij=ij+1 if Zawierasi©(TabNum(ij,1),przeb_od,przeb_do) and Zawierasi©(TabNum(ij,2),przeb_od,przeb_do) and Przebieg pracy zawodowej (W firmie) jest=1 break end end if jest jest=0 Next (Przebieg pracy zawodowej) cycle end i=i+1 TabNum(i,10)=Przebieg pracy zawodowej (Data od) TabNum(i,11)=Przebieg pracy zawodowej (Data do) TabNum(i,12)=Przebieg pracy zawodowej (W firmie) his_num=i Next (Przebieg pracy zawodowej) end his_num=i przeb_od=TabNum(his_num,10) przeb_do=TabNum(his_num,11) w_firmie=TabNum(his_num,12) historia_do=TabNum(his_num,11) else historia_do=0 end if not (TabNum(1,1)=zatrudniony_od and TabNum(1,12)) if TabNum(1,1) < historia_do or PierwszyDzieä(TabNum(1,1))=PierwszyDzieä(historia_do) case of miesi¥c(zatrudniony_od) < miesi¥c(TabNum(1,2)) and historia_do > 0 if miesi¥c(TabNum(1,1)) = miesi¥c(historia_do) if miesi¥c(TabNum(1,1))=miesi¥c(TabNum(1,2)) Return(0) else TabNum(1,1)=data(1,miesi¥c(TabNum(1,1))+1,rok(na_dzien)) end end TabNum(1,1)=data(1,miesi¥c(TabNum(1,1)),rok(na_dzien)) of miesi¥c(zatrudniony_od)=miesi¥c(TabNum(1,2)) if not w_firmie or w_firmie and zatrudniony_od <> TabNum(1,1) TabNum(1,1)=data(1,miesi¥c(TabNum(1,1))+1,rok(na_dzien)) end else TabNum(1,1)=data(1,miesi¥c(TabNum(1,1)),rok(na_dzien)) end // of {Urlop w zatrudnieniu r¢wnolegˆym}='Niezale¾ny okres nakˆadki' // of {Urlop w zatrudnieniu r¢wnolegˆym}='Caˆkowicie niezale¾nie' end end if not KartotekaPusta (Przebieg pracy zawodowej) if Przebieg pracy zawodowej (W firmie) ii=0 while not eof() if ii=0 Previous (Przebieg pracy zawodowej) end if not Przebieg pracy zawodowej (W firmie) historia_do=Przebieg pracy zawodowej (Data do) else Clear (Kartoteka anga¾y) Kartoteka anga¾y (Data od)=Przebieg pracy zawodowej (Data od) Set (Kartoteka anga¾y) Next (Kartoteka anga¾y) if Kartoteka anga¾y (Data od)=Przebieg pracy zawodowej (Data od) and Kartoteka anga¾y (Zwolnienie) historia_do=Kartoteka anga¾y (Data do) end end if ii=1 Previous (Przebieg pracy zawodowej) end ii=1 end end end if TabNum(1,1) < data(1,1,rok(na_dzien)) TabNum(1,1)=data(1,1,rok(na_dzien)) end if historia_do < data(1,1,rok(na_dzien)) historia_do=0 end i=1 while i < poz_num if miesi¥c(TabNum(i,2))=miesi¥c(TabNum(i+1,1)) and miesi¥c(TabNum(i,2)) < 12 if miesi¥c(TabNum(i+1,2)) > miesi¥c(TabNum(i+1,1)) TabNum(i+1,1)=data(1,miesi¥c(TabNum(i+1,1))+1,rok(TabNum(i,2))) else TabNum(i,2)=TabNum(i+1,2) ii=i while ii < poz_num ii=ii+1 TabNum(ii,1)=TabNum(ii+1,1) TabNum(ii,2)=TabNum(ii+1,2) TabNum(ii,3)=TabNum(ii+1,3) TabNum(ii,4)=TabNum(ii+1,4) end poz_num=poz_num-1 i=i+1 cycle end else if miesi¥c(TabNum(i,2)) >= 12 poz_num=i break end end i=i+1 end //if {Urlop w zatrudnieniu r¢wnolegˆym}='Odlicz 1-y miesi¥c nakˆadki' if {Urlop w zatrudnieniu r¢wnolegˆym}='Caˆkowicie niezale¾nie' or {Urlop w zatrudnieniu r¢wnolegˆym}='' historia_do=0 else if historia_do > 0 and miesi¥c(TabNum(1,1))=miesi¥c(historia_do) if historia_do > data(1,12,rok(na_dzien)) Return(0) else TabNum(1,1)=data(1,miesi¥c(historia_do)+1,rok(historia_do)) end end end na_dzien=Min(zatrudniony_do,data(31,12,rok(na_dzien))) zwol=0 i=1 while i <= poz_num jest=0 dni_ang=0 if i > 1 wspet_o=wspet end wspet=TabNum(i,3) ang_od=TabNum(i,1) ang_do=TabNum(i,2) if ang_od > data(31,12,rok(na_dzien)) break end if ang_do > data(31,12,rok(na_dzien)) or ang_do=0 ang_do=data(31,12,rok(na_dzien)) end data_prop_od=ang_od data_prop_do=ang_do licz_od=data_prop_od licz_do=data_prop_do zatrudniony=Zatrudniony w okresie (na_dzien,na_dzien) // case // of {Strategia zmiany wymiaru etatu} ='Liczenie wg stanu na 1-y dzieä miesi¥ca' or {Strategia zmiany wymiaru etatu} ='' if i=1 mcy_ang=miesi¥c(licz_do)-miesi¥c(licz_od)+1 else if miesi¥c(licz_od)=miesi¥c(TabNum(i-1,2)) if historia_do > 0 and miesi¥c(licz_od) < miesi¥c(historia_do) mcy_ang=miesi¥c(licz_do)-miesi¥c(licz_od)+1 else mcy_ang=miesi¥c(licz_do)-miesi¥c(licz_od) end else mcy_ang=miesi¥c(licz_do)-miesi¥c(licz_od)+1 end end // end mcy_ang=Max(mcy_ang,0) Clear (Przebieg pracy zawodowej) Set (Przebieg pracy zawodowej) while not eof() Next (Przebieg pracy zawodowej) if eof() break end if rok (licz_od)=rok(Przebieg pracy zawodowej (Data do)) and miesi¥c(licz_od)=miesi¥c(Przebieg pracy zawodowej (Data do)) if miesi¥c(licz_do)=miesi¥c(Przebieg pracy zawodowej (Data do)) and not Przebieg pracy zawodowej (W firmie) jest=1 end break end end mcy_odlicz=0 if nak okres_n_od=PierwszyDzieä(licz_od) okres_n_do=PierwszyDzieä(licz_do) if {Kryterium do urlopu nakˆadc¢w}='Pˆaca minimalna' Clear (Pˆaca minimalna) Pˆaca minimalna (Od) = okres_n_od Set (Pˆaca minimalna) Previous (Pˆaca minimalna) if not eof () minimum=Round(Pˆaca minimalna (Wysoko˜†)/2,0.01) end end while okres_n_od <= okres_n_do PobierzOkres(okres_n_od) if Wyr¢¾nikOkresu (BRUTTO) < minimum if jest jest=0 else mcy_odlicz=mcy_odlicz+1 end end okres_n_od=PierwszyDzieä(okres_n_od+40) end end mcy_ang=mcy_ang-mcy_odlicz mcy_ang=Max(mcy_ang,0) mcy_ang=Min(Max(mcy_ang,0),12) if wspet <= 0 or wspet > 1 wspet=1 end et_nor_do_ang=wspet*mcy_ang/12 // et_nor_do_ang dotyczy tylko danego okresu mcy_ang_tot=mcy_ang if wspet=wspet_o if mcy_ang_tot > 0 if i >= poz_num wymiar_dla_wspet=Zaokr¥glenie w g¢r©(wymiar_roboczy*wspet) wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet*mcy_ang_tot/12 break end end wspet_akt=wspet case of i=1 wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) if {Urlopy w ci¥gu roku zaokr¥gla†}='ka¾dy okres osobno' wymiar_proporcjonalny=wymiar_proporcjonalny+Zaokr¥glenie w g¢r© (wymiar_dla_wspet*mcy_ang_tot/12) else wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet*mcy_ang_tot/12 end else wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet_o) if {Urlopy w ci¥gu roku zaokr¥gla†}='ka¾dy okres osobno' wymiar_proporcjonalny=wymiar_proporcjonalny+Zaokr¥glenie w g¢r© (wymiar_dla_wspet*1/12) wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) wymiar_proporcjonalny=wymiar_proporcjonalny+Zaokr¥glenie w g¢r© (wymiar_dla_wspet*(mcy_ang_tot-1)/12) else wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet*(1/12) wymiar_dla_wspet=wymiar_roboczy*wspet wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet*(mcy_ang_tot-1)/12 end end else zmiana=1 // case // of {Strategia zmiany wymiaru etatu}='Liczenie wg stanu na 1-y dzieä miesi¥ca' or {Strategia zmiany wymiaru etatu}='' if i=1 wspet_o=wspet end // wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) if dzieä(ang_od) > 1 wspet=wspet_o end if {Urlopy w ci¥gu roku zaokr¥gla†}='ka¾dy okres osobno' wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) wymiar_proporcjonalny=wymiar_proporcjonalny+Zaokr¥glenie w g¢r© (wymiar_dla_wspet*mcy_ang_tot/12) else wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet*mcy_ang_tot/12 end end zwol=TabNum(i,4) last_ang_do=Kartoteka anga¾y (Data do) if last_ang_do=0 last_ang_do=data(31,12,rok(na_dzien)) end licz_do_prev=licz_do ang_od=TabNum(i,1) i=i+1 end if dnia > 0 et_nor_do_ang=wspet/12 wymiar_dla_wspet=Zaokr¥glenie w g¢r© (wymiar_roboczy*wspet) if {Urlopy w ci¥gu roku zaokr¥gla†}='ka¾dy okres osobno' and wspet <> wspet_o wymiar_proporcjonalny=wymiar_proporcjonalny+Zaokr¥glenie w g¢r© (wymiar_dla_wspet/12) else wymiar_proporcjonalny=wymiar_proporcjonalny+wymiar_dla_wspet/12 end end //info('POLZNOR O LAST : wym_prop='&num2txt(wymiar_proporcjonalny)) Return (Max(wymiar_proporcjonalny,0))