Control Transaction - Cambio de moneda a Cta Cble

Buen día estimados, estoy queriendo realizar un control dentro del “SBO_SP_TransactionNotification” que no permita cambiar la moneda de una cuenta contable (en el plan de cuentas) si esta tiene saldo.

El desarrollo que hice hasta el momento es el siguiente:

--Variables Control de cambio de moneda en cuenta contable con saldo
MonedaCtaAhora NVARCHAR(5);
MonedaCtaAntes NVARCHAR(5);
BanderaCta INTEGER;
----------------------------------------------------
---------------------------------------------------------------------------------------
--Control de cambio de moneda en cuenta contable con saldo-- INICIO
---------------------------------------------------------------------------------------
--si se esta actualizando una cuenta contable
IF :object_type = '1' AND :transaction_type = ('U') THEN
	--consulto el valor de la moneda en la cuenta contable
	SELECT(	SELECT "ActCurr" FROM OACT WHERE "AcctCode" = :list_of_cols_val_tab_del) INTO MonedaCtaAhora FROM DUMMY;
	--consulto la ultima actualizacion de la cuenta contable y guardo la moneda con la que trabajaba
	SELECT(	SELECT TOP 1 ("ActCurr" +1)	FROM AACT WHERE "AcctCode" = :list_of_cols_val_tab_del ORDER BY "UpdateDate" ASC) INTO MonedaCtaAntes FROM DUMMY;
	--me fijo si hay registros en la tabla JDT1 con la cuenta contable (si tiene mvimientos)
	SELECT(	SELECT 1 FROM JDT1 WHERE "Account" = :list_of_cols_val_tab_del) INTO BanderaCta FROM DUMMY;
	--si la moneda cambio mostrar mensaje 
	IF (MonedaCtaAhora<>MonedaCtaAntes AND BanderaCta=1) THEN
		error := 22;
		error_message := 'No es posible cambiar la moneda a una cuenta contable con saldo';
		select :error, :error_message FROM dummy;
		Return;
	END IF;
END IF;
---------------------------------------------------------------------------------------
--Control de cambio de moneda en cuenta contable con saldo-- FIN
---------------------------------------------------------------------------------------

Al querer realizar una prueba para que me salte el mensaje, el sistema me muestra lo siguiente:

Hola @lfraschina, puedes intentar con esto:

IF :object_type = '1' AND :transaction_type = ('U') THEN
declare MonedaCtaAhora nvarchar(10);
declare MonedaCtaAntes nvarchar(10);
declare BanderaCta int;
	--consulto el valor de la moneda en la cuenta contable
	SELECT DISTINCT "ActCurr" INTO MonedaCtaAhora FROM OACT WHERE "AcctCode" = :list_of_cols_val_tab_del;
	--consulto la ultima actualizacion de la cuenta contable y guardo la moneda con la que trabajaba
	SELECT DISTINCT T0."ActCurr" INTO MonedaCtaAntes FROM AACT T0 WHERE T0."AcctCode" = :list_of_cols_val_tab_del AND T0."LogInstanc" = (select MAX(T1."LogInstanc") FROM AACT T1 where T1."AcctCode" = :list_of_cols_val_tab_del);
	--me fijo si hay registros en la tabla JDT1 con la cuenta contable (si tiene mvimientos)
	SELECT COUNT(*) INTO BanderaCta FROM JDT1 T0 WHERE T0."Account" = :list_of_cols_val_tab_del;
	--si la moneda cambio mostrar mensaje 
	IF (:MonedaCtaAhora != :MonedaCtaAntes AND :BanderaCta > 0) THEN
		error := 22;
		error_message := 'No es posible cambiar la moneda a una cuenta contable con movimientos';
	END IF;
END IF;

Este TN valida que no se pueda cambiar la moneda de una cuenta que ya tenga movimientos, incluso si su saldo es cero.

Si quieres validar que no se pueda cambiar la moneda cuando tenga saldo, entonces deberás aplicar un pequeño ajuste.

Lo probé y me funcionó.

Saludos.

2 Me gusta

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.