cancel
Showing results for 
Search instead for 
Did you mean: 

Validación en transaction notification para facturas de clientes

Former Member
0 Kudos

Hola,

Apenas estoy comenzando a utilizar el transaction y no comprendo muy bien la lógica que aplica. Tengo que hacer una validación que me impida crear una Factura de clientes si no viene de un documento de Orden de Venta.

Tengo el siguiente transaction:

--Transaction para impedir creación de facturas de clientes sin orden de venta previa

IF @object_type = '13' and @transaction_type in ('A', 'U')

BEGIN

IF (SELECT TOP 1 ISNULL(T1.BaseEntry,'') FROM OINV T0

        INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

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

        WHERE T1.DocEntry=1 order by T1.BaseEntry desc)=''

BEGIN

SELECT @error=106, @error_message='Factura sin orden de venta previa'

END

END

Cuando hago una factura de servicio o de articulo sin copiarla de una Orden de venta, lo detecta y me envía el mensaje 'Factura sin orden de venta previa', el problema viene que cuando hago la orden de venta y la copio a una factura de proveedores también envía el mismo mensaje y no me deja crear la factura.

Alguien sabe porque sucede esto??

Ocurre lo mismo con las siguientes transacciones.

-- Impide entrada de mercancia proveedor sin orden de compra previa.

IF (@object_type='20') AND (@transaction_type='A')

BEGIN

IF (SELECT TOP 1 ISNULL(T1.BaseEntry,'') FROM OPDN T0

        INNER JOIN PDN1 T1 ON T0.DocEntry = T1.DocEntry

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

        WHERE T1.DocEntry=1 order by T1.BaseEntry desc)=''

BEGIN

SELECT @error=102

SET @error_message='Entrada de mercancia sin orden de compra (Pedido)'

END

END

---

--Impide la creación de facturas sin entrada de mercancia,solo permite crear la factura para un grupo de proveedores en especifico.

IF @object_type ='18' AND @transaction_type IN ('A','U')

BEGIN

IF (SELECT TOP 1 ISNULL(T1.BaseEntry,'') FROM OPCH T0

        INNER JOIN PCH1 T1 ON T0.DocEntry = T1.DocEntry

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

        WHERE T1.DocEntry=1 and T2.GroupCode !='103' and T1.LineNum='0' order by T1.BaseEntry desc)=''

BEGIN

SELECT @error=103, @error_message='Factura sin entrada de mercancia'

END

END

--Impide la creación de facturas copiadas del pedido

IF @object_type ='18' AND @transaction_type IN ('A','U')

BEGIN

IF EXISTS(SELECT T1.BaseEntry FROM OPCH T0

  INNER JOIN PCH1 T1 ON T0.DocEntry = T1.DocEntry

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

  WHERE T1.DocEntry=@list_of_cols_val_tab_del and T1.BaseType<>'20'and T2.GroupCode !='103')

BEGIN

SELECT @error=104, @error_message='Factura sin entrada de mercancia'

END

END

--

Saludos!

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hola guadalupe,

Prueba de esta manera

DECLARE @Num int

IF @object_type = '18' AND (@transaction_type = 'A' OR @transaction_type = 'U')

BEGIN

    IF @transaction_type = 'A'  or @transaction_type = 'U'

  BEGIN

     SET @Num=( SELECT     COUNT(*) AS Contador

  FROM         OPCH T0 INNER JOIN

                      PCH1 T1 ON T0.DocEntry = T1.DocEntry

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


  WHERE T1.BaseType=-1 and   T0.DocEntry =@list_of_cols_val_tab_del)

            

  IF (@Num>0)

  BEGIN

  SELECT @error = 101

  SELECT @error_message = N'El Documento debe estar enlazado a una Entrada de Mercancias,No Es Posible Crearlo'

  END

  END

END

Puedes recrearlo para facturas de ventas, lo que veo en el tuyo es que el  T1.DocEntry =@list_of_cols_val_tab_del lo estas haciendo contra la tabla de lineas deberías hacerlo contra T0.docentry que es la cabecera, otra cosa es que estas validando con el baseentry,valida con el basetype que es  donde indica que tipo de documento de entrada utiliza, si no tiene documento base el valor es -1, si fuera de un pedido te daría el objectype de la orden de compra.

Agregale las validaciones que sean necesarias

saludos,

Wuilmer Venegas