Mensaje de Alerta en Sap Business One

Buenas tardes estimados compañeros,

Necesito muy amablemente de su sabiduría les cuento, actualmente tengo un query que muestra a todos los clientes con su respectivas, facturas, fecha de contabilización y vencimiento de estas, incluyendo una columna que muestra los meses esto con el fin de poder saber a que clientes no se les ha vuelto a facturar después de 30 dias, este proceso se realiza en excel pero su procedimiento es manual para filtrarlo, he tratado de generarlo por mensaje de alerta pero no he podido ¿Me podrían por favor ayudar, como puedo generar una alerta cuando un cliente lleve mas de 28 dias sin que se le genere una factura nueva?

este es el query que hice

SELECT T0.[CardCode], T0.[CardName], T2.[ItemCode], 

T1.[DocNum], T1.[DocDate], T1.[DocDueDate], T1.[DocTotal], T0.[Phone1], T0.[Phone2], 

DATEDIFF(MONTH, T1.DocDate, GETDATE())'Meses', 

T3.[SlpName] 

FROM OCRD T0  INNER JOIN OINV T1 ON T0.[CardCode] = T1.[CardCode] 

INNER JOIN INV1 T2 ON T1.[DocEntry] = T2.[DocEntry] 

INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]

A espera de su pronta respuesta

Gracias

Hola compañero.

En la sección que creaste tu consulta tendrás muy poca visibilidad, moveré tu tema a la sección de Business One.

Saludos.

Buen día @GiancarloB, en este caso con el query que muestras te deben estar apareciendo el mismo cliente en varias ocasiones, tu lo que necesitas es una condición donde te mencione que la última factura fue hace más de 28 días.

Yo te recomendaría utilizar subquerys o subconsultas para que puedas observar solamente la última factura realizada a cada cliente, y de la misma manera que veas solo aquellos cuya última factura tenga fecha mayor a los 28 días que requieres.

Con este cambio solo tendrías que usar la tabla OCRD con un JOIN a la tabla OSLP, y el resto mediante subconsultas. ¿Las has utilizado?, te dejo un ejemplo que como podrías armar tu query para la alerta utilizando subconsultas:

SELECT
	T0.[CardCode],
	T0.[CardName],
	--Este SubQuery te muestra el campo DocNum de la última factura. Buscas que coincida el CardCode, ordenas por fecha
	--  de manera descendiente y tomas solo el primer registro con el TOP (1)
	(SELECT TOP (1) DocNum FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocNum',
	--Este SubQuery te muestra el campo DocDate similar a la columna anterior
	(SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC) 'DocDate',
	--Esta es la misma función de DATEDIFF que usas, solo que la fecha la tomo con un subquery, simimlar a la linea de arriba
	DATEDIFF(MONTH, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) AS 'Meses'
	/*
	Aquí podrías tener más subconsultas para más datos de la factura
	*/
FROM OCRD T0 INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]
	--Necesitas una condición donde la diferencia de días sea mayor a 28, para que no te muestre clientes con facturas recientes
	WHERE DATEDIFF(DAY, (SELECT TOP (1) DocDate FROM OINV WHERE CardCode = T0.CardCode ORDER BY DocDate DESC), GETDATE()) > 28

Revisa cómo lo puedes complementar, y si tienes dudas coméntanos y te apoyamos.

3 Me gusta

Hola JonathanAzael, muchas gracias por responder no he utilizado sudconsultas, pero con el ejemplo que me diste, realizare el proceso a ver como me va y te cuento

Gracias

1 me gusta

Hola @GiancarloB SAP en sus versiones mas recientes tiene un informe que se llama Clientes inactivos, la ruta es Socios de negocios > Informes de socio de negocios > Clientes inactivos.

El informe Clientes inactivos indica si un cliente está inactivo al comprobar si se crearon o no documentos de ventas específicos para el cliente dentro de un período definido.

Espero sea de utilidad.

Saludos.

4 Me gusta

Hola Pcarrasco, muchas gracias por su respuesta pero, en este reporte no muestra facturas.

Gracias

Estimado JonathanAzael, muchas gracias por responder, estoy retomando el tema ya que no me encontraba en la ciudad, lo que me sugieres de realizar subconsultas nunca lo he echo, pero realice unas modificaciones en el query y ya me muestra las facturas que están a mas de 28 días, pero ahora quede estancado ya que esta consulta no me muestra como tal la ultima; ejemplo el cliente Zapata según el query la ultima factura que se le realizo es del 11 de Junio del 2018 hasta ahi todo va bien, el lio es que si se le llegara en este momento a generar una factura a este cliente el query aun me continua mostrando este cliente con la ultima factura del 11 de junio, en si no debería mostrar al cliente, es posible por fa una manito les agradecería inmensamente de como poder tener este query bien echo.

Este es el query

Select * from (SELECT DISTINCT T0.[CardCode], T0.[CardName],

T1.[DocNum], T1.[DocDate], T1.[DocDueDate], T1.[DocTotal], T0.[Phone1], T0.[Phone2],

DATEDIFF(day,T1.[DocDate], GETDATE())‘Dias’,

T3.[SlpName], T0.frozenFor, YEAR (T1.[DocDate])AS ANO

FROM OCRD T0 INNER JOIN OINV T1 ON T0.[CardCode] = T1.[CardCode]

INNER JOIN INV1 T2 ON T1.[DocEntry] = T2.[DocEntry]

INNER JOIN OSLP T3 ON T0.[SlpCode] = T3.[SlpCode]) as TB

where TB.Dias =28 AND ANO =2018

Gracias

Que tal @GiancarloB, el detalle con tu Query es que por el Join que estás haciendo estás mostrando por factura y no por cliente, en el ejemplo que te envié se muestra por cliente en lugar de por factura.

Te recomendaría cambiar la estructura de tu query a algo parecido a lo que te envié al inicio, un query principal y varias subconsultas, en lugar de tener una gran subconsulta.

Otra opción un poco más compleja o desordenada bajo mi punto de vista sería que agregaras una condición más con un subquery donde veas la diferencia de días contra el último documento de cada cliente y así decidas qué clientes mostrar y qué otros no, aunque sería procesar lo mismo varias veces.

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.