Validación en Oferta de venta y almacen

Buen día, estoy realizando una validación en una oferta de venta y, estoy trabajando con 2 tablas cabecera (OQUT ) y detalle(QUT1).
Tengo el siguiente caso, se requiere que se realice la validación siempre y cuando los clientes cuyo código que inicie con CX y solo debe permitir de un solo almacén (311102)

comparto la codificación y lo estoy realizando en hana studio, su apoyo por favor en alguna parte estoy realizando mal.
—Variable declarado–

CodCliente NVARCHAR(15);-----Código de cliente en Oferta de Venta
AlmacenOv NVARCHAR(8);----Almacén para Oferta de Venta

IF :object_type = ‘23’ AND (:transaction_type = ‘A’ or :transaction_type = ‘U’) then
SELECT T0.“CardCode” into CodCliente FROM OQUT T0 WHERE T0.“DocEntry”=:list_of_cols_val_tab_del;
SELECT T2.“WhsCode” into AlmacenOv FROM OQUT T1 INNER JOIN QUT1 T2 ON T1.“DocEntry”=:list_of_cols_val_tab_del;
IF(CodCliente =‘CX’ and AlmacenOv =‘311102’)
Then error:= 1023;
error_message:=‘El almacen seleccionado no es la correcta’;
End If;
End If;

1 me gusta

Hola @Alfredonb .
Deberías hacer un count para las líneas del detalle y así saber si en alguna de ellas esta el almacén que necesitas validar con eso no tendrías problemas si hay mas de una sola línea.

Para el tema del código del tercero puedes manejarlo con un LIKE ‘CX%’ en el IF de validación o con un substring tomando solo los dos primeros dígitos del código y así validas el “CX” ya que actualmente por lo que veo la condición valida el CX contra el código completo.
Espero haberme dado a entender.

1 me gusta

solo estas validando CX, por lo que la condicion jamas se cumplira…usa un like para que te tome el CX y lo que tenga…

Buen día,
Muchas gracias por responder, modifique el código con las indicaciones de @eduardo_buitr y @juliancab , al parecer no me está funcionado tal vez lo estoy haciendo mal la sentencia, comparto el código con las modificaciones realizadas
IF :object_type = ‘23’ AND (:transaction_type = ‘A’ or :transaction_type = ‘U’) then
SELECT T0.“CardCode” into CodCliente FROM OQUT T0 WHERE T0.“DocEntry”=:list_of_cols_val_tab_del;
SELECT count (1) into AlmacenOv FROM OQUT T1 INNER JOIN QUT1 T2 ON T1.“DocEntry”=:list_of_cols_val_tab_del;
IF(CodCliente like ‘CX%’ and AlmacenOv =‘311102’)Then
error:= 1023;
error_message:=‘El almacen seleccionado no es la correcta’;
End If;
End If;

mensaje de error que sale

Desde ya agradecer de su apoyo

@Alfredonb Cuando haces el count para saber el almacen debes poner el where con el codigo del almacen a notificar, por que estas validando el AlmacenOv con un valor de 311102 pero lo que le insertaste fue el count(1)
realiza el Like en el select que inserta el valor en CodCliente.

Hola @Alfredonb
Asi te deberia funcionar

cntA int;

IF :object_type = ‘23’ AND (:transaction_type = ‘A’ or :transaction_type = ‘U’) then
	SELECT COUNT(T1.“DocEntry”) into cntA FROM OQUT T1 
	INNER JOIN QUT1 T2 ON T1.“DocEntry” = T2.“DocEntry” 
	WHERE T1.“CardCode” LIKE 'CX%' AND T2.“WhsCode” <> ‘311102’ AND T1.“DocEntry”=:list_of_cols_val_tab_del;
    IF cntA > 0 Then 
		error:= 1023;
		error_message:=‘El almacen seleccionado no es correcto’;
	End If;
End If;

Andres Ramirez Jaramillo :colombia:

Buenas tardes, @andresramirez, te lo agradezco por la ayuda funcionó **perfectamente, por otro lado, tenía inconveniente cuando hacía para los Clientes nacionales que el código que inicia con C, lo cual tuve que crear un campo de usuario en Datos maestros socio de negocios. Adjunto la imagen de referencia.


Comparto la codificación si alguien mas del grupo tenga con el mismo caso
—Declaración de la variable
TipSocio nvarchar(10);

IF :object_type = ‘23’ AND (:transaction_type = ‘A’ or :transaction_type = ‘U’) then
SELECT T3.“U_SYP_TVN” INTO TipSocio FROM OQUT T1 LEFT JOIN OCRD T3 ON T1.“CardCode” = T3.“CardCode”
WHERE T1.“DocEntry”=:list_of_cols_val_tab_del;

IF :TipSocio = '01' THEN
	SELECT COUNT (1) into Cont FROM OQUT T1 INNER JOIN QUT1 T2 ON T1."DocEntry" = T2."DocEntry"
	LEFT JOIN OCRD T3 ON T1."CardCode" = T3."CardCode" 
	WHERE T2."WhsCode" NOT IN ('311101','301111') AND T1."DocEntry"=:list_of_cols_val_tab_del;
	IF Cont > 0 Then 
		error:= 1023;
		error_message:='El almacen seleccionado en detalle del documento no es la correcta para venta Nacional';
	End If;
END IF;

IF :TipSocio = '02' THEN
	SELECT COUNT (1) into Cont FROM OQUT T1 INNER JOIN QUT1 T2 ON T1."DocEntry" = T2."DocEntry"
	LEFT JOIN OCRD T3 ON T1."CardCode" = T3."CardCode" 
	WHERE T2."WhsCode"<>'311102' AND T1."DocEntry"=:list_of_cols_val_tab_del;
	IF Cont > 0 Then 
		error:= 1023;
		error_message:='El almacen seleccionado en detalle del documento no es la correcta para venta de Exportacion';
	End If;
END IF;	

END IF;
Muchas gracias @andresramirez , @juliancab , @eduardo_buitr

Hola @Alfredonb
Una forma facil de identificar si el cliente es nacional o exportacion, es por el pais en las direcciones, con esto evitas que los usuarios esten diligenciando campos adicionales.

Hola @andresramirez, se agrace bastante de las sugerencias

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.