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.
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?
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!!
2 Me gusta