cancel
Showing results for 
Search instead for 
Did you mean: 

Transaction Notification para validar datos repetidos

Former Member
0 Kudos

Buenos días,

Tengo un problema, necesito crear un transaction N, para lo siguiente:

Resulta que en pagos recibidos -- medios de pago -- cheque, quisiera validar que cuando el numero de cheque sea repetido entonces me arroje un error de que debe cambiar el numero de cheque, claro está que hay distintos bancos y los números de chuque podrían ser iguales, por lo que habría que validar que si el numero de cheque es igual siempre y cuando sea del mismo banco entonces se genere el error.

Además ahí mismo en medios de pago, pero ahora en transferencias bancaria, quisiera validar en el campo de referencia (TrsfrRef), que cuando sea un mismo número de referencia entonces se genere un error.

Agradecería mucho la ayuda para poder hacer esto.

Muchas gracias por su atención.

saludos.

Accepted Solutions (1)

Accepted Solutions (1)

former_member188440
Active Contributor
0 Kudos

USa la funcion HAVING COUNT para encontrar datos repetidos

Former Member
0 Kudos

Disculpa pero como genero esto en el código?.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Un Ejemplo

SELECT T0.NumAtCard, COUNT(T0.NumAtCard)

FROM OINV T0

GROUP BY T0.NumAtCard HAVING COUNT(T0.NumAtCard) > '1'

Entonces solo arrojara datos que tenga repetido el NumAtCard

Deberias usar un IF EXISTS

Slds

Edited by: Floyola on May 19, 2011 12:12 PM

former_member188440
Active Contributor
0 Kudos

Por ejemplo si quisieras encontrar docentry repetidos de facturas podrias hacer algo como



if @transaction_type in ('A') and @object_type in (13)

begin

declare @duplicados as int

set @duplicados =(select count (docentry) from oinv group by docentry having count(1) > 1

if @duplicados >=1
begin
set @error =1
set @error_message ='Existen documentos duplicados'

end
end

algo asi

Former Member
0 Kudos

Alguno sabe cual es el Object Type de Medios de Pago?

former_member188440
Active Contributor
0 Kudos

Mas bien revisa la vpm1 o rct1 que contiene los datos del pago por cheque, ahi creo que debes hacer el having count

o tambien en la tabla OCHO (CHeques para el pago)

Former Member
0 Kudos

No es que acabo de aclarar algo y a la final solo se hara la validación para el campo de referencia.

Por ahora tengo algo asi:

if @transaction_type in ('A') and @object_type in (13)
 
begin
 
declare @duplicados as int
 
set @duplicados =(select count (TrsfrRef) from ORCT group by TrsfrRef having count(1) > 1

if exists @duplicados >=1
begin
set @error =1
set @error_message ='Referencia ya Existe'
 
end
end

Pero me genera el siguiente error:

Msg 156, Level 15, State 1, Procedure SBO_SP_TransactionNotification, Line 30
Incorrect syntax near the keyword 'if'.

Ademas que el Object Type no es el 13.

former_member188440
Active Contributor
0 Kudos

Te falta un parentesis que cierra aqui , el 13 es un ejemplo que puse, nada mas



set @duplicados =(select count (TrsfrRef) from ORCT group by TrsfrRef having count(1) > 1   )  <------este te falta

felipe_loyolarodriguez
Active Contributor
0 Kudos

Pruabalo asi


if @transaction_type in ('A') and @object_type = 24
 
begin
 
declare @Cheque as int
 
set @Cheque = (select CheckNum from RCT1 where DocEntry = @list_of_cols_val_tab_del)
IF Exists (SELECT COUNT(CheckNum) FROM RCT1 WHERE CheckNum = @Cheque GROUP BY CheckNum HAVING COUNT(CheckNum) > '1')

begin
set @error =1
set @error_message ='Existen documentos duplicados'
 
end
end

Slds

Edited by: Floyola on May 19, 2011 12:42 PM

Former Member
0 Kudos

Ok, ya arregle eso, y el numero del Object Type, ya revise el excel que me pasaron una vez pero no aparece ahí

former_member188440
Active Contributor
0 Kudos

El object type es el 24 para la incoming payments

Former Member
0 Kudos

Coloco el código de esta forma:

IF  @object_type = '24'  and @transaction_type  IN ('A','U')
 
begin
 
declare @duplicados as int
 
set @duplicados =(select count (TrsfrRef) from ORCT group by TrsfrRef having count(TrsfrRef) >= 1)
 
if @duplicados >= 1
begin
set @error =1
set @error_message ='Referencia ya Existe'
 
end
end

Se ejecuta con exito, pero en el sistema no sucede nada.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Utiliza el que puse mas arriba

aver que tal

Former Member
0 Kudos

Pero ese es para el caso de los cheques, y ya ese no se validara, igual intente montar lo que necesitaba con ese código pero me daba error.

former_member188440
Active Contributor
0 Kudos

Intenta con


IF  @object_type = '24'  and @transaction_type  IN ('A','U')
 
begin
 declare @referencia nvarchar (10)
declare @duplicados as int
 
set @referencia=(select TrsfrRef from ORCT where docentry=@list_of_cols_val_tab)
set @duplicado = (select count (TrsfrRef) from ORCT where TrsfrRef =@referencia) 

if @duplicado >0
begin
set @error =1
set @error_message ='Referencia ya Existe'
 
end
end

Former Member
0 Kudos

Lo hace pero para cualquier número de referencia que registro, para cualquier numero me genera el error de que referencia ya existe, este duplicado o no el número.

Edited by: Miguel Angel Ascanio on May 19, 2011 8:32 PM

former_member188440
Active Contributor
0 Kudos

Ok cambia la tabla ORCT por la ARCT , unicamente donde comparas la variable @referencia

Former Member
0 Kudos

Ahora permite crear el documento, este o no duplicado el dato.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Cambia el


if @duplicado >0

Por


if @duplicado > 1

Veamos que sucede

Former Member
0 Kudos

Actua de la misma manera, a cualquier referencia duplicada o no genera el error, y si le cambio la tabla por ARCT entonces crea el documento este duplicado o no el campo, con 0 o con 1 esta haciendo lo mismo.

felipe_loyolarodriguez
Active Contributor
0 Kudos

mmm...que tal asi


if @transaction_type in ('A','U') and @object_type = 24
 
begin
 
declare @Ref as Nvarchar(50)
 
set @Ref = (select TrsfrRef from ORCT where DocEntry = @list_of_cols_val_tab_del)
IF Exists (SELECT COUNT(TrsfrRef) FROM ORCT WHERE TrsfrRef = @Ref HAVING COUNT(TrsfrRef) > '1')
 
begin
set @error =1
set @error_message ='Existen documentos duplicados'
 
end
end

Espero sirva, sino habra que pensar mas jajaja

Slds

Former Member
0 Kudos

Hice la prueba colocando un numero de referencia en el if e igual me genereraba el documento.

coloque

if @duplicado = 0000030140

, luego cree un documento colocando como número de referencia 0000030140, y no ejecuta la condición.

Former Member
0 Kudos

Hombre Floyola como que te lo tenias guardado jaja, ese funciono perfectamente, bueno dejame hacer distintas pruebas para ver si funciona todo todo, y vengo a darle sus puntos..

Muchas Gracias a ambos.

Former Member
0 Kudos

Buenos días,

Floyola el código para la referencia en medios de pago sirve perfectamente pero ahora estoy intentando usar el mismo código para hacer los mismo pero ahora en el campo de referencia bancaria en el deposito.

if @transaction_type in ('A','U') and @object_type = 25
 
begin
 
declare @Refe as Nvarchar(50)
 
set @Refe = (select Ref2 from ODPS where DocEntry = @list_of_cols_val_tab_del)
IF Exists (SELECT COUNT(Ref2) FROM ODPS WHERE Ref2 = @Refe HAVING COUNT(Ref2) > '1')
 
begin
set @error =100-1
set @error_message ='Existe Número de Referencia Bancaria duplicado'
 
end
end

Ese es el código que utilizo, el mismo que me pasaste pero cambiandole algunas cosas, pero me genera el siguiente error:

Msg 207, Level 16, State 1, Procedure SBO_SP_TransactionNotification, Line 48
Invalid column name 'DocEntry'.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola Miguel, tu problema se debe a que los depositos no se rigen por el campo llave DocEntry , en su caso el campo es el DeposId . No todos los documentos tienen el campo DocEntry, debes revisar la tabla antes de hacer el TN.


if @transaction_type in ('A','U') and @object_type = 25
 
begin
 
declare @Refe as Nvarchar(50)
 
set @Refe = (select Ref2 from ODPS where DeposId = @list_of_cols_val_tab_del)
IF Exists (SELECT COUNT(Ref2) FROM ODPS WHERE Ref2 = @Refe HAVING COUNT(Ref2) > '1')
 
begin
set @error =100-1
set @error_message ='Existe Número de Referencia Bancaria duplicado'
 
end
end

Atte.

Felipe Loyola

Former Member
0 Kudos

Vale muchisimas Gracias Felipe.

Saludos.

Former Member
0 Kudos

Felipe estoy intentando hacer lo mismo pero ahora para los números de cheque en los medios de pago.

if @transaction_type in ('A','U') and @object_type = 24
 
begin
 
declare @Check as Nvarchar(50)
 
set @Check = (select CheckNum from RCT1 where LineID = @list_of_cols_val_tab_del)
IF Exists (SELECT COUNT(CheckNum) FROM RCT1 WHERE CheckNum = @Check HAVING COUNT(CheckNum) > '1')
 
begin
set @error =100-2
set @error_message ='Existe Número de Cheque duplicado'
 
end
end

Es el código que estoy usando pero no me esta validando nada, que puede ser?

saludos.

Former Member
0 Kudos

Ok ya lo arregle, donde dice LineID, coloque DocNum

Former Member
0 Kudos

Por favor me podrian ayudar con lo siguiente:

Resulta que ya tengo las validaciones requeridas, pero esta pasando algo que no habia probado, en la validación del número de cheque me lo hace cuando son registros en distintos documentos, pero quisiera validar tambien lo siguiente, cuando se hace el registro de cheque en medios de pago, podría darse el caso de que registren varios cheques a la vez, y haciendo esta prueba de registrar varios cheques en distintas lineas, no me esta haciendo la validación, de hecho me esta dando error.

Answers (0)