Przykład funkcji i wyzwalacza użytkownika - Instrukcja obsługi programu R2płatnik, R2płatnikPRO, R2płatnikSBO RESET2 Oprogramowanie
Strona używa plików cookies (tzw. ciasteczka) do przechowywania i uzyskiwania dostępu do tej informacji w celach funkcjonalnych, statystycznych i reklamowych.
Użytkownik wyraża zgodę oraz określa warunki przechowywania lub uzyskiwania dostępu do informacji zawartej w plikach cookies za pomocą ustawień przeglądarki.
Dowiedz się więcej odwiedzając strony:

Polityka Prywatności    Regulamin sklepu      Jak wyłączyć cookies?

Przejdź do serwisu

Instrukcja obsługi R2płatnik



Przykład funkcji i wyzwalacza użytkownika

Przykład funkcji i wyzwalacza użytkownika

Załączniki

Ten przykład pokazuje jak w prosty sposób zmodyfikować działanie ewidencji czasu pracy (ECP), tak aby godziny pracy, nadgodziny i godziny nocne były obliczane zgodnie z założeniami użytkownika. Wykorzystano tutaj tylko i wyłącznie funkcje i wyzwalacze użytkownika.

Założenia:

  • godziny zaliczone w ECP mają być zmodyfikowane, aby wcześniejsze wejście poniżej 15 min. względem nominalnej godziny wejścia, nie zaliczało wcześniejszego wejścia, tzn. godzina takiego wejścia będzie tożsama z nominalną godziną wejścia; dopiero wejście wcześniejsze o ponad 15 min. będzie zaliczone
  • analogicznie wyjście; późniejsze wyjście poniżej 15 min. względem nominalnej godziny wyjścia, nie będzie zaliczało późniejszego wyjścia, tzn. godzina takiego wyjścia będzie tożsama z nominalną godziną wyjścia; dopiero wyjście późniejsze o ponad 15 min. będzie zaliczone
  • godziny pracy będą obliczane zgodnie ze zmodyfikowanymi zaliczonymi godzinami wejścia i wyjścia oraz z uwzględnieniem przerwy 20 min.
  • nadgodziny będą obliczane nie jako różnica godzin pracy i godzin nominalnych (jak standardowo), tylko jako różnica pomiędzy zaliczoną godziną wejścia i nominalną godziną wejścia oraz różnica pomiędzy zaliczoną godziną wyjścia i nominalną godziną wyjścia
  • godziny nocne muszą być obliczane zgodnie ze modyfikowanymi zaliczonymi godzinami wejścia i wyjścia

Funkcja użytkownika obliczająca godziny

Funkcja nazywa się CountECP i zawiera następujące parametry wejściowe:

  • @mode int - ponieważ musimy obliczyć wiele wartości (godziny zaliczone, godziny pracy, nagdodziny, itd) należy podać jaką wartość ma zwrócić funkcja; (1 - zaliczona godz.wejścia, 2 - zaliczona godz.wyjścia, 3 - godziny pracy, 4 - nadgodziny 50%, 5 - nadgodziny 100%, 6 - godziny nocne)
  • @gwe float - nominalna godzina wejścia z harmonogramu
  • @gwy float - nominalna godzina wyjścia z harmonogramu
  • @gzalwe float - zaliczona godzina wejścia wyliczona przez program
  • @gzalwy float - zaliczona godzina wyjścia wyliczona przez program
  • @gp float - godziny pracy wyliczone przez program
  • @g50 float - nadgodziny 50% wyliczone przez program
  • @g100 float - nadgodziny 100% wyliczone przez program
  • @gn float - godziny nocne wyliczone przez program
  • @nazwa varchar(30) - nazwa harmonogramu - funkcja ma zmodyfikować godziny tylko dla harmonogramu o nazwie 'AZ'
Definicja funkcji:

CREATE function dbo.CountECP (@mode int, @gwe float, @gwy float, @gzalwe float, @gzalwy float, @gp float, @g50 float, @g100 float, @gn float, @nazwa varchar(30))
returns float
as
begin
if @nazwa='AZ' begin --jeśli harmonogram nazywa się'AZ'

declare @gnod float, @gndo float, @res float

if ( @gwe-@gzalwe<0.01047) and ( @gwe-@gzalwe>0) set @gzalwe= @gwe else set @gzalwe=@gzalwe --jeśli różnica jest mniejsza niż 15 min.(0.01047) zmodyfikuj @gzalwe
if (@gzalwy-@gwy<0.01047) and (@gzalwy-@gwy>0) set @gzalwy= @gwy else set @gzalwy=@gzalwy --jeśli różnica jest mniejsza niż 15 min.(0.01047) zmodyfikuj @gzalwy

set @gp=@gzalwy-@gzalwe-0.01389 --godziny pracy pomniejszone o 20 min.(0.01389) przerwy
set @g50=0

if @gwe-@gzalwe>0 set @g50= @gwe-@gzalwe
if @gzalwy-@gwy>0 set @g50=@g50+@gzalwy-@gwy

set @gn=0
set @gnod=0.91667 --nocne zaczynają się o 6:00
set @gndo=0.25 --nocne kończą się o 22:00

--obliczenie nocnych
if (@gzalwe-round(@gzalwe,0)<@gndo) and (@gzalwe-round(@gzalwe,0)>0) set @gn=@gndo-(@gzalwe-round(@gzalwe,0))
if (@gzalwy-round(@gzalwy,0)>0) and (@gzalwy-round(@gzalwy,0)>@gnod) set @gn=@gn+(@gzalwy-round(@gzalwy,0)-@gnod)

set @g100=0
--obliczenie początku i końca nocnych względem nadgodzin
if @gwe-round(@gwe,0)<@gndo set @gndo=@gwe-round(@gwe,0)
if @gwy-round(@gwy,0)<@gnod set @gnod=@gwy-round(@gwy,0)

--jeśli nadgodziny wypadają w porze nocnej, to mają być 100%
if (@gzalwe-round(@gzalwe,0)<@gndo) and (@gzalwe-round(@gzalwe,0)>0) set @g100=@gndo-(@gzalwe-round(@gzalwe,0))
if (@gzalwy-round(@gzalwy,0)>0) and (@gzalwy-round(@gzalwy,0)>@gnod) set @g100=@g100+(@gzalwy-round(@gzalwy,0)-@gnod)

if @g100>0 set @g50=@g50-@g100 --pomniejsz nadgodziny 50% o 100%

--korekta wyliczonych godzin - w wyniku obliczeń są troszkę za małe
set @gzalwe=@gzalwe+0.00001
set @gzalwy=@gzalwy+0.00001
set @gp=@gp+0.00001
set @g50=@g50+0.00001
set @g100=@g100+0.00001
set @gn=@gn+0.00001
end

--w zależności od @mode zwróć odpowiednią wartość
if @mode=1 set @res=@gzalwe
if @mode=2 set @res=@gzalwy
if @mode=3 set @res=@gp
if @mode=4 set @res=@g50
if @mode=5 set @res=@g100
if @mode=6 set @res=@gn

return @res

end

Wyzwalacz użytkownika modyfikujący godziny w tabeli ECP na poziomie bazy danych

Wyzwalacz jest założony na tabeli EWIDENCJA CZASU PRACY i jest rodzaju AlwaysAfterPost, ponieważ będzie uruchamiany także podczas importu z czytnika RCP. Wyzwalacz wywołuje 6 razy funkcję CountECP aby wyliczyć wartości wszystkich potrzebnych godzin. Na wejściu funkcji podajemy wartości godzin z aktualnego rekordu ECP, wyliczone przez program - nazwy pól w nawiasach klamrowych {}

Definicja wyzwalacza:

if {SZABLON HARMONOGRAMU CZASU PRACY.NAZWA}='AZ' begin

declare @gzalwe float, @gzalwy float, @gp float, @g50 float, @gn float, @g100 float

set @gzalwe = dbo.CountECP(1,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})-2

set @gzalwy = dbo.CountECP(2,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})-2

set @gp = dbo.CountECP(3,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})

set @g50 = dbo.CountECP(4,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})

set @g100 = dbo.CountECP(5,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})

set @gn = dbo.CountECP(6,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT}, {SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})

update ECP set [GZALWE]=@gzalwe, [GZALWY]=@gzalwy, [GPFAKT]=@gp, [G50FAKT]=@g50, [G100FAKT]=@g100, [GNFAKT]=@gn where [X_I]={X_I}

end

Wyzwalacz ten modyfikuje rekord w tabeli ECP w bazie danych, jednakże zmiany wprowadzane przez użytkownika w oknie ECP nie będą widoczne on-line, tylko dopiero po zatwierdzeniu rekordu (wyzwalacz jest AfterPost) Aby użytkownik widział zmiany godzin na bieżąco podczas edytowania wpisu w ECP, trzeba jeszcze założyć drugi wyzwalacz na poziomie aplikacji.

Wyzwalacz użytkownika modyfikujący godziny w tabeli ECP na poziomie aplikacji

Wyzwalacz jest założony na tabeli EWIDENCJA CZASU PRACY i jest rodzaju OnFieldChange. Wyzwalacz wywołuje 6 razy funkcję CountECP aby wyliczyć wartości wszystkich potrzebnych godzin, ale tym razem modyfikuje on poszczególne pola w tabeli ECP na poziomie aplikacji wykorzystując polecenie {nazwa_pola}:=
Aby wyzwalacz nie wykonywał się dla zmian wszystkich pól rekordu, co spowolniłoby działanie programu, wykorzystano klauzulę onchange={pole}, która powoduje wykonanie kodu po zmianie wartości tylko jednego pola. Wykonanie każdej sekcji wyzwalacza jest oddzielone klauzulą go (można napisać 6 oddzielnych wyzwalaczy dla modyfikacji każdego z 6 pól)

Definicja wyzwalacza:

onchange={GZALWE}
{GZALWE}:=select dbo.CountECP(1,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

onchange={GZALWY}
{GZALWY}:=select dbo.CountECP(2,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

onchange={GPFAKT}
{GPFAKT}:=select dbo.CountECP(3,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

onchange={G50FAKT}
{G50FAKT}:=select dbo.CountECP(4,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

onchange={G100FAKT}
{G100FAKT}:=select dbo.CountECP(5,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

onchange={GNFAKT}
{GNFAKT}:=select dbo.CountECP(6,{HARMONOGRAM CZASU PRACY.GWE},{HARMONOGRAM CZASU PRACY.GWY},{GZALWE},{GZALWY},{GPFAKT},{G50FAKT},{G100FAKT},{GNFAKT},{SZABLON HARMONOGRAMU CZASU PRACY.NAZWA})
go

Efekt działania funkcji i wyzwalaczy

UWAGA Jeśli skopiujemy tekst funkcji i wyzwalaczy z helpa do programu, należy z ich definicji usunąć komentarze (--tekst_komentarza)

Harmonogram czasu pracy:

Przypadek 1. Pracownik przyszedł 10 min.za wcześnie i wyszedł 10 min. po nominalnym czasie. Zgodznie z założeniami zaliczone godziny wejścia i wyjścia zostały obcięte do nominalnych godzin wejścia/wyjścia (5:40 do 14:00). Godziny pracy wynoszą tyle co nominał (8:00). Zostały obliczone tylko godziny nocne (20min.)

Przypadek 2. Pracownik przyszedł 20 min.za wcześnie i wyszedł 10 min. po nominalnym czasie. Zgodznie z założeniami zaliczona godzina wyjścia została obcięta do nominalnej godziny wyjścia (14:00), zaś godzina wejścia została zaliczona. Godziny pracy wynoszą (8:20). Zostały obliczone nadgodziny 100% (20 min.), ponieważ wypadają w porze nocnej. Godziny nocne wyniosły (40 min.)

Przypadek 3. Pracownik przyszedł 20 min. za wcześnie i wyszedł 20 min. po nominalnym czasie. Zgodnie z założeniami godziny wejścia i wyjścia zostały zaliczone. Godziny pracy wynoszą (8:40). Zostały obliczone nadgodziny 100% (20 min.), ponieważ wypadają w porze nocnej - przed wejściem, oraz nagdodziny 50% po wyjściu (20 min.). Godziny nocne wyniosły (40 min.)