Hola @alex98casteld
Me alegra saber que no soy al único que le pasan estos casos.
Todos los casos son útiles, sin embargo en estas parametrizaciones he visto que cuando lo hago desde sap, los clientes quedan bloqueados inclusive para tramitar ofertas de venta (cotizaciones), sin embargo para nuestro proceso no es viable ya que esto significa estar activando y desactivando a los clientes, o simplemente no vender y pues esta es nuetra razon de ser.
Con lo anterior he creado un Query y una alerta que nos notifica cuando un cliente ha superado o va a superar su cupo, esta alerta llega a cierta hora según parametrices y así tu área contable y SAC puedan actuar y tramitar con el cliente antes de bloquearlo.
Te dejo el Query si te sirve
–
Reporte de clientes con cupo excedido o a punto de exceder
SELECT
-1 AS Orden, –
Esto asegura que la nota salga primero
‘NOTA:’ AS [Código Cliente],
‘**************************************************************’ AS [Nombre Cliente],
NULL AS [Cupo Asignado],
NULL AS [Saldo de Cuenta],
NULL AS [Entregas Abiertas],
NULL AS [Pedidos Clientes],
NULL AS [Total Comprometido],
NULL AS [Alerta]
UNION ALL
SELECT -1, NULL, ‘Si el cupo ya se superó, gestionar inmediatamente las OV abiertas pendientes de entrega con cartera para tramitar despacho.’,
NULL,NULL,NULL,NULL,NULL,NULL
UNION ALL
SELECT -1, NULL, ‘Si está a menos del 20% de alcanzarlo, coordinar con cartera antes de liberar nuevas órdenes.’,
NULL,NULL,NULL,NULL,NULL,NULL
UNION ALL
SELECT -1, NULL, ‘**************************************************************’,
NULL,NULL,NULL,NULL,NULL,NULL
UNION ALL
SELECT
0 AS Orden, –
Los datos reales salen después
T0.CardCode AS [Código Cliente],
T0.CardName AS [Nombre Cliente],
T0.CreditLine AS [Cupo Asignado],
T0.Balance AS [Saldo de Cuenta],
ISNULL((SELECT SUM(T2.LineTotal)
FROM ODLN T1
INNER JOIN DLN1 T2 ON T1.DocEntry = T2.DocEntry
WHERE T1.CardCode = T0.CardCode
AND T1.DocStatus = 'O'),0) AS [Entregas Abiertas],
ISNULL((SELECT SUM(T4.LineTotal)
FROM ORDR T3
INNER JOIN RDR1 T4 ON T3.DocEntry = T4.DocEntry
WHERE T3.CardCode = T0.CardCode
AND T3.DocStatus = 'O'),0) AS [Pedidos Clientes],
(T0.Balance
+ ISNULL((SELECT SUM(T2.LineTotal) FROM ODLN T1 INNER JOIN DLN1 T2 ON T1.DocEntry = T2.DocEntry WHERE T1.CardCode = T0.CardCode AND T1.DocStatus = 'O'),0)
+ ISNULL((SELECT SUM(T4.LineTotal) FROM ORDR T3 INNER JOIN RDR1 T4 ON T3.DocEntry = T4.DocEntry WHERE T3.CardCode = T0.CardCode AND T3.DocStatus = 'O'),0)
) AS [Total Comprometido],
CASE
WHEN (T0.Balance
+ ISNULL((SELECT SUM(T2.LineTotal) FROM ODLN T1 INNER JOIN DLN1 T2 ON T1.DocEntry = T2.DocEntry WHERE T1.CardCode = T0.CardCode AND T1.DocStatus = 'O'),0)
+ ISNULL((SELECT SUM(T4.LineTotal) FROM ORDR T3 INNER JOIN RDR1 T4 ON T3.DocEntry = T4.DocEntry WHERE T3.CardCode = T0.CardCode AND T3.DocStatus = 'O'),0)
) > T0.CreditLine
THEN 'YA SUPERÓ EL CUPO'
WHEN (T0.Balance
+ ISNULL((SELECT SUM(T2.LineTotal) FROM ODLN T1 INNER JOIN DLN1 T2 ON T1.DocEntry = T2.DocEntry WHERE T1.CardCode = T0.CardCode AND T1.DocStatus = 'O'),0)
+ ISNULL((SELECT SUM(T4.LineTotal) FROM ORDR T3 INNER JOIN RDR1 T4 ON T3.DocEntry = T4.DocEntry WHERE T3.CardCode = T0.CardCode AND T3.DocStatus = 'O'),0)
) >= (T0.CreditLine * 0.8)
THEN 'Está a menos del 20% de superar el cupo'
ELSE '✅ Aún dentro del cupo'
END AS [Alerta]
FROM OCRD T0
WHERE
T0.CardCode LIKE ‘C-%’
AND T0.CreditLine > 0
AND T0.validFor = ‘Y’
AND (
(T0.Balance
- ISNULL((SELECT SUM(T2.LineTotal) FROM ODLN T1 INNER JOIN DLN1 T2 ON T1.DocEntry = T2.DocEntry WHERE T1.CardCode = T0.CardCode AND T1.DocStatus = ‘O’),0)
- ISNULL((SELECT SUM(T4.LineTotal) FROM ORDR T3 INNER JOIN RDR1 T4 ON T3.DocEntry = T4.DocEntry WHERE T3.CardCode = T0.CardCode AND T3.DocStatus = ‘O’),0)
) >= (T0.CreditLine * 0.8)
)
ORDER BY Orden, [Alerta] DESC, [Total Comprometido] DESC;