--VISTAS CREATE VIEW COMPOSICION_SALARIAL_ACT WITH ENCRYPTION AS SELECT EMP.EMPLEADO,DOCTO_IDENT,LTRIM(RTRIM(EMP.NOMBRE))NOMBRE,LTRIM(RTRIM(EMP.APELLIDO))APELLIDO, CONVERT(VARCHAR,HSL.F_AUMENTO,103)F_AUMENTO,TMT.MOTIVO, CASE WHEN EMP.ESTADO = '' THEN 'ACTIVO' ELSE 'RETIRADO' END ESTADO, EMP.CCOSTO,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('CCOSTO',EMP.CCOSTO,'',EMP.DIVISION)) DESCCOSTO, EMP.OFICIO,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('OFICIO',EMP.OFICIO,'',EMP.DIVISION)) DESOFICIO, EMP.DIVISION,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('DIVISION',EMP.DIVISION,'',EMP.DIVISION)) DESDIVISION, HSL.TPSALARIO, ROUND(((SELECT CASE WHEN EMPSAL.JORNADA='C' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*1 WHEN EMPSAL.JORNADA='P' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*(EMPSAL.N_HRS_P/(TNM.HRS_DIA*TNM.DIAS_P)) ELSE ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0) END AS SALARIO FROM EMP EMPSAL INNER JOIN HSL ON HSL.EMPLEADO=EMPSAL.EMPLEADO AND HSL.CNSHSL=EMPSAL.CNSHSL INNER JOIN TNM ON EMPSAL.TIPO_NOM=TNM.TIPO_NOM WHERE EMPSAL.EMPLEADO=EMP.EMPLEADO )*100.0)/(100.0-ISNULL(PORCDESAL,0)),2)SALARIO_AL100, (SELECT CASE WHEN EMPSAL.JORNADA='C' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*1 WHEN EMPSAL.JORNADA='P' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*(EMPSAL.N_HRS_P/(TNM.HRS_DIA*TNM.DIAS_P)) ELSE ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0) END AS SALARIO FROM EMP EMPSAL INNER JOIN HSL ON HSL.EMPLEADO=EMPSAL.EMPLEADO AND HSL.CNSHSL=EMPSAL.CNSHSL INNER JOIN TNM ON EMPSAL.TIPO_NOM=TNM.TIPO_NOM WHERE EMPSAL.EMPLEADO=EMP.EMPLEADO )SALARIO_FLEX, HSL.PORCDESAL,EMPB.CNSEMPB,EMPB.PLANTILLAPATRON,EMPB.DESCRIPCION NOM_PLANTILLA,EMPC.CONCEPTO,CPT.DESCRIPCION NOM_CONCEPTO,EMPC.VALOR FROM HSL INNER JOIN EMP ON EMP.CNSHSL=HSL.CNSHSL LEFT JOIN TMT ON TMT.COD_MOTIVO=HSL.COD_MOTIVO LEFT JOIN EMPB ON EMPB.CNSEMPB=HSL.CNSEMPB LEFT JOIN EMPC ON EMPC.EMPLEADO=HSL.EMPLEADO AND EMPC.CNSEMPB=EMPB.CNSEMPB LEFT JOIN CPT ON CPT.CONCEPTO=EMPC.CONCEPTO --WHERE ISNULL(EMP.ESTADO,'')<='' ---------- CREATE VIEW COMPOSICION_SALARIAL_GRAL WITH ENCRYPTION AS SELECT EMP.EMPLEADO,DOCTO_IDENT,LTRIM(RTRIM(EMP.NOMBRE))NOMBRE,LTRIM(RTRIM(EMP.APELLIDO))APELLIDO, CONVERT(VARCHAR,HSL.F_AUMENTO,103)F_AUMENTO,TMT.MOTIVO, CASE WHEN EMP.ESTADO = '' THEN 'ACTIVO' ELSE 'RETIRADO' END ESTADO, EMP.CCOSTO,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('CCOSTO',EMP.CCOSTO,'',EMP.DIVISION)) DESCCOSTO, EMP.OFICIO,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('OFICIO',EMP.OFICIO,'',EMP.DIVISION)) DESOFICIO, EMP.DIVISION,(SELECT FN_DESCRIPCION_INDICADORES.DESCRIPCION FROM FN_DESCRIPCION_INDICADORES('DIVISION',EMP.DIVISION,'',EMP.DIVISION)) DESDIVISION, HSL.TPSALARIO, ROUND(((SELECT CASE WHEN EMPSAL.JORNADA='C' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*1 WHEN EMPSAL.JORNADA='P' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*(EMPSAL.N_HRS_P/(TNM.HRS_DIA*TNM.DIAS_P)) ELSE ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0) END AS SALARIO FROM EMP EMPSAL INNER JOIN HSL ON HSL.EMPLEADO=EMPSAL.EMPLEADO AND HSL.CNSHSL=EMPSAL.CNSHSL INNER JOIN TNM ON EMPSAL.TIPO_NOM=TNM.TIPO_NOM WHERE EMPSAL.EMPLEADO=EMP.EMPLEADO )*100.0)/(100.0-ISNULL(PORCDESAL,0)),2)SALARIO_AL100, (SELECT CASE WHEN EMPSAL.JORNADA='C' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*1 WHEN EMPSAL.JORNADA='P' THEN ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0)*(EMPSAL.N_HRS_P/(TNM.HRS_DIA*TNM.DIAS_P)) ELSE ISNULL(ROUND((HSL.SALARIO*TNM.HORS_POR_MES)/(TNM.DIAS_P*TNM.HRS_DIA),0),0) END AS SALARIO FROM EMP EMPSAL INNER JOIN HSL ON HSL.EMPLEADO=EMPSAL.EMPLEADO AND HSL.CNSHSL=EMPSAL.CNSHSL INNER JOIN TNM ON EMPSAL.TIPO_NOM=TNM.TIPO_NOM WHERE EMPSAL.EMPLEADO=EMP.EMPLEADO )SALARIO_FLEX, HSL.PORCDESAL,EMPB.CNSEMPB,EMPB.PLANTILLAPATRON,EMPB.DESCRIPCION NOM_PLANTILLA, EMPC.CONCEPTO,CPT.DESCRIPCION NOM_CONCEPTO,EMPC.VALOR FROM HSL INNER JOIN EMP ON EMP.EMPLEADO=HSL.EMPLEADO LEFT JOIN TMT ON TMT.COD_MOTIVO=HSL.COD_MOTIVO LEFT JOIN EMPB ON EMPB.CNSEMPB=HSL.CNSEMPB LEFT JOIN EMPC ON EMPC.EMPLEADO=HSL.EMPLEADO AND EMPC.CNSEMPB=EMPB.CNSEMPB LEFT JOIN CPT ON CPT.CONCEPTO=EMPC.CONCEPTO -------------- CREATE PROCEDURE PRO_COMPOSICION_SALARIAL_ACT ( @EMPLEADO VARCHAR(20)=NULL, @DOCTO_IDENT VARCHAR(20)=NULL, @OFICIO VARCHAR(20)=NULL, @CCOSTO VARCHAR(20)=NULL, @ESTADO VARCHAR(8)=NULL, @DIVISION VARCHAR(20)=NULL, @TPSALARIO VARCHAR(10)=NULL ) AS BEGIN DECLARE @WHERE NVARCHAR(MAX)='' IF(@EMPLEADO IS NOT NULL AND LEN(@EMPLEADO)>0) SET @WHERE+=' AND D.EMPLEADO='''+@EMPLEADO+''' ' IF(@DOCTO_IDENT IS NOT NULL AND LEN(@DOCTO_IDENT)>0) SET @WHERE+=' AND D.DOCTO_IDENT='''+@DOCTO_IDENT+''' ' IF(@OFICIO IS NOT NULL AND LEN(@OFICIO)>0) SET @WHERE+=' AND D.OFICIO='''+@OFICIO+''' ' IF(@CCOSTO IS NOT NULL AND LEN(@CCOSTO)>0) SET @WHERE+=' AND D.CCOSTO='''+@CCOSTO+''' ' IF(@ESTADO IS NOT NULL AND LEN(@ESTADO)>0) SET @WHERE+=' AND D.ESTADO='''+@ESTADO+''' ' IF(@DIVISION IS NOT NULL AND LEN(@DIVISION)>0) SET @WHERE+=' AND D.DIVISION='''+@DIVISION+''' ' IF(@TPSALARIO IS NOT NULL AND LEN(@TPSALARIO)>0) SET @WHERE+=' AND D.TPSALARIO='''+@TPSALARIO+''' ' SELECT DISTINCT D.CONCEPTO,CPT.DESCRIPCION NOM_CPT INTO #DATA FROM EMPC D JOIN CPT ON CPT.CONCEPTO=D.CONCEPTO --AND CPT.CONCEPTO IN ('A003','A004','D013') DECLARE @COLUMNAS VARCHAR(MAX),@COLUMNASSELECT VARCHAR(MAX) SET @COLUMNAS = '' SET @COLUMNASSELECT='' SELECT @COLUMNAS=COALESCE(@COLUMNAS+'['+CAST(EMPC.CONCEPTO AS VARCHAR(4))+'] ,',''), @COLUMNASSELECT=COALESCE(@COLUMNASSELECT+'ISNULL(['+CAST(EMPC.CONCEPTO AS VARCHAR(70))+'],0) '''+EMPC.CONCEPTO+' '+EMPC.NOM_CPT+''' ,','') FROM #DATA EMPC SET @COLUMNAS = LEFT(@COLUMNAS,LEN(@COLUMNAS)-1) SET @COLUMNASSELECT = LEFT(@COLUMNASSELECT,LEN(@COLUMNASSELECT)-1) DECLARE @SQLSTRING NVARCHAR(MAX); SET @SQLSTRING = N' SELECT EMPLEADO,DOCTO_IDENT,NOMBRE,APELLIDO,F_AUMENTO,MOTIVO,ESTADO,CCOSTO,DESCCOSTO,OFICIO,DESOFICIO,DIVISION,DESDIVISION,TPSALARIO,SALARIO_AL100,SALARIO_FLEX,PORCDESAL,CNSEMPB,PLANTILLAPATRON,NOM_PLANTILLA,' + @COLUMNASSELECT + ' FROM ( SELECT EMPLEADO,DOCTO_IDENT,NOMBRE,APELLIDO,F_AUMENTO,MOTIVO,ESTADO,CCOSTO,DESCCOSTO,OFICIO,DESOFICIO,DIVISION,DESDIVISION,TPSALARIO,SALARIO_AL100,SALARIO_FLEX,PORCDESAL,CNSEMPB,PLANTILLAPATRON,NOM_PLANTILLA,VALOR,CONCEPTO FROM COMPOSICION_SALARIAL_ACT D WHERE 1=1 ' +@WHERE+' ) AS SOURCETABLE PIVOT (SUM(VALOR) FOR CONCEPTO IN (' + @COLUMNAS + ')) AS PIVOTTABLE;' EXEC (@SQLSTRING) END ---------------------------- CREATE PROCEDURE PRO_COMPOSICION_SALARIAL_GRAL ( @EMPLEADO VARCHAR(20)=NULL, @DOCTO_IDENT VARCHAR(20)=NULL, @OFICIO VARCHAR(20)=NULL, @CCOSTO VARCHAR(20)=NULL, @ESTADO VARCHAR(8)=NULL, @DIVISION VARCHAR(20)=NULL, @TPSALARIO VARCHAR(10)=NULL ) AS BEGIN DECLARE @WHERE NVARCHAR(MAX)='' IF(@EMPLEADO IS NOT NULL AND LEN(@EMPLEADO)>0) SET @WHERE+=' AND D.EMPLEADO='''+@EMPLEADO+''' ' IF(@DOCTO_IDENT IS NOT NULL AND LEN(@DOCTO_IDENT)>0) SET @WHERE+=' AND D.DOCTO_IDENT='''+@DOCTO_IDENT+''' ' IF(@OFICIO IS NOT NULL AND LEN(@OFICIO)>0) SET @WHERE+=' AND D.OFICIO='''+@OFICIO+''' ' IF(@CCOSTO IS NOT NULL AND LEN(@CCOSTO)>0) SET @WHERE+=' AND D.CCOSTO='''+@CCOSTO+''' ' IF(@ESTADO IS NOT NULL AND LEN(@ESTADO)>0) SET @WHERE+=' AND D.ESTADO='''+@ESTADO+''' ' IF(@DIVISION IS NOT NULL AND LEN(@DIVISION)>0) SET @WHERE+=' AND D.DIVISION='''+@DIVISION+''' ' IF(@TPSALARIO IS NOT NULL AND LEN(@TPSALARIO)>0) SET @WHERE+=' AND D.TPSALARIO='''+@TPSALARIO+''' ' SELECT DISTINCT D.CONCEPTO,CPT.DESCRIPCION NOM_CPT INTO #DATA FROM EMPC D JOIN CPT ON CPT.CONCEPTO=D.CONCEPTO --AND CPT.CONCEPTO IN ('A003','A004','D013') DECLARE @COLUMNAS VARCHAR(MAX),@COLUMNASSELECT VARCHAR(MAX) SET @COLUMNAS = '' SET @COLUMNASSELECT='' SELECT @COLUMNAS=COALESCE(@COLUMNAS+'['+CAST(EMPC.CONCEPTO AS VARCHAR(4))+'] ,',''), @COLUMNASSELECT=COALESCE(@COLUMNASSELECT+'ISNULL(['+CAST(EMPC.CONCEPTO AS VARCHAR(70))+'],0) '''+EMPC.CONCEPTO+' '+EMPC.NOM_CPT+''' ,','') FROM #DATA EMPC SET @COLUMNAS = LEFT(@COLUMNAS,LEN(@COLUMNAS)-1) SET @COLUMNASSELECT = LEFT(@COLUMNASSELECT,LEN(@COLUMNASSELECT)-1) DECLARE @SQLSTRING NVARCHAR(MAX); SET @SQLSTRING = N' SELECT EMPLEADO,DOCTO_IDENT,NOMBRE,APELLIDO,F_AUMENTO,MOTIVO,ESTADO,CCOSTO,DESCCOSTO,OFICIO,DESOFICIO,DIVISION,DESDIVISION,TPSALARIO,SALARIO_AL100,SALARIO_FLEX,PORCDESAL,CNSEMPB,PLANTILLAPATRON,NOM_PLANTILLA,' + @COLUMNASSELECT + ' FROM ( SELECT EMPLEADO,DOCTO_IDENT,NOMBRE,APELLIDO,F_AUMENTO,MOTIVO,ESTADO,CCOSTO,DESCCOSTO,OFICIO,DESOFICIO,DIVISION,DESDIVISION,TPSALARIO,SALARIO_AL100,SALARIO_FLEX,PORCDESAL,CNSEMPB,PLANTILLAPATRON,NOM_PLANTILLA,VALOR,CONCEPTO FROM COMPOSICION_SALARIAL_GRAL D WHERE 1=1 ' +@WHERE+' ) AS SOURCETABLE PIVOT (SUM(VALOR) FOR CONCEPTO IN (' + @COLUMNAS + ')) AS PIVOTTABLE;' EXEC (@SQLSTRING) END --EXEC DEMO '',null,null,null,null,null,'f' --SELECT DISTINCT TPSALARIO FROM COMPOSICION_SALARIAL --SELECT * FROM COMPOSICION_SALARIAL_GRAL