Resultados de Liquidación web

Hola gente. Estamos en proceso de dejar el liquidador de Escritorio para comenzar con el liquidador web. Estamos en la versión .3.5.0

En algunas pruebas pasaba que liquidamos a los 4000 agentes (en 2 minutos) y al tocar el botón “Resultado” se queda colgado el reporte ese.

Logré llegar a la consulta que ejecuta ese botón y es la siguiente

 SELECT dh01.nro_legaj,
        dh01.desc_appat || ', ' || dh01.desc_nombr AS agente,
        temp_total_liqui.nro_liqui,
        COALESCE(temp_total_liqui.rem_conap, 0) AS rem_conap,
        COALESCE(temp_total_liqui.rem_sinap, 0) AS rem_sinap,
        COALESCE(temp_total_liqui.rem_otras, 0) AS rem_otras,
        COALESCE(temp_total_liqui.sal_familiar, 0) AS sal_familiar,
        COALESCE(temp_total_liqui.descuentos, 0) AS descuentos,
        COALESCE(temp_total_liqui.ap_patronales, 0) AS ap_patronales,
        (COALESCE(rem_conap, 0) + COALESCE(rem_sinap, 0) + COALESCE(rem_otras, 0)) AS haberes,
        (COALESCE(rem_conap, 0) + COALESCE(rem_sinap, 0) + COALESCE(rem_otras, 0) + COALESCE(sal_familiar, 0) - COALESCE(descuentos, 0)) AS importe_neto,
        (COALESCE(rem_conap, 0) + COALESCE(rem_sinap, 0) + COALESCE(rem_otras, 0) + COALESCE(sal_familiar, 0) + COALESCE(ap_patronales, 0)) AS costo_total
FROM
        mapuche.dh01 LEFT OUTER JOIN (  
        SELECT
                nro_liqui,
                dh01.nro_legaj,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'C' AND dh01.nro_legaj = dh01_2.nro_legaj) AS rem_conap,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'S' AND dh01.nro_legaj = dh01_2.nro_legaj) AS rem_sinap,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'O' AND dh01.nro_legaj = dh01_2.nro_legaj) AS rem_otras,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'F' AND dh01.nro_legaj = dh01_2.nro_legaj) AS sal_familiar,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'D' AND dh01.nro_legaj = dh01_2.nro_legaj) AS descuentos,
                (SELECT (SUM(impp_conce))::numeric(10,2) AS rem FROM mapuche.dh01 dh01_2 JOIN mapuche.dh21 ON(dh01_2.nro_legaj = dh21.nro_legaj AND dh21.nro_liqui = '510') WHERE codn_conce > 0 AND nro_orimp <> 0 AND tipo_conce = 'A' AND dh01.nro_legaj = dh01_2.nro_legaj) AS ap_patronales
        FROM
                mapuche.dh01 JOIN mapuche.dh21 ON (dh01.nro_legaj = dh21.nro_legaj)
        WHERE
                (codn_conce > 0) AND (nro_orimp <> 0) AND
                (dh01.nro_legaj IN (SELECT par_solicitud_elementos.id_elemento FROM mapuche.par_solicitud_elementos WHERE par_solicitud_elementos.id_solicitud = 3250)) AND
                (nro_liqui = '510') AND
                (dh01.tipo_estad != 'P' OR dh01.tipo_estad IS NULL)
        GROUP BY 1,2
        ORDER BY 1,2
        ) AS temp_total_liqui ON (dh01.nro_legaj = temp_total_liqui.nro_legaj)
WHERE
        (COALESCE(rem_conap, 0) + COALESCE(rem_sinap, 0) + COALESCE(rem_otras, 0) + COALESCE(sal_familiar, 0) - COALESCE(descuentos, 0)) > 0 AND 
				 (dh01.nro_legaj IN (SELECT par_solicitud_elementos.id_elemento FROM mapuche.par_solicitud_elementos 
									 WHERE par_solicitud_elementos.id_solicitud = 3250)) 
									 AND (dh01.tipo_estad != 'P' OR dh01.tipo_estad IS NULL)
ORDER BY
        agente,nro_legaj
LIMIT 10 OFFSET 0

La cuestión es que ejecutando esa consulta se queda colgado PgAdmin también por lo que supongo es un error de datos.
Haciendo pruebas llegué a que comentando la última aparición de la línea “AND (dh01.tipo_estad != ‘P’ OR dh01.tipo_estad IS NULL)” la consulta se ejecuta.

Es un error muy dificil de reproducir ya que apareció hace unas semanas y hoy nuevamente cuando hacíamos pruebas de liquidación. Hoy incluso después de mirar logs, ejecutar la consulta por partes y hacer un recorrido de toda la tabla dh01 la consulta se terminó ejecutando y por web también anduvo bien pero nos hizo perder un par de horas de pruebas.

No se por donde empezar a mirar

Hola Marco, como estas?
No pudimos reproducir el comportamiento que nos mencionas, y no tenemos reportes de otras instituciones al respecto.
Se me ocurre que puede haber pasado que la base no tenia actualizadas las estadísticas, y que esto pueda haber desencadenado una mala planificación en la ejecución de la consulta.
Les pedimos que si logran tener una base con la que este comportamiento se congela, nos avisen y coordinamos para poder reproducir el comportamiento y evaluar que es lo que sucede.

Saludos, Nico.

Asumo que es un error de datos. Habían mas de 1000 agentes que figuraban como Activos sin cargo hace tiempo. Manualmente(por SQL sobre la base directamente) se pasaron a Pasivos (para que el liquidador no los tome) y el error saltó.

Hoy, despues de varias liquidaciones el error no aparece. Igualmente es sólo el reporte de Resultados de la liquidación. Cada agente liquidado está correcto y podemos visualizarlo en Informes → Liquidación → Detalle de liquidación.

Estoy atento al momento que surja otra vez el error.

Gracias!