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”)
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
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;
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;