cancel
Showing results for 
Search instead for 
Did you mean: 

SP Orden de Venta

Former Member
0 Kudos

Hola a Todos,

Tenemos implementado un modelo de autorización para Pedidos de Ventas que verifica cuando se supere el límite de crédito:

SELECT DISTINCT 'TRUE' FROM [DBO].[ORDR] T0 INNER JOIN [DBO].[OCRD] T1 ON T0.CARDCODE = T1.CARDCODE
WHERE T0.CARDCODE = $[$4.1] AND (T1.CreditLine) < (T1.Balance+T1.OrdersBal+T1.DNotesBal+$[ORDR.DocTotal])

Como es sabido, el modelo de autorización solo funciona en la creación de documentos.

Implementamos una notificación (SP) de manera que si se esta actualizando una orden de venta, la misma no sea mayor al limite de credito:

IF @transaction_type = 'U' AND @object_type = '17'
      BEGIN
            IF EXISTS(SELECT * FROM ORDR T0 INNER JOIN OCRD T1 
                    ON T0.CardCode = T1.CardCode 
                    WHERE T0.DocEntry = @list_of_cols_val_tab_del 
                    AND T0.DocTotal >= T1.CreditLine AND T0.UserSign <> 1 
	AND T0.WddStatus<>'A' AND T0.WddStatus<>'P' AND T0.WddStatus<>'Y')
            BEGIN
                  SET @error = -1
                  SET @error_message = 'El Importe total supera el límite de crédito del Socio de Negocio'
            END
      END

Pero aún presentamos un problema, si el usuario crea la orden de venta y no supera el límite de crédito (no se activa el modelo de autorización), y empieza a actualizar dicho pedido, aumentándole cantidades o precios, pero ya posee saldo en Balance (OCRD.Balance), Pedidos Abiertos (OCRD.OrdersBal), y Entregas (OCRD.DNotesBal), estas no se están validando en el procedimiento almacenado.

Actualmente un pedido de venta puede ser actualizado llegando al monto del límite de crédito, sin verificar si ya hay monto en balance, pedidos y entregas abiertas, ¿cómo incluyo esta validación en el SP? El monto de pedidos abiertos (OCRD.OrdersBal) ya incluye el pedido que estoy actualizando (y otros que pedidos abiertos del cliente).

Gracias de antemano...

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member188440
Active Contributor
0 Kudos

Agregas una lineas como



declare @balance as int
declare @ordersbal as int
declare @dnotesbal as int

select 

@balance=a.Balance,@ordersbal= a.OrdersBal, @dnotesbal= a.DNotesBal 
from ocrd a join ordr b on a.cardcode=b.cardcode where b.docentry=@list_of_cols_val......


Ya con los valores almacenados , tu trabaja la validacion que quieras

Former Member
0 Kudos

La sintaxis usada fue la siguiente, de manera que funcionara

IF @transaction_type = 'U' AND @object_type = '17'
      BEGIN
		declare @balance as int
		declare @ordersbal as int
		declare @dnotesbal as int
		declare @doctotal as int
		select @balance=a.Balance,@ordersbal= a.OrdersBal, @dnotesbal= a.DNotesBal from ocrd a join ordr b on a.cardcode=b.cardcode where b.docentry=@list_of_cols_val_tab_del 
		select @doctotal= DocTotal from ORDR where DocEntry=@list_of_cols_val_tab_del 
            IF EXISTS(SELECT * FROM ORDR T0 INNER JOIN OCRD T1 
                    ON T0.CardCode = T1.CardCode 
                    WHERE T0.DocEntry = @list_of_cols_val_tab_del 
                    AND @Balance+@dnotesbal+(@ordersbal-@docTotal)+T0.DocTotal>= T1.CreditLine AND T0.UserSign <> 1 
					AND T0.WddStatus<>'A' AND T0.WddStatus<>'P' AND T0.WddStatus<>'Y')
            BEGIN
                  SET @error = -1
                  SET @error_message = 'El Importe total supera el límite de crédito del Socio de Negocio'
            END
      END

Gracias por la ayuda prestada.