cancel
Showing results for 
Search instead for 
Did you mean: 

Transaction Proveedor por Defecto

former_member263548
Participant
0 Kudos

Buenas tardes, tengo un problema con una TN para que no permita crear OC a otros proveedores que no sean los de por defecto, sin embargo en el momento de probarlo me permite crear solo para los que no se encuentran en la lista, les agradezco su ayuda.

El código es el siguiente:

IF (@object_type = '22')

  BEGIN

  IF  EXISTS

  (select t0.DocEntry from OPOR T0

  inner join POR1 t1 On t0.DocEntry = t1.DocEntry

  inner join OITM T2 on t1.itemcode = t2.itemcode

  inner join ITM2 t3 on T2.itemcode = T3.itemcode

  where T0.DocEntry = CAST(@list_of_cols_val_tab_del AS NVARCHAR(15)) and (T0.CardCode = t3.VendorCode))

  BEGIN

  SET @error_message = 'No puede registrar una Orden de Compra a diferente proveedor'

  SET @error = 2122

  END

  END

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Oscar,

Intenta con alguna de estas 2 opciones:


/* Inicio - Opción 1 */

IF (@object_type = '22')

BEGIN

  IF not EXISTS

  (select T0.DocEntry

  from OPOR T0

  inner join POR1 T1 On T0.DocEntry = T1.DocEntry

  inner join OITM T2 on T1.itemcode = T2.itemcode and T0.CardCode = T2.CardCode

  where T0.DocEntry = CAST(@list_of_cols_val_tab_del AS NVARCHAR(15)))

  BEGIN

  SET @error_message = 'No puede registrar una Orden de Compra a diferente proveedor'

  SET @error = 2122

  END

END

/* Fin - Opción 1 */

o esta otra:


/* Inicio - Opción 2 */

IF (@object_type = '22')

BEGIN

  IF not EXISTS

  (select T0.DocEntry

  from OPOR T0

  inner join POR1 T1 On T0.DocEntry = T1.DocEntry

  inner join OITM T2 on T1.itemcode = T2.itemcode

  inner join ITM2 T3 on T2.itemcode = T3.itemcode and T0.CardCode = T3.CardCode

  where T0.DocEntry = CAST(@list_of_cols_val_tab_del AS NVARCHAR(15)))

  BEGIN

  SET @error_message = 'No puede registrar una Orden de Compra a diferente proveedor'

  SET @error = 2122

  END

END

/* Fin - Opción 2 */

Te pongo dos opciones porque tengo la duda de porqué lo buscas en la tabla ITM2 si el proveedor por defecto está en OITM.

Saludos y suerte,

JC.

former_member263548
Participant
0 Kudos

Hola Juan Carlos, muchas gracias por tu pronta ayuda.

Lo busco en ITM2 para que en caso de que un proveedor no pueda suplir, lo haga otro de la lista ITM2 y permita crear la OC.

El único cambio que hice es en el último inner join al final la T3 no es CardCode sino VendorCode, el código final sería el siguiente por si le sirve a alguien más:

IF (@object_type = '22') 

BEGIN 

  IF not EXISTS 

  (select T0.DocEntry 

  from OPOR T0 

  inner join POR1 T1 On T0.DocEntry = T1.DocEntry 

  inner join OITM T2 on T1.itemcode = T2.itemcode 

  inner join ITM2 T3 on T2.itemcode = T3.itemcode and T0.CardCode = T3.VendorCode 

  where T0.DocEntry = CAST(@list_of_cols_val_tab_del AS NVARCHAR(15))) 

  BEGIN 

  SET @error_message = 'No puede registrar una Orden de Compra a diferente proveedor' 

  SET @error = 2122 

  END 

END 

Former Member
0 Kudos

Así es, olvidé cambiar CardCode por VendorCode cuando copié el query.

Pero básicamente era agregar NOT en el IF Exists.