Změny pracovních kalendářů zaměstnanců (sestava)

Z Prirucky

Změny pracovních kalendářů zaměstnanců (sestava) je komplex sestav pro Generátor sestav II.

Prvotním podnětem byla možnost individuální úpravy dovolené na konci roku u zaměstnanců s určitým typem a číslem kalendáře. Podmínkou ovšem bylo, že zaměstnanec v tomto kalendáři odpracoval celý rok (nebo většinu roku).

hd 60928

View

Sestava se tedy chtěla vytvářet před koncem roku, ještě v aktuálním období posledního zpracování mezd (12. měsíc) - má tedy brát v potaz údaje jak z historie, tak z aktuálního období. Proto pro zjednodušení následného skriptu sestavy je vytvořeno view jako souhrn údajů z historie a z aktuálního období.

Menu: Systom/Správa databáze/Scripty pro úpravu databáze - SQL script spuštěný po úpravě databáze. Do této části vložte následující obsah. Pak proveďte úpravu databáze - po úpravě bude vytvořeno view dle definice.

create view v_rozvrhyzamdov AS
select A.os_cislo, A.prijmeni, A.jmeno, A.titul, PMES.cislo_pom, PMES.typ_kal, PMES.smena, D21A.narok_letos, PMES.datum 
from pracovnici A, pom_mes PMES, dovolena21 D21A
where A.os_cislo = PMES.os_cislo and
A.os_cislo = D21A.os_cislo and PMES.cislo_pom = D21A.cislo_pom and PMES.datum = D21A.datum 

union
select A.os_cislo, A.prijmeni, A.jmeno, A.titul, B.cislo_pom, B.typ_kal, B.smena, D21B.narok_letos, PARM.datum_prvni 
from pracovnici A, prac_pom B, par_map PARM, dovolena21 D21B
where A.os_cislo = B.os_cislo and
A.os_cislo = D21B.os_cislo and B.cislo_pom = D21B.cislo_pom and PARM.datum_prvni = D21B.datum;

Sestava po zaměstnancích

Zmeny pracovnich kalendaru zamestnancu-Vsichni.png

  • typ_kal_od ... typ kalendáře v měsíci "Od"
  • smena_od ... číslo a název kalendáře v měsíci "Od"
  • typ_kal_do ... typ kalendáře v měsíci "Do"
  • smena_do ... číslo a název kalendáře v měsíci "Do"
  • pocet_kalsme ... počet různých kalendářů (jak typ tak název) za období "Od" - "Do".
  • narok_letos ... nárok na dovolenou v daném období (v hodinách)

select A.os_cislo, A.prijmeni, A.jmeno, A.datum_nastupu, A.datum_vystupu, B.cislo_pom, B.datum_nastupu, B.datum_ukonc,
case 
(select typ_kal from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%)
when 1 then '1 - Běžný'
when 2 then '2 - Podobně jako 1, sv tar'
when 4 then '4 - Měsíční'
when 5 then '5 - Týdenní'
when 6 then '6 - Běžný bez dopoč.'
when 7 then '7 - Cyklický'
when 8 then '8 - KPD'
when 9 then '9 - Individuální'
else 
end as typ_kal_od,


case 
(select cast(typ_kal as varchar) from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%)
when '1' then 
case 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%)
when 1 then '1 - jednosměnný' when 2 then '2 - dvousměnný' when 3 then '3 - třísměnný' when 4 then '4 - nepřetržitý' else 
end

when '4' then
(
select cast(cis_roz as varchar) + ' - ' + naz_roz from mes_fondy where (cast(rok as varchar)+ cast(mesic as varchar) + cast(cis_roz as varchar)) = 
(
select 
(cast(year(VIE.datum) as varchar) + cast(month(VIE.datum) as varchar) + cast(smena as varchar)) from v_rozvrhyzamdov VIE 
where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%
)
)


when '5' then
(select cast(cis_roz as varchar) + ' - ' + naz_roz from tyd_rozvrhy where cis_roz = 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%))


when '7' then
(select cast(cis_roz as varchar) + ' - ' + naz_roz from cykl_rozvrhy where cis_roz = 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = %DATUMOD%))

else 
end as smena_od,


(select typ_kal from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and year(VIE.datum) = year(%DATUMDO%) and month(VIE.datum) =   month(%DATUMDO%)) as typ_kal_do,
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and year(VIE.datum) = year(%DATUMDO%) and month(VIE.datum) =  month(%DATUMDO%)) as smena_do,

(select count(distinct concat(str(typ_kal),smena)) 
from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and 
VIE.cislo_pom = B.cislo_pom and VIE.datum >= %DATUMOD% and VIE.datum <= %DATUMDO%) as pocet_kalsme,
D21.narok_letos

from pracovnici A, prac_pom B, dovolena21 D21 where
A.os_cislo = B.os_cislo and 
B.os_cislo = D21.os_cislo and B.cislo_pom = D21.cislo_pom  and
year(D21.datum) =year(%DATUMDO%) and month(D21.datum) = month(%DATUMDO%)
order by A.prijmeni

Sestava za zaměstnance

Před vytvořením sestavy si systém vyžádá zadání osobního čísla zaměstnance.

Zmeny pracovnich kalendaru zamestnancu-Jedinec.png

select A.os_cislo, A.prijmeni, A.jmeno, B.cislo_pom, B.datum_nastupu, B.datum_ukonc,
case 
(select typ_kal from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum)
when 1 then '1 - Běžný'
when 2 then '2 - Podobně jako 1, sv tar'
when 4 then '4 - Měsíční'
when 5 then '5 - Týdenní'
when 6 then '6 - Běžný bez dopoč.'
when 7 then '7 - Cyklický'
when 8 then '8 - KPD'
when 9 then '9 - Individuální'
else 
end as typ_kal,

VI.smena, 

case 
(select cast(typ_kal as varchar) from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum)
when '1' then 
case 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum)
when 1 then '1 - jednosměnný' when 2 then '2 - dvousměnný' when 3 then '3 - třísměnný' when 4 then '4 - nepřetržitý' else 
end

when '4' then
(
select naz_roz from mes_fondy where (cast(rok as varchar)+ cast(mesic as varchar) + cast(cis_roz as varchar)) = 
(
select 
(cast(year(VIE.datum) as varchar) + cast(month(VIE.datum) as varchar) + cast(smena as varchar)) from v_rozvrhyzamdov VIE 
where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum
)
)

when '5' then
(select naz_roz from tyd_rozvrhy where cis_roz = 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum))

when '7' then
(select naz_roz from cykl_rozvrhy where cis_roz = 
(select smena from v_rozvrhyzamdov VIE where VIE.os_cislo = B.os_cislo and VIE.cislo_pom = B.cislo_pom and VIE.datum = VI.datum))

else 
end as smena_nazev,

VI.narok_letos, VI.datum
from pracovnici A, prac_pom B, v_rozvrhyzamdov VI
where
A.os_cislo = B.os_cislo and A.os_cislo = VI.os_cislo and
B.cislo_pom = VI.cislo_pom and 
A.os_cislo = %OSCISLO% and
VI.datum >= %DATUMOD% and VI.datum <= %DATUMDO%
order by VI.datum

Odkazy