08/05/2019

Listados SQL

Cierre de mes de una obra


SELECT  O.Obra,V.Num_Cap,V.Nombre_Capitulo,V.Tipo,V.Nivel,o.dIRECCION
,V.COD_PRECIO Codigo,V.Ud,V.DESCRIPCION Descripcion,V.MEDICION Medicion,V.PRECIO1 PrecioVenta,V.PRESU1 Presupuesto
,V.Presu2 CostePrevisto
, CASE V.TIPO WHEN 'C' THEN C.COSTE_FINAL_PREVISTO_T ELSE P.COSTE_FINAL_PREVISTO END CosteFinalPrevisto

,V.IMP_PRODU Produccion,V.IMP_CERTI Certificacion, V.IMP_COSTE Coste

,CASE V.TIPO WHEN 'P' THEN v.imp_coste-(v.precio2*v.certificacion)  ELSE (
       SELECT SUM(PE.PRECIO2*PA.CERTIFICACION) FROM T_PARTIDAS PA 
        JOIN T_CAPITULOS CAPI ON CAPI.EMPRESA=PA.EMPRESA AND CAPI.OBRA=PA.OBRA AND CAPI.CAPITULO=PA.CAPITULO
       JOIN T_PRECIOS PE ON PE.EMPRESA=PA.EMPRESA AND PA.OBRA=PE.OBRA AND PE.COD_INTERNO=PA.COD_INTERNO
       WHERE PA.EMPRESA=V.EMPRESA AND PA.OBRA=V.OBRA AND CAPI.COD_CAP LIKE COALESCE(V.COD_CAP,'')+'%'
)
 END DesviaciÛnCostePrevisto

,(SELECT dbo.F_IMP_COSTE(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) CosteHastaMesAnterior
,(SELECT dbo.F_IMP_COSTE(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) CosteMesActual

,(SELECT dbo.F_IMP_Certificacion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) CertificacionHastaMesAnterior
,(SELECT dbo.F_IMP_Certificacion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) CertificacionMesActual

,(SELECT dbo.F_IMP_Produccion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) ProduccionHastaMesAnterior
,(SELECT dbo.F_IMP_Produccion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) ProduccionMesActual
,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0) FechaInicioMes

FROM T_OBRAS O
JOIN V_CAP_PARTIDAS_T V ON V.EMPRESA=O.EMPRESA AND V.OBRA=O.OBRA
LEFT JOIN T_CAPITULOS C ON C.EMPRESA=V.EMPRESA AND C.OBRA=V.OBRA AND C.CAPITULO=COALESCE(V.CAPITULO,V.PADRE) 
LEFT JOIN T_PARTIDAS P ON P.EMPRESA=V.EMPRESA AND P.OBRA=V.OBRA AND P.CAPITULO=V.PADRE AND P.COD_INTERNO=V.COD_INTERNO AND V.TIPO='P'
{WFiltro} AND V.TIPO<>'T'
ORDER BY V.EMPRESA,V.OBRA,V.COD_CAP,V.ORDEN

Cierre de mes de todas las obras


SELECT  O.Obra,o.TIPO_OBRA TipoObra,V.Nombre_Capitulo Nombre,V.PRESU1 Presupuesto
,V.Presu2 CostePrevisto
, CASE V.TIPO WHEN 'C' THEN C.COSTE_FINAL_PREVISTO_T ELSE P.COSTE_FINAL_PREVISTO END CosteFinalPrevisto

,V.IMP_PRODU ProducciÛn,V.IMP_CERTI Certificacion, V.IMP_COSTE Coste

,CASE V.TIPO WHEN 'P' THEN v.imp_coste-(v.precio2*v.certificacion)  ELSE (
       SELECT SUM(PE.PRECIO2*PA.CERTIFICACION) FROM T_PARTIDAS PA 
        JOIN T_CAPITULOS CAPI ON CAPI.EMPRESA=PA.EMPRESA AND CAPI.OBRA=PA.OBRA AND CAPI.CAPITULO=PA.CAPITULO
       JOIN T_PRECIOS PE ON PE.EMPRESA=PA.EMPRESA AND PA.OBRA=PE.OBRA AND PE.COD_INTERNO=PA.COD_INTERNO
       WHERE PA.EMPRESA=V.EMPRESA AND PA.OBRA=V.OBRA AND CAPI.COD_CAP LIKE COALESCE(V.COD_CAP,'')+'%'
)
 END DesviacionCostePrevisto

,(SELECT dbo.F_IMP_COSTE(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) CosteHastaMesAnterior
,(SELECT dbo.F_IMP_COSTE(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) CosteMesActual

,(SELECT dbo.F_IMP_Certificacion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) CertificacionHastaMesAnterior
,(SELECT dbo.F_IMP_Certificacion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) CertificacionMesActual

,(SELECT sum(importe_base) FROM T_FRAV WHERE EMPRESA=V.EMPRESA AND OBRA=V.OBRA AND FECHA<dateadd(mm, datediff(mm,0,getdate()),="" 0))="" frav_hastamesanterior="" ,(select="" sum(importe_base)="" from="" t_frav="" where="" empresa="V.EMPRESA" and="" obra="V.OBRA" fecha="">=DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0)) FraV_MesActual

,(SELECT dbo.F_IMP_Produccion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,NULL,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0))) ProduccionHastaMesAnterior
,(SELECT dbo.F_IMP_Produccion(V.EMPRESA,V.OBRA,C.COD_CAP,V.COD_INTERNO,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0),null)) ProduccionMesActual
,DATEADD(MM, DATEDIFF(MM,0,GETDATE()), 0) FechaInicioMes

,O.DIRECCION

FROM T_OBRAS O
JOIN V_CAP_PARTIDAS_T V ON V.EMPRESA=O.EMPRESA AND V.OBRA=O.OBRA
LEFT JOIN T_CAPITULOS C ON C.EMPRESA=V.EMPRESA AND C.OBRA=V.OBRA AND C.CAPITULO=COALESCE(V.CAPITULO,V.PADRE) 
LEFT JOIN T_PARTIDAS P ON P.EMPRESA=V.EMPRESA AND P.OBRA=V.OBRA AND P.CAPITULO=V.PADRE AND P.COD_INTERNO=V.COD_INTERNO AND V.TIPO='P'
{WFiltro} AND V.TIPO<>'T' and v.capitulo='00000000'
ORDER BY V.EMPRESA,V.OBRA,V.COD_CAP,V.ORDEN
</dateadd(mm,>




Aplicar permisos de acceso a obras en listados personalizados

Es necesario usar la tabla T_ACCESOS donde se definen las obras a las que el usuario tiene acceso.

Por tanto, suponiendo que en nuestra consulta existe una tabla de obras T_OBRAS con ALIAS O, la consulta deberá incluir las líneas indicadas en rojo para que se apliquen los permisos de acceso:


SELECT  O.Obra[,restoDeCampos]
FROM T_OBRAS O
[JOIN RestoDeTablas Alias ON condiciones]LEFT JOIN T_ACCESOS A ON O.EMPRESA=A.EMPRESA AND O.OBRA=A.OBRA AND A.USUARIO='@@P.Usuario@@'
WHERE [CondicionesDelListado]AND (A.OBRA IS NOT NULL OR '@@P.Perfil@@'<>'' OR '@@P.Usuario@@'='TREE')






DIVISION DE LA OBRA EN MO-MQ-MT-ASOCIADO

WITH CALCULO AS(

— PARTIDAS CON DESCOMPOSICION *** NO INCLUYE PORCENTAJES ***

SELECT SUM(CO.COEFICIENTE2*CO.PRECIO2) COSTE
,CASE WHEN PR.TIPO=1 THEN ‘MO’ WHEN PR.TIPO=2 THEN ‘MQ’ WHEN PR.TIPO=3 THEN ‘MT’ ELSE ‘–‘ END TIPO_PRECIO
, PR.ASOCIADO

FROM V_CAP_PARTIDAS_T PA
LEFT JOIN T_OBRAS O ON O.EMPRESA=PA.EMPRESA AND O.OBRA=PA.OBRA
LEFT JOIN T_PRECIOS_COMP CO ON CO.EMPRESA=PA.EMPRESA AND CO.OBRA=PA.OBRA AND CO.COD_INTERNO=PA.COD_INTERNO
LEFT JOIN T_PRECIOS PR ON PR.EMPRESA=CO.EMPRESA AND PR.OBRA=CO.OBRA AND PR.COD_INTERNO=CO.COD_HIJO

{WFiltro} AND PA.TIPO=’P’
GROUP BY PR.TIPO, PR.ASOCIADO

UNION

— PARTIDAS SIN DESCOMPOSICION

SELECT SUM(PA.PRESU2) COSTE
,CASE WHEN PR.TIPO=1 THEN ‘MO’ WHEN PR.TIPO=2 THEN ‘MQ’ WHEN PR.TIPO=3 THEN ‘MT’ ELSE ‘–‘ END TIPO_PRECIO
, PR.ASOCIADO

FROM V_CAP_PARTIDAS_T PA
LEFT JOIN T_OBRAS O ON O.EMPRESA=PA.EMPRESA AND O.OBRA=PA.OBRA
LEFT JOIN T_PRECIOS PR ON PR.EMPRESA=PA.EMPRESA AND PR.OBRA=PA.OBRA AND PR.COD_INTERNO=PA.COD_INTERNO
LEFT JOIN T_PRECIOS_COMP CO ON CO.EMPRESA=PA.EMPRESA AND CO.OBRA=PA.OBRA AND CO.COD_INTERNO=PA.COD_INTERNO

{WFiltro} AND PA.TIPO=’P’ AND CO.EMPRESA IS NULL
GROUP BY PR.TIPO, PR.ASOCIADO)

— SUMA DE PARTIDAS

SELECT TIPO_PRECIO, ASOCIADO, SUM(COSTE) COSTE FROM CALCULO

GROUP BY TIPO_PRECIO, ASOCIADO


Listados diario de producción vs coste

SELECT O.Empresa,O.Obra, O.Descripcion ,F.Fecha,F.Semana,F.Mes,F.Ano,F.AnoMes,F.AnoMesDia ,(SELECT SUM(L.SUBTOTAL*P.PRECIO1) FROM T_PARTIDAS P JOIN T_LINEAS_CER L ON L.EMPRESA =P.EMPRESA AND L.OBRA=P.OBRA AND L.CAPITULO=P.CAPITULO AND L.COD_INTERNO=P.COD_INTERNO WHERE P.EMPRESA=O.EMPRESA AND P.OBRA=O.OBRA AND L.FECHA_PROD=F.FECHA ) Produccion ,(SELECT SUM(IMPORTE) FROM V_ALB_IMP I WHERE I.EMPRESA=O.EMPRESA AND I.OBRA=O.OBRA AND I.FECHA=F.FECHA)Coste ,-COALESCE((SELECT SUM(IMPORTE) FROM V_ALB_IMP I WHERE I.EMPRESA=O.EMPRESA AND I.OBRA=O.OBRA AND I.FECHA=F.FECHA),0)+COALESCE((SELECT SUM(L.SUBTOTAL*P.PRECIO1) FROM T_PARTIDAS P JOIN T_LINEAS_CER L ON L.EMPRESA =P.EMPRESA AND L.OBRA=P.OBRA AND L.CAPITULO=P.CAPITULO AND L.COD_INTERNO=P.COD_INTERNO WHERE P.EMPRESA=O.EMPRESA AND P.OBRA=O.OBRA AND L.FECHA_PROD=F.FECHA ),0) Beneficio FROM T_OBRAS O JOIN UT_Fechas F ON 0=0 {WFiltro} AND ((SELECT SUM(L.SUBTOTAL*P.PRECIO1) FROM T_PARTIDAS P JOIN T_LINEAS_CER L ON L.EMPRESA =P.EMPRESA AND L.OBRA=P.OBRA AND L.CAPITULO=P.CAPITULO AND L.COD_INTERNO=P.COD_INTERNO WHERE P.EMPRESA=O.EMPRESA AND P.OBRA=O.OBRA AND L.FECHA_PROD=F.FECHA ) IS NOT NULL OR (SELECT SUM(IMPORTE) FROM V_ALB_IMP I WHERE I.EMPRESA=O.EMPRESA AND I.OBRA=O.OBRA AND I.FECHA=F.FECHA) IS NOT NULL)