Sp bloqueo al momento de crear socio de negocio

Buenas noches.

Amigos, en mi empresa me solicitaron hacer un bloqueo por que impidiera crear un socio de negocio si no llenan el campo de dirección o ciudad de Facturacion.

En primer lugar pensé en un bloqueo por SP. Lo intente hacer, pero me impide crear el SN aun teniendo los campos diligenciados. A continuación dejo el SP que he diseñado, agradezco toda la ayuda que me puedan brindar o si existe otra manera de poder bloquear lo que requiero.

IF :object_type = ‘2’ and (:transaction_type=‘A’ or transaction_type=‘U’) THEN
SELECT COUNT(*) INTO CNT
FROM OCRD T0
INNER JOIN CRD1 T1 ON T0.“CardCode” = T1.“CardCode”
WHERE T1.“Street” IS NULL OR T1.“City” IS NULL AND T0.“CardCode”= :list_of_cols_val_tab_del;

IF :CNT>0 THEN
	error :=107;
	error_message :=N'SP## 27: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARCE SIN EL CAMPO CALLE O CIUDAD';
END IF;

END IF;

Muchas Gracias!!

Hola @Edinson_Hoyos, de principio veo bien tu query, te sugiero cambiar el “IS NULL”, por la funcion IFNULL, quedaria algo asi:

WHERE IFNULL(T1.“Street”,'')='' OR IFNULL(T1.“City”,'')='' AND T0.“CardCode”= :list_of_cols_val_tab_del;

De todas maneras toma en cuenta que tu condición dice que bloqueara cuando cualquiera de los 2 campos estén vacíos.

Saludos,

1 me gusta

Buenos dias,

Estimado @Willy_Caldero aplique los cambios que me mencionaste, pero sigue sin dejarme crear el SN aun teniendo los campos diligenciados.
dejo captura de la imagen.
SP SOCIOS DE NEGOCIOS

En estos casos, siempre toca revisar tu query con lo valores grabados.
Ejecuta tu query en el query manager, cambiando el codigo del SN, para ver si realmente el query es el problema.

Ya verificaste que tengas información en esos campos sobre la dirección de facturación ??
o agrega el AdresType en tu consulta para limitarla al tipo de dirección que necesites.

Lo validé en SQL y queda así

IF @object_type = 2 AND @transaction_type IN ('A','U')
   BEGIN
   SELECT @cuantos = ( SELECT COUNT(*) 
			                     FROM OCRD T0
			                    INNER JOIN CRD1 T1 ON T0.CardCode = T1.CardCode
			                   WHERE 
			                        T1.Street IS NULL 
			                      OR T1.City IS NULL 
			                     AND T1.AdresType = 'S'
			                     AND T0.CardCode = @list_of_cols_val_tab_del)
    IF @cuantos > 0 
	BEGIN
   SELECT @error=200,
          @error_message='NSP## 27: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARCE SIN EL CAMPO CALLE O CIUDAD'
   END
   END

Saludos.

Buenas tardes @Edinson_Hoyos prueba con la condicion asi

(T1.Street IS NULL
OR T1.City IS NULL )
AND T1.AddrType = ‘S’
AND T0.CardCode = @list_of_cols_val_tab_del

o bien

WHERE (IFNULL(T1.“Street”,'')='' OR IFNULL(T1.“City”,'')='' ) AND T0.“CardCode”= :list_of_cols_val_tab_del;

Depende de lo que quieras realizar si en los dos tipos de direcciones o en una sola o bien sql o hana, solo encerre entre parentesis las condiciones de calle y ciudad

Aun sigue sin dejarme crear el cliente, aun teniendo los campos llenos. Alguna otra idea?

:frowning:

Hola @Edinson_Hoyos

Puedes compartirnos tu código, tal cual lo mencione en el post anterior me funciona

 IF @object_type = 2 AND @transaction_type IN ('A','U')
   BEGIN
      SELECT @cuantos = ( select COUNT(*) 
			FROM OCRD T0
			INNER JOIN CRD1 T1 ON T0.CardCode = T1.CardCode
			WHERE T1.Street IS NULL  OR T1.City IS NULL 
			   AND T1.AdresType = 'B'       -- B  Factura  'S' Entrega 
			  AND T0.CardCode = @list_of_cols_val_tab_del)
    IF @cuantos > 0 
	BEGIN
     SELECT @error=200,
          @error_message='NSP## 27: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARCE SIN EL CAMPO CALLE O CIUDAD'
     END
   END

Estimado @pcarrasco, aquí te comparto el código que uso en hanna studio.

IF :object_type = '2' AND (:transaction_type='A' OR transaction_type='U') THEN
	SELECT COUNT(*) INTO CNT
	FROM OCRD T0  
	INNER JOIN CRD1 T1 ON T0."CardCode" = T1."CardCode" 
	WHERE T1."Street" IS NULL OR T1."City" IS NULL AND T1."AdresType" ='B' AND T0."CardCode"= :list_of_cols_val_tab_del;
	
	IF :CNT>0 THEN
		error :=107;
		error_message :=N'SP## 28: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARSE SIN EL CAMPO CALLE O CIUDAD';
	END IF;
END IF; 

Cabe recalcar, que si uso las paracentesis () en el where no me lo tiene en cuenta, pues me deja crear el cliente sin validar que los campos están vacíos.
Y de esta forma, me tiene en cuenta la validación, pero aun teniendo los campos de calle y ciudad diligenciados, no me los deja crear, me salta el mensaje:

error_message :=N'SP## 28: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARSE SIN EL CAMPO CALLE O CIUDAD';

quita el control, graba el SN con los datos que estas probando, y en el query manager, prueba ejecutar el query para ver que te devuelve:

SELECT COUNT(*) INTO CNT
	FROM OCRD T0  
	INNER JOIN CRD1 T1 ON T0."CardCode" = T1."CardCode" 
	WHERE T1."Street" IS NULL OR T1."City" IS NULL AND T1."AdresType" ='B' AND T0."CardCode"=

Colocas el codigo de SN creado.
El resultado deberia ser cero, si es asi, toca revisar tu SP TN, para ver si no tienes otro bloque del mismo tipo ya creado, sino sale cero, hay que probar cambiar el orden de las clausulas en el WHERE, o talvez cambiar tu query, no es necesario que consultes la OCRD, directamente podrias consultar la CRD1.

Prueba, y nos avisas.

Buenos días. Estimado @Willy_Caldero Me sirvió tu comentario. Lo que hice fue solo consultar la tabla CRD1 y cambiar el orden del WHERE.
A continuación dejo el query final.

IF :object_type = '2' and (:transaction_type='A' or transaction_type='U') THEN
	SELECT COUNT(*) INTO CNT
	FROM CRD1 T0
	WHERE T0."AdresType" ='B' AND (T0."Street" IS NULL OR T0."City" IS NULL) AND T0."CardCode"= :list_of_cols_val_tab_del;

	IF :CNT>0 THEN
		error :=107;
		error_message :=N'SP## 28: LOS SOCIOS DE NEGOCIO NO PUEDEN CREARCE SIN EL CAMPO CALLE O CIUDAD';
	END IF;
END IF;

Gracias!! :slight_smile: :smiley: :smiley:

2 Me gusta