DESCUADRE CLIENTES: Anticipos, cartera pendiente y saldos

Esta vista SQL permite ver el descuadre de clientes, separado por anticipos y cartera pendiente, y compararlo con el saldo contable.

Los clientes que salgan en la vista es que alguna cosa no cuadra entre contabilidad y cartera.

SELECT CLIENTES.IDORG, CLIENTES.CODCLI, CLIENTES.NOMCLI, CLIENTES.CUENTA,
ANTICIPOS.ANTICIPO,
CARTERA.PENDIENTE,
DIARIO.SALDO,
(DIARIO.Saldo – COALESCE (CARTERA.Pendiente, 0) + COALESCE (ANTICIPOS.Anticipo, 0)) AS DIFERENCIA

FROM CLIENTES WITH (NOLOCK)

LEFT OUTER JOIN (SELECT CODCLI, SUM(IMPORTE – IMPACUENTA) AS Anticipo FROM CARTERA WHERE (COBPAG = ‘C’) AND (ANTICIPO = ‘A’) GROUP BY CODCLI) AS ANTICIPOS ON ANTICIPOS.CODCLI=CLIENTES.CODCLI

LEFT OUTER JOIN (SELECT CODCLI, SUM(IMPORTE) AS Pendiente FROM CARTERA WHERE (COBPAG = ‘C’) AND (PAGADO = ‘F’) GROUP BY CODCLI) AS CARTERA ON CARTERA.CODCLI=CLIENTES.CODCLI

LEFT OUTER JOIN (SELECT APUNTES.CUENTA, SUM(APUNTES.DEBE – APUNTES.HABER) AS Saldo FROM APUNTES GROUP BY APUNTES.CUENTA) AS DIARIO ON DIARIO.CUENTA=CLIENTES.CUENTA

WHERE ( [DevolverRegistros, SysName, 1 = 1])
AND ( [CondicionTabla, SysName, 1 = 1])
AND ( [Filtro, SysName, 1 = 1])
AND ( ( ‘[TextoBusqueda, SysName, ”]’ = ”) OR
( CLIENTES.CODCLI LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CLIENTES.NOMCLI LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CLIENTES.TELCLI LIKE ‘%[TextoBusqueda, SysName, ”]%’))
AND (DIARIO.Saldo – COALESCE (CARTERA.Pendiente, 0) + COALESCE (ANTICIPOS.Anticipo, 0) <> 0)

ORDER BY CLIENTES.CODCLI, CLIENTES.NOMCLI, CLIENTES.TELCLI

Usa sub consultas para obtener

Antipos no consumidos:
LEFT OUTER JOIN (SELECT CODCLI, SUM(IMPORTE – IMPACUENTA) AS Anticipo FROM CARTERA WHERE (COBPAG = ‘C’) AND (ANTICIPO = ‘A’) GROUP BY CODCLI) AS ANTICIPOS ON ANTICIPOS.CODCLI=CLIENTES.CODCLI

Cartera cobros pendiente:
LEFT OUTER JOIN (SELECT CODCLI, SUM(IMPORTE) AS Pendiente FROM CARTERA WHERE (COBPAG = ‘C’) AND (PAGADO = ‘F’) GROUP BY CODCLI) AS CARTERA ON CARTERA.CODCLI=CLIENTES.CODCLI

Saldo contable:
LEFT OUTER JOIN (SELECT APUNTES.CUENTA, SUM(APUNTES.DEBE – APUNTES.HABER) AS Saldo FROM APUNTES GROUP BY APUNTES.CUENTA) AS DIARIO ON DIARIO.CUENTA=CLIENTES.CUENTA

Pedidos ventas pendientes, con importe pendiente

Esta vista SQL muestra los pedidos ventas pendientes de servir, con las unidades pendientes y el importe pendiente.

SELECT LINEAS.SITUACION, CABEPEDV.IDPEDV, CABEPEDV.TIPOCONT, CABEPEDV.SERIE, CABEPEDV.NUMDOC, CABEPEDV.FECHA, CABEPEDV.REFERENCIA, CABEPEDV.CODCLI, CABEPEDV.NOMCLI,
Lineas.FecEntrega Fecha_Entrega, Lineas.CodArt Articulo, Lineas.DescLin Descripcion, Lineas.Unidades,
Lineas.uniservida as Servidas, Lineas.unianulada as Anuladas, Lineas.Unidades-Lineas.UniServida-Lineas.UniAnulada as Pendientes,
DATEDIFF( dd, Lineas.FecEntrega, GetDate()) as Dias,
Lineas.BaseMoneda/Lineas.Unidades*(Lineas.Unidades-Lineas.UniServida-Lineas.UniAnulada) as Importe

FROM CABEPEDV WITH (NOLOCK)
LEFT OUTER JOIN LinePedi Lineas WITH(NOLOCK) ON Lineas.IdPedV = CabePedV.IdPedV
LEFT OUTER JOIN Articulo WITH(NOLOCK) ON Articulo.CodArt = Lineas.CodArt
LEFT OUTER JOIN Clientes WITH(NOLOCK) ON Clientes.CodCli = CabePedV.CodCli

WHERE ( [DevolverRegistros, SysName, 1 = 1])
AND LINEAS.SITUACION=’A’ AND LINEAS.UNIDADES<>0
AND ( [CondicionTabla, SysName, 1 = 1])
AND ( [Filtro, SysName, 1 = 1])
AND ( [CondicionIdentificadores, SysName, 1 = 1])
AND ( [CondicionCodigo, SysName, 1 = 1])
AND ( [CondicionRepresentante, Sysname, 1 = 1])
AND ( [CondicionFechasDocumento, SysName, 1 = 1])
AND ( [CondicionNumeroDocumento, Sysname, 1 = 1])
AND ( [CondicionReferenciaDocumento, Sysname, 1 = 1])
AND ( [CondicionSituacionDocumento, Sysname, 1 = 1])
AND ( ( ‘[TextoBusqueda, SysName, ”]’ = ”) OR
( CABEPEDV.SITUACION LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.IDPEDV LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.TIPOCONT LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.SERIE LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.NUMDOC LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.FECHA LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.REFERENCIA LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.CODCLI LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( CABEPEDV.NOMCLI LIKE ‘%[TextoBusqueda, SysName, ”]%’))
ORDER BY CABEPEDV.TIPOCONT, CABEPEDV.SERIE, CABEPEDV.NUMDOC, CABEPEDV.FECHA, CABEPEDV.REFERENCIA, CABEPEDV.CODCLI, CABEPEDV.NOMCLI

Observe el uso de la funcion DATTEDIF para calcular los dias que faltan hasta la fecha de entrega respecto a la fecha del sistema:
DATEDIFF( dd, Lineas.FecEntrega, GetDate()) as Dias,

Y el calculo del importe pendiente a partir del precio neto unitario (base / unidades) * unidades pendientes.
Lineas.BaseMoneda/Lineas.Unidades*(Lineas.Unidades-Lineas.UniServida-Lineas.UniAnulada) as Importe

Hemos añadido tambien un criterio fijo: lineas Activas (no servidas) y con unidades distintas de 0.
AND LINEAS.SITUACION=’A’ AND LINEAS.UNIDADES<>0

Stock de varios almacenes

Con esta vista SQL podemos ver que tiene cada articulo en distintos almacenes en forma de columna.

SELECT ARTICULO.CODART, ARTICULO.DESCART,
STO1.UNIDADES ALM1,
STO2.UNIDADES ALM2


FROM ARTICULO WITH (NOLOCK)
LEFT JOIN __STOCKALMART STO1 ON STO1.CODART=ARTICULO.CODART AND LTRIM(STO1.CODALM)=’1′
LEFT JOIN __STOCKALMART STO2 ON STO2.CODART=ARTICULO.CODART AND LTRIM(STO2.CODALM)=’2′

WHERE ( [DevolverRegistros, SysName, 1 = 1])
AND ( [CondicionTabla, SysName, 1 = 1])
AND ( [Filtro, SysName, 1 = 1])
AND ( ( ‘[TextoBusqueda, SysName, ”]’ = ”) OR
( ARTICULO.CODART LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( ARTICULO.DESCART LIKE ‘%[TextoBusqueda, SysName, ”]%’))
ORDER BY ARTICULO.CODART, ARTICULO.DESCART

Precios de compra a distintos proveedores

Esta vista muestra los distintos precios de compra de un articulo, con su proveedor, los descuentos que son aplicables y el precio neto. En cuanto a descuentos solo se tiene en cuenta la combinacion articulo / proveedor, si aplicar unidades o fechas

SELECT ARTICULO.CODART, ARTICULO.DESCART,
ARTICULO.CODPRO PREFERENTE,
PRCESP.CODPRO,
PROVEED.NOMPRO,
PRCESP.PRECIO,
COALESCE(DESCUENT.DESC1,0) DTO1,
COALESCE(DESCUENT.DESC2,0) DTO2,
COALESCE(DESCUENT.DESC3,0) DTO3,
round(((PRCESP.PRECIO((100-COALESCE(DESCUENT.DESC1,0))/100))((100-COALESCE(DESCUENT.DESC2,0))/100))*((100-COALESCE(DESCUENT.DESC3,0))/100),2) PrecioNeto

FROM ARTICULO WITH (NOLOCK)
LEFT JOIN PRCESP ON PRCESP.CODART=ARTICULO.CODART
LEFT JOIN PROVEED ON PROVEED.CODPRO=PRCESP.CODPRO
LEFT JOIN DESCUENT ON DESCUENT.CODPRO=PRCESP.CODPRO AND DESCUENT.CODART=PRCESP.CODART
WHERE ( [DevolverRegistros, SysName, 1 = 1])
AND ( [CondicionTabla, SysName, 1 = 1])
AND ( [Filtro, SysName, 1 = 1])
AND ( ( ‘[TextoBusqueda, SysName, ”]’ = ”) OR
( ARTICULO.CODART LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( ARTICULO.DESCART LIKE ‘%[TextoBusqueda, SysName, ”]%’))
ORDER BY ARTICULO.CODART, ARTICULO.DESCART



Detalle de lotes con su stock

Esta vista SQL muestra el stock de cada articulo con detalle de sus lotes

SELECT ARTICULO.CODART, ARTICULO.DESCART
,STOCKALM.LOTE
,STOCKALM.UNIDADES
,STOCKALM.CODALM

FROM ARTICULO WITH (NOLOCK)
LEFT OUTER JOIN STOCKALM
ON STOCKALM.CODART=ARTICULO.CODART

WHERE ( [DevolverRegistros, SysName, 1 = 1])
AND ARTICULO.HAYLOTES=’T’
AND ( [CondicionTabla, SysName, 1 = 1])
AND ( [Filtro, SysName, 1 = 1])
AND (
( ‘[TextoBusqueda, SysName, ”]’ = ”) OR
( ARTICULO.CODART LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( ARTICULO.DESCART LIKE ‘%[TextoBusqueda, SysName, ”]%’) OR
( STOCKALM.LOTE LIKE ‘%[TextoBusqueda, SysName, ”]%’)
)

ORDER BY ARTICULO.CODART, ARTICULO.DESCART

Vistas SQL PARA A3ERP

Articulos

Clientes

Facturas ventas

Pedidos ventas

Proveedores

Facturas ventas datos bancarios

Modificar el pie del documento para que Si el documento de pago es TR, se imprima el IBAN y el CCC del banco de de la empresa, y e otro caso el IBAN y CCC del cliente

Para ello necesitamos tener los datos de nuestro banco, que podemos obtener de la tabla bancos. Modificamos la SQL del documento añadiendo

   ,BANCOS.IBANEXT+' '+BANCOS.CUENTAEXT AS CUENTABANCO

y vinculamos la tabla BANCOS con
   LEFT OUTER JOIN BANCOS
      ON BANCOS.CODBAN=CLIENTES.CODBAN

ATENCION, podemos usar el campo CODBAN de la tabla clientes, o en el caso de facturas el de la CABECERA

Recomiendo tambien tener la domiciliacion bancaria del cliente en este formato
       ,DomBanca.IBANEXT+' '+DomBanca.CUENTAEXT AS CUENTACLIENTE

Y asegurarnos que tenemos disponible el campo del documento de pago
       ,DocuPago.DescDoc

Luego en el diseño añadimos una expresion conIF(DOCPAG=’TR’,CUENTABANCO,CUENTACLIENTE)

Verificar

Con un cliente con documento de pago TR: salen los datos del banco de cabecera?

Con un cliente con documento de pago R y domiciliación en su ficha: salen los datos de domiciliación del cliente?

Documentos de ventas pronto pago

Para añadir el pronto pago en los documentos de ventas debemos añadir a la SQL del documento:

,CABECERA.PORPRONTO
,CABECERA.TOTPRONTO

Y luego en el diseño del documento una etiqueta para el titulo y el %, que en realidad es una expresion, pues queremos que solo salga si hay pronto pago, con:

if(PORPRONTO=0,”,’Dto.p.p’+PORPRONTO+’%’)

Y debajo otra expresion para el importe del pronto pago, con:

IF(PORPRONTO=0,”,TOTPRONTO)

A %d blogueros les gusta esto: