Query validación "Campos definidos por el usuari"

Hola Muchachos,

Resulta que cree 3 campos nuevos en Campos definidos por el usuario para capturar el tipo de visitante en una factura de venta (Local, Nacional y Extranjero) y necesito validar que uno de los tres contenga datos o que no quede nulo pero no lo puedo hacer para que los tres me queden obligatorios ya que dos de ellos si pueden quedar en blanco.
Campos

Esta es la validación en el los procedimientos almacenados.


Hay un error y posiblemente la consulta puede estar mejor estructurada, cual seria la mejor forma de hacer la validación.
PD: Apenas estoy aprendiendo de este tema y sus sugerencias las recibo con mucho cariño.

Les agradezco mucho su ayuda.

Hola.

¿Y si concatenas los tres campos en tu consulta de SQL y validas que si el valor de la cadena es = 0 se dispare la validación?

De este manera estarías validando que uno o más campos tiene datos almacenados y de no ser así, la cadena de la concatenación será = 0 y se disparará el bloqueo.

Es solo una idea.

Saludos.

2 Me gusta

En mi opinión creo que sería mas sencillo solo tener un campo llamado U_turista y este campo tenga valores validos

01 - Turista Local
02 - Turista Nacional
03 - Turista Extranjero

En el TN la validación sería mas sencilla, algo mas o menos así

if @Objet_type = ‘13’ and @transaction_type in (‘A’, ‘U’)
begin
if (select U_turista from OINV where DocEntry = @list_of_cols_val_tab_del) is null
begin
set @error = 1
set @error_message = 'El campo tipo de turista es obligatorio’
end
end

4 Me gusta

Hola @Gera_Mendez,

Esa es la idea, pero no he logrado hacer la consulta para que me valide todo junto.

1 me gusta

Buenos días @villa54

En lo personal, yo haría lo que propone @pcarrasco, solo adicionaría el valor “00 - Sin asignación” y éste valor lo asignaría como valor por defecto, y en el bloque del TN valoraría que tenga uno de los posibles valores validos “01”, “02” o “03”, con esto orillas al usuario a razonar y elegir uno válido.

Posible validación:

if @Objet_type in('13') and @transaction_type in ('A', 'U')
	begin
		if (isnull((select u_turista from oinv where docentry = @list_of_cols_val_tab_del),'00') = '00')
			begin
				set @error = 9
				set @error_message = 'ATENCION !!!   No ha seleccionado un valor válido en el campo Turista, revise por favor ...'
			end
	end

Saludos
SAP B1 v9.2 PL03 (México)

3 Me gusta

Bueno, sería algo más o menos así:

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

		IF (SELECT Len(Concat(T0.U_Turista_Local, T0.U_Turista_Nacional, T0.U_Turista_Extranjero))  FROM ORDR T0 WHERE T0.[DocEntry] = @list_of_cols_val_tab_del) = 0        
			Begin
				set @error_message = 'Recuerda llenar al menos uno de los campos de turista'
				set @error = 1
				goto Final_de_las_validaciones
			END

	END

Yo lo probé en Ordenes de venta, solo sería cuestión de adecuarlo a tus necesidades.

Saludos. :wink: :mexico:

2 Me gusta

Muchas gracias a todos,

Al final encontre esta solución, ya que la que me dió @Gera_Mendez no me estaba validando los campos no se por que extraña razon no lo hizo.

Con esta consulta logré que me funcionara en factura deudores

if @object_type in ('13') and @transaction_type in ('A','U') begin
if (SELECT (t0.U_Turista_Local+ T0.U_Turista_Nacional+T0.U_Turista_Extranjero)  FROM OINV T0 WHERE T0.[DocEntry] = @list_of_cols_val_tab_del) = 0     
    begin
    set @error = 10
    select @error_message = 'SP75:Uno de los campos de Turista no puede ser nulo' 
   end
	end

Muchas gracias por la ayuda a todos.

Bueno, mucho tiene que ver el tipo de campos que estás utilizando, si es una cadena de caracteres, si es numérico, etc, por ello la mención de adecuarlo a tu ambiente productivo.

Que bien que lo haz solucionado, saludos. :wink:

1 me gusta

Si señor @Gera_Mendez,
Tenía la leve sospecha de que no funcionó por el tema de que los campos son numéricos y creo que concat no me acepta este tipo de campo.

Muchas gracias por la ayuda.
:wink:

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.