Avalados por :

Cómo corregir errores de valores nulos en un Trigger de SQL Server para bloquear la creación de pedidos

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

Buenas tardes, este TN tiene como finalidad bloquear la creación de un pedido para un cliente si el saldo a su favor es menor que el monto del pedido a crear. También se considera el saldo que el cliente tenga con pedidos creados, restando lo abonado o anticipos, el nuevo pedido debe ser menor a ese monto. Sin embargo, no está funcionando correctamente, está trayendo valores nulos, @MontoAbonado, @MontoPedido... y no sé qué estoy haciendo mal. Agradezco sus comentarios. Aquí les dejo el TN.

If @object_type='17' and @transaction_type in ('A','U')

BEGIN

DECLARE @MontoAbonado numeric(19, 6),

@MontoPedido numeric(19, 6)

SET @MontoAbonado =(SELECT T0.Balance + t0.OrdersBal

FROM OCRD T0 INNER JOIN OCTG T1 ON T0.GroupNum = T1.GroupNum and t1.PymntGroup = 'Contado'

INNER JOIN ORDR T2 ON T0.CardCode = T2.CardCode

WHERE T2.DocEntry = @list_of_cols_val_tab_del)

SET @MontoPedido=(SELECT T2.DocTotal

FROM ORDR T2

WHERE T2.DocEntry = @list_of_cols_val_tab_del)

IF (isnull(@MontoAbonado,0) *(-1) < @MontoPedido)

BEGIN

SET @error=102

SET @error_message= 'EL MONTO DEL PEDIDO SUPERA AL MONTO ABONADO DEL CLIENTE'

END

END

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

1 Respuestas

0
Cargando...

Hola Ana, prueba de esta manera

If @object_type='17' and @transaction_type in ('A','U')

BEGIN

DECLARE @MontoAbonado numeric(19, 6),

@MontoPedido numeric(19, 6)

SET @MontoAbonado = ISNULL((SELECT T0.Balance + t0.OrdersBal

FROM OCRD T0 INNER JOIN OCTG T1 ON T0.GroupNum = T1.GroupNum

WHERE t0.CardCode = (SELECT cardcode FROM ORDR WHERE DocEntry = @list_of_cols_val_tab_del)

AND T1.PymntGroup = 'Contado'), 0)

SET @MontoPedido = ISNULL((SELECT T2.DocTotal

FROM ORDR T2

WHERE T2.DocEntry = @list_of_cols_val_tab_del), 0)

IF (@MontoAbonado * -1) < @MontoPedido

BEGIN

SET @error = @MontoAbonado

SET @error_message = 'EL MONTO DEL PEDIDO SUPERA AL MONTO ABONADO DEL CLIENTE'

END

END

Tienes que tomar en cuenta que el campo Ordersbal toma el valor del total del documento actual, no el que está guardado en la BD.

Así me funcionó.

Saludos,

Wuilmer Venegas

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?