La página de recursos le permite obtener documentos, consultas SQL, informes,.. que le permitan personalizar TREE de una manera sencilla. Como los recursos que vayamos publicando provienen de personalizaciones de algún cliente concreto, es posible que no tengan utilidad para usted o que requiera modificaciones para adaptarlos a sus necesidades.
Lista de facturas en TREE con los datos de pagos de A3ERP
SELECT
C.OBRA,C.COD_FRA,C.Fecha,C.SERIE,C.NUMERO,C.REFERENCIA
,C.COD_NEXUS Id_A3,YEAR(C.FECHA) Año
,MONTH(C.FECHA) Mes,C.TOTAL Total_TREE
,(SELECT TOTDOC FROM [DB_A3]..CABEFACC WHERE IDFACC=C.COD_NEXUS) Total_A3
,C.TOTAL-(SELECT TOTDOC FROM [DB_A3]..CABEFACC WHERE IDFACC=C.COD_NEXUS) Dif
,C.Proveedor,C.Nombre
,(SELECT SUM(ImporteCob) FROM [DB_A3]..CARTERA WHERE PROCEDE='FC' AND PROCEDEID=C.COD_NEXUS) ImpPagado
,NULLIF(
CASE WHEN FECHA_EXP IS NULL
THEN C.TOTAL
ELSE ((SELECT TOTDOC FROM [DB_A3]..CABEFACC WHERE IDFACC=C.COD_NEXUS)
-(SELECT SUM(ImporteCob) from [DB_A3]..CARTERA WHERE PROCEDE='FC' AND PROCEDEID=C.COD_NEXUS))
END
,0) ImpPendientePago
,(SELECT MIN(FECHA) FROM [DB_A3]..CARTERA WHERE PROCEDE='FC' AND PROCEDEID=C.COD_NEXUS AND PAGADO='F') Vencimiento
FROM T_OBRAS O
JOIN T_FRA C ON C.EMPRESA=O.EMPRESA AND C.OBRA=O.OBRA
{WFiltro}
De forma similar, para las facturas de venta tendremos el listado:
SELECT
C.OBRA,C.COD_FRA,C.Fecha,C.SERIE,C.NUMERO,C.REFERENCIA
,C.COD_NEXUS Id_A3,YEAR(C.FECHA) Año
,MONTH(C.FECHA) Mes,C.TOTAL Total_TREE
,(SELECT TOTDOC FROM [DB_A3]..CABEFACV WHERE IDFACV=C.COD_NEXUS) Total_A3
,C.TOTAL-(SELECT TOTDOC FROM [DB_A3]..CABEFACV WHERE IDFACV=C.COD_NEXUS) Dif
,C.Cliente,C.Nombre
,(SELECT SUM(ImporteCob) FROM [DB_A3]..CARTERA WHERE PROCEDE='FV' AND PROCEDEID=C.COD_NEXUS) ImpCobrado
,NULLIF(
CASE WHEN FECHA_EXP IS NULL
THEN C.TOTAL
ELSE ((SELECT TOTDOC FROM [DB_A3]..CABEFACv WHERE IDFACV=C.COD_NEXUS)
-(SELECT SUM(ImporteCob) from [DB_A3]..CARTERA WHERE PROCEDE='FV' AND PROCEDEID=C.COD_NEXUS))
END
,0) ImpPendienteCobro
,(SELECT MIN(FECHA) FROM [DB_A3]..CARTERA WHERE PROCEDE='FC' AND PROCEDEID=C.COD_NEXUS AND PAGADO='F') Vencimiento
FROM T_OBRAS O
JOIN T_FRAV C ON C.EMPRESA=O.EMPRESA AND C.OBRA=O.OBRA
{WFiltro}
Informes en XML
- CNX para informes de una conexión con varias empresas.
- EMP para informes de una empresa
- OBR para informes de una obra.
- FRAV para informes de factura de venta
- PED para informes de pedidos a proveedores
- ALBC para informes de proformas entregadas al proveedor (para decirle lo que nos debe facturar).
Excelerator
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')
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)
Script para realización de Backups
Lo primero que debe hacer tras poner cualquier aplicación en producción es contar con un buen respaldo de copia de seguridad.
SQL Server Express no dispone de tareas de mantenimiento para la automatización de las copias, así que le suministramos el siguiente script para poder automatizar esta tarea.
Descargar el SCRIPT para la automatización de BackupsUn backup de TREE debe contener al menos:
- Las bases de datos de TREE. (El script copia todas las bases de datos del servidor SQL)
- La carpeta de ejecutables y recursos de Tree (logos y configuración), normalmente ubicadas en el servidor en C:\Tree
- En caso de tener a3ERP las carpetas de listados y de extensiones de a3
Para que el script funcione en su red, debe modificar el servidor y las credenciales de SQL Server.
El script se debe ejecutar en el servidor SQL mediante una tarea programada que le envíe por email el éxito o fracaso de la acción de backup.
Debe completar el script para que la copia de los datos se realice en un cloud seguro y con versionado (Google Drive, Dropbox, OneDrive,...) o sino puede que su copia de seguridad sea totalmente inútil ante una rotura de hardware o una infección.
Para subir los archivos de Backup al cloud de su elección suele ser suficiente añadir una instrucción XCOPY con la ruta adecuada.
Compruebe regularmente que las copias se están realizando, programe avisos por email en caso de fallo, y verifique la calidad de las copias de ve en cuando realizando una restauración de datos en otro sistema de test.
Envío automatico de Emails desde SQL Server
Puede programar el envío automático de emails al producirse una acción en SQL Server.
Las acciones en SQL Server provocan lo que llamamos TRIGGER o disparador.
La configuración consta de dos pasos:
- Configura una cuenta de correo en SQL Server
- Crear los TRIGGER que generan un email
La manera más sencilla de configurar la cuenta de correo es mediante un asistente en el Management Studio de SQL SERVER, en el apartado 'Administración'-'Correo electrónico de la base de datos'. Los datos de configuración son los habituales de la configuración SMTP. Cada cuenta de correo creada se identifica mediante un perfil (PROFILE). Una vez configurado envíe un email de prueba para comprobar que todo es correcto.
La configuración de los TRIGGER dependerán de la acción que envía el correo. Aquí dispone de ejemplos: