Mai jos vom exemplifica si alte situatii in care formula de pe nr. tichelor de masa este diferita:
Situatia 1 - Formula care tine cont de nr. de zile lucrate, zilele de CO/CM, insa cu posibilitatea de a se modifica manual nr. de tichete
In Salarii -> Metode de calcul -> NrTic schimbam formula cu cea de mai jos -> Salvez
IF EXISTS(SELECT c.id
FROM c12 c
WHERE c.anluna = @anluna AND c.pct_lcr = @pl_c12 AND c.id = @id_c12 AND cm.calc_tic=0
)
SELECT @retval = c.nr_tic
FROM c12 c
WHERE c.anluna = @anluna AND c.pct_lcr = @pl_c12 AND c.id = @id_c12
ELSE
SELECT @retval = IIF(AVG(c.nr_tic) = 0,dbo.minim(ISNULL(CEILING(SUM(b.ore_reg / b.ore_norm - b.zz_diurna)), 0),@ore_lun/8),AVG(c.nr_tic))
FROM blc_view b
Astfel, in salarii, la un calcul pe lichidare pe un salariat, sunt calculate implicit 22 tichete de masa conform nr. de zile lucratoare din luna:
Cu formula de mai sus, avem posibilitatea de a modifica manual nr. de tichete - dublu click pe linia cu lichidare -> modificam nr. tichete de masa ->salvez
Situatia 2- Formula care tine cont de nr. de zile lucrate, zilele de CO/CM, dar si de jurnalizarea de pe contract
In Salarii -> Metode de calcul -> NrTic schimbam formula cu cea de mai jos -> Salvez
DECLARE @data_fin_mes DATE = dbo.data_fin(@anluna);SET @retval = 0;
IF EXISTS (SELECT 1 FROM c12 c
WHERE c.anluna = @anluna
AND c.pct_lcr = @pl_c12
AND c.id = @id_c12
AND ISNULL(cm.calc_tic, 0) = 0
)
{expand:Show more}
AND NOT EXISTS (SELECT 1 FROM c12 c
INNER JOIN blc_view b
ON b.anluna = c.anluna
AND b.pl_c12 = c.pct_lcr
INNER JOIN sal_pontaj p
ON b.pct_lcr = p.pl_blc
AND p.anluna = b.anluna
WHERE c.anluna = @anluna
AND c.pct_lcr = @pl_c12
AND c.id = @id_c12
AND p.data >= CONVERT(DATE, LEFT(CONVERT(VARCHAR(6), @anluna), 4)
+ RIGHT(CONVERT(VARCHAR(6), @anluna), 2) + '01'
)
AND p.data <= @data_fin_mes
AND ISNULL(cm.calc_tic, 0) = 1
)
BEGIN
SELECT @retval = c.nr_tic
FROM c12 c
WHERE c.anluna = @anluna
AND c.pct_lcr = @pl_c12
AND c.id = @id_c12;
END
ELSE
BEGIN
DECLARE @zile_eligibile INT;
SELECT @zile_eligibile = COUNT(DISTINCT p.data)
FROM c12 c
INNER JOIN blc_view b
ON b.anluna = c.anluna
AND b.pl_c12 = c.pct_lcr
INNER JOIN sal_pontaj p
ON b.pct_lcr = p.pl_blc
AND p.anluna = b.anluna
CROSS APPLY dbo.sal_CM_contracte(
) cm
WHERE c.anluna = @anluna
AND c.pct_lcr = @pl_c12
AND c.id = @id_c12
AND p.data >= CONVERT(
DATE,
LEFT(CONVERT(VARCHAR(6), @anluna), 4)
+ RIGHT(CONVERT(VARCHAR(6), @anluna), 2) + '01'
)
AND p.data <= @data_fin_mes
AND ISNULL(cm.calc_tic, 0) = 1;
SELECT @retval = dbo.minim(ISNULL(CEILING(SUM(b.ore_reg / NULLIF(b.ore_norm, 0)- b.zz_diurna)),0),ISNULL(@zile_eligibile, 0))
FROM blc_view b
WHERE b.anluna = @anluna
AND b.pl_c12 = @pl_c12
AND b.id_c12 = @id_c12;
END;
In exemplul de mai jos, pe contractul de munca al salariatului, avem o modificare de contract de acordare tichete de masa, cu data consemnare 01.09 si inca o modificare de eliminare acordare tichete de masa cu data de 20.09; practic, salariatul va primi tichete de masa doar pentru zilele lucratoare din perioada 01 - 19.09 inclusiv , respectiv 14 tichete.
Situatia 3- Formula care tine cont de nr. de zile lucrate, zilele de CO/CM, dar si de orele de tip liber in compensare sarbatori legale
In Salarii -> Metode de calcul -> NrTic schimbam formula cu cea de mai jos -> Salvez
IF EXISTS(SELECT c.id
FROM c12 c
WHERE c.anluna = @anluna AND c.pct_lcr = @pl_c12 AND c.id = @id_c12 AND cm.calc_tic=0
)
SELECT @retval = c.nr_tic
FROM c12 c
WHERE c.anluna = @anluna AND c.pct_lcr = @pl_c12 AND c.id = @id_c12
ELSE
SELECT @retval = dbo.minim(ISNULL(CEILING(SUM((b.ore_reg+b.ore_lib_sar) / b.ore_norm - b.zz_diurna)), 0),@ore_lun/8)
FROM blc_view b
Mai multe detalii despre diferenta din pontaj intre ore de tip "liber in compensare sarbatori legale" si "lucrate in compensare sarbatori legale" le regasiti in imagine:
In exemplul acesta, vom adauga in pontaj ore de tip "libere in compensare sarbatori legale"