Query en TN Sap business one Hana

Como están
Estoy haciendo un TN para que no se repita el numero de documento de referencia cuando se crea una factura de proveedor, tengo este código en SQL donde funciona correctamente, en Hana le he cambiado algunas cosas pero no me funciona, espero me puedan ayudar con el codigo en Hana.

Codigo SQL

DECLARE @Refe as Nvarchar(50)
DECLARE @NIT AS Nvarchar(50)

	SELECT @Refe = T0.NumAtCard, @NIT = T0.CardCode 
			 FROM OPCH T0 
			 WHERE T0.NumAtCard NOT LIKE '%RS%' AND T0.Series <> '152' AND
			 T0.DocEntry = @list_of_cols_val_tab_del
IF Exists (SELECT COUNT(T1.NumAtCard), COUNT(T1.CardCode) FROM OPCH T1 WHERE T1.NumAtCard LIKE @Refe AND T1.CardCode LIKE @NIT  HAVING ((COUNT(T1.NumAtCard) >1) AND  (COUNT(T1.CardCode)> 1) ))
  	begin
				 set @error =10
				set @error_message ='SP # - 45 ***** ESTE DOCUMENTO YA ESTA REGISTRADO EN EL SISTEMA, POR FAVOR BUSQUE EL DOCUMENTO DE REFERENCIA: ' + @Refe + ' EN EL SISTEMA'
 			GOTO FinTN
	END
END

Código Hana

Referencia nvarchar(100);
Nit nvarchar(50);

IF object_type = '18' AND (:transaction_type='A' OR :transaction_type='U') THEN

	SELECT Referencia := T0."NumAtCard", Nit := T0."CardCode" 
	FROM OPCH T0
	WHERE T0."DocEntry" = :list_of_cols_val_tab_del
	;

	IF :Referencia, :Nit IN (SELECT  "NumAtCard", "CardCode" FROM OPCH) THEN

	error := 2;   
        error_message := '**** NVS - 02 El . No.Ref.del acreedor . ya se encuentra registrado en el sistema.';
	
	END IF;
END IF;

Estimado.
Lastimosamente no tengo el privilegio de contar con SAP HANA.

Sin embargo en estos sitios hay unos manuales de SQL HANA Revisalos y espero te sirvan para algo.
(debes quitar el guion bajo _, y sustituirlo por la letra “t”)

h_tps://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.03/en-US/20ff532c751910148657c32fe3431a9f.html

h_tps://www.guru99.com/sap-hana-calculation-view.html

Saludos.

1 me gusta

Absolutamente nada en los 2 query es igual.
La lógica va asi, hace un par de años que no manejo Hana y no tengo donde ejecutar este código pero esto debería servirte y darte una idea

Referencia := SELECT A0.NumAtCard FROM OPCH A0 WHERE A0.DocEntry = :list_of_cols_val_tab_del;

Qty := SELECT COUNT(T0.DocEntry) FROM OPCH T0 WHERE T0.NumAtCard = :Referencia;

IF :Qty > 1 THEN error

1 me gusta

Buen dia.

Te comparto una de mis validaciones para este caso y esta en hana solo cámbiala a tus necesidades.

IF :object_type= '18' AND (:transaction_type='A' OR :transaction_type='U')
  then 
 SELECT (select T0."EDocNum" FROM OPCH T0 where T0."DocEntry" = :list_of_cols_val_tab_del) INTO UUID FROM DUMMY;
 SELECT (select COUNT(*) AS "Contador" FROM OPCH T2 WHERE  T2."EDocNum" =:UUID  
 AND T2."DocEntry"<>:list_of_cols_val_tab_del ) INTO contador FROM  DUMMY;
 
    IF (:contador > 0) THEN SELECT 101 INTO error FROM DUMMY;
 	SELECT n'ESTE UUID YA FUE DADO DE ALTA' INTO error_message FROM DUMMY;
END if;
END IF;
3 Me gusta

Muchas gracias @saufondez @epr06 y @jose_saul_san

Logré resolverlo con un poco de cada una de sus respuesta, el código final es este, por cada socio de negocio el numero de referencia proveedor/acreedor debe ser único en el sistema:

CNT:= 0;
IF object_type = '18' AND (:transaction_type='A' OR :transaction_type='U') THEN

	DECLARE	Referencia nvarchar(100);
	DECLARE Nit nvarchar(50);
	
	SELECT A0."NumAtCard" INTO Referencia FROM OPCH A0 WHERE A0."DocEntry" = :list_of_cols_val_tab_del;
	SELECT B0."CardCode" INTO Nit FROM OPCH B0 WHERE B0."DocEntry" = :list_of_cols_val_tab_del;
	SELECT COUNT(T0."DocEntry")INTO CNT FROM OPCH T0 WHERE T0."NumAtCard" = :Referencia AND T0."CardCode" = :Nit  ;

IF :CNT > 1 THEN 

	error := 2;   
        error_message := '**** NVS - 05 El . No.Ref.del acreedor . ya se encuentra registrado en el sistema.';
	
	END IF;
END IF;
1 me gusta