Cafeneaua contabilă

Formule calcul sporuri la unitatile bugetare

Adaugat 3 Mar 2016 | Prioritate N | Tags spor vechime, spor diferenta clasa, spor conducere, spor diferenta clasa vechime | Categorie Salarizare

La unitatile bugetare calculul sporurilor se face putin diferit fata de cel de la agentii economici. Astfel procentul sporului de vechime nu se poate schimba automat (cand trece la o alta transa de vechime) ci numai in urma unei decizii de salarizare sporul de vechime se aplica la salariul de incadrare si la sporul de conducere, sporul de diferenta de clasa se aplica la salariul de incadrare , la sporul de conducere si la sporul de vechime sporul de diferenta de clasa vechime se aplica la salariul de incadrare , la sporul de conducere, la sporul de vechime si la sporul de diferenta de clasa. etc. Aceste sporuri intra si in calculul CO. Ca atare formulele acestora trebuie modificate si trebuie stabilita o anumita ierarhie (prioritate) in calculul lor.
Iata un exemplu:
SPORUL DE DIFERENTA CLASA VECHIME
Spor diferenta clasa vechime(id.33) = ( salariu_negociat+spor conducere(id.9)+spor vechime(id.10)+spor diferenta clasa(id.16) )*procent/100 * (ore_regie/ore_luna) (se aplica la perioada lucrata si intra in calculul CO)

Spor conducere(id.9)->prioritate 1
Spor vechime(id.10)->prioritate 2
Spor diferenta clasa(id.16)->prioritate 3
Spor diferenta clasa vechime(id.33)->prioritate 4

Formula de calcul:

IF @pt_co = 0
SELECT @ret_val = ((b.sal_neg+ dbo.sal_blc_get_val_spor(b.anluna, b.pct_lcr, b.id, 1, 9)+dbo.sal_blc_get_val_spor(b.anluna,b.pct_lcr,b.id,1,10)+dbo.sal_blc_get_val_spor(b.anluna,b.pct_lcr,b.id,1,16))*(b.ore_reg+b.ore_aco+b.ore_ate+b.ore_rep)*8*s.procent)/(@ore_lun*b.ore_norm*100),
@ret_ore = b.ore_reg+b.ore_aco+b.ore_ate+b.ore_rep,
@ret_proc = s.procent
FROM blc_linii s
INNER JOIN blc b ON s.anluna=b.anluna AND s.pl_blc=b.pct_lcr AND s.id_blc=b.id
WHERE s.anluna=@anluna AND s.pct_lcr=@pl_sp AND s.id=@id_sp
ELSE
SELECT @ret_val = ((b.sal_neg+ dbo.sal_blc_get_val_spor(b.anluna, b.pct_lcr, b.id, 1, 9)+dbo.sal_blc_get_val_spor(b.anluna,b.pct_lcr,b.id,1,10)+dbo.sal_blc_get_val_spor(b.anluna,b.pct_lcr,b.id

Răspuns 1 Formule calcul sporuri la unitatile bugetare

Adaugat 4 Mar 2016

Pentru sporurile care cuprind in formula lor alte sporuri, exista campul ordine de calcul.
Functia pe care ati folosit-o, Sal_blc_get_val_spor, aduce sporul calculat si salvat la un pas anterior.

Mai exista posibilitatea de a caclula valoarea sporului pentru concediu, la valoare integrala, prin aplicarea catorva modificari.
De exemplu, daca in calculul sporului de vechime dorim sa folosim sporul de conducere procedam astfel:

IF @pt_co = 0
SELECT @ret_val = (b.sal_neg+ dbo.sal_blc_get_val_spor(b.anluna, b.pct_lcr, b.id, 1, 9))*(b.ore_reg+b.ore_aco+b.ore_ate+b.ore_rep)*s.procent/100/@ore_lun,
@ret_ore = b.ore_reg+b.ore_aco+b.ore_ate+b.ore_rep,
@ret_proc = s.procent
FROM blc_linii s
INNER JOIN blc b ON s.anluna=b.anluna AND s.pl_blc=b.pct_lcr AND s.id_blc=b.id
WHERE s.anluna=@anluna AND s.pct_lcr=@pl_sp AND s.id=@id_sp
ELSE
BEGIN
DECLARE @pl_blc_spor SMALLINT, @id_blc_spor NUMERIC
SELECT @pl_blc_spor = s.pct_lcr, @id_blc_spor = s.id
FROM blc_linii s
INNER JOIN blc b ON s.anluna=b.anluna AND s.pl_blc=b.pct_lcr AND s.id_blc=b.id AND s.pl_spor = 1 AND s.id_spor = 9
WHERE b.anluna = @anluna AND b.pl_cm = @pl_cm AND b.id_cm = @id_cm

SELECT @ret_val = (b.sal_neg+r.valoare)*s.procent/100, @ret_ore = @ore_lun, @ret_proc = s.procent
FROM blc_linii s
INNER JOIN blc b ON s.pl_blc=b.pct_lcr AND s.id_blc=b.id
CROSS APPLY dbo.sal_calc_spor_cond(b.anluna, @ore_lun, @pl_blc_spor, @id_blc_spor, b.pct_lcr, b.id, b.pl_cm, b.id_cm, 1) r
WHERE s.anluna=@anluna AND s.pct_lcr=@pl_sp AND s.id=@id_sp
INSERT INTO @ret_table (valoare, ore, procent) VALUES (@ret_val, @ret_ore, @ret_proc)
END
RETURN
END

Putin cam complicat :(, dar important este ca exista solutie :).

Trebuie evitate cazurile de imbricare a sporurilor, deoarece calculul ar intra intr-o bucla infinita.