cancel
Showing results for 
Search instead for 
Did you mean: 

Transaction- Condiciones de Pago en Orden de Venta

former_member203638
Active Contributor
0 Kudos

Hola a todos, me gustaria bloquear si un usuario en especifico me cambia la condicion de pago en la Orden de Venta, hice este transaction pero cuando le meto la validacion del usersign no entra, y si se lo quito tambien me permite cambiar la condicion, no veo el error.

 
Declare @cond_cli varchar
Declare @cond_doc varchar 
Declare @CodCli int
Declare @UserId int
If (@Object_Type = '17' and @transaction_type in ('A','U'))
Begin
Set @CodCli   =  (Select CardCode From ORDR Where DocEntry=@list_of_cols_val_tab_del)
Set @cond_cli = (Select GroupNum From OCRD Where CardCode=@CodCli)
Set @cond_doc = (Select GroupNum From ORDR Where DocEntry= @list_of_cols_val_tab_del)
Set @UserId = (select UserSign2 from ORDR where DocEntry = @list_of_cols_val_tab_del)
IF ((@cond_cli != @cond_doc) and @UserId in (50))
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

Alguien me puede apoyar?

Saludos

Alessandro.

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola Alessandro

Prueba el SP_TN de esta manera


--  VALIDA CONDICION DE PAGO
If @Object_Type = '17' AND @transaction_type IN ('A','U')
BEGIN
	DECLARE 
			@CardCode varchar(12),
			@Pago_OV SMALLINT,
			@Pago_SN SMALLINT,
			@UserId SMALLINT
			 
	SET	@CardCode = (Select CardCode From ORDR Where DocEntry=@list_of_cols_val_tab_del)
	SET	@Pago_OV = (Select GroupNum From ORDR Where DocEntry= @list_of_cols_val_tab_del)
	SET	@Pago_SN = (Select GroupNum From OCRD Where CardCode=@CardCode)
	SET	@UserId = (select UserSign from ORDR where DocEntry = @list_of_cols_val_tab_del)

	IF ((@Pago_OV != @Pago_SN)AND @UserId = 50)
	BEGIN
		SELECT @error = -600, @error_message= 'No se Permite Cambiar la Condicion de Pago'
	END
END

Atte.

Felipe Loyola

Edited by: Floyola on Jun 19, 2011 4:37 PM

former_member203638
Active Contributor
0 Kudos

Gracias Floyola, pero me da el mismo resultado aun me permite cambiar las condiciones.

Pero, si le quito la validacion del usersign si funciona. O_o

Saludos

Alessandro

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola Alessandro

El UserSing es el usuario que crea el documento

El UserSing2 es quien modifica...Cambia el SET del UserId por el UserSing2

Slds

former_member188440
Active Contributor
0 Kudos

Revisa esta solucion propuesta

[]

Si tienes version superior a 2007 no existe la columna usersign2 en la tabla OCRD ni en la ACRD

La solucion que te posteo es para bloquear cambios en la razon social, pero te puede servir de ayuda

former_member203638
Active Contributor
0 Kudos

Tengo SAP 8.8 PL:20

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

CORRIJO

En la 8.8 si existe la columna usersign2

YA intentaste con el query q te pase?

felipe_loyolarodriguez
Active Contributor
0 Kudos

Mauricio,

Yo tengo SAP B1 2007A SP 00 PL 49 y exactamente no existe el campo UserSing2 en OCRD y ACRD

Pero si existe en las tablas de documentos OPCH,OINV...etc. Aunque no aparecen en el generador de consutas pero si estan

Alessandro, la idea del TN es que este usuario especifico no modifique o que ningun usuario pueda modificar o crear el docuemnto con un medio de pago distinto al que esta en el SN?

Slds

Edited by: Floyola on Jun 20, 2011 12:13 PM

former_member188440
Active Contributor
0 Kudos

Q tal asi?



if @object_type in ('17') and @transaction_type in ('U')
begin
declare @user as int
set @user =(select usersign2 from ordr where docentry =@list_of_cols_.,,,,)

if (select groupnum from ordr where docentry=@list_of_cols_,,,,,,,,) != (select groupnum from ADOC where objtype=17 and
docentry=@list_of_cols_val....) AND @user in (3,5,2)--- el numero correspondiente al userId de la OUSR que quieres bloquear

begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

former_member203638
Active Contributor
0 Kudos

Floyola, la idea del tracsaction es que 3 usuarios en especifico no modifiquen la condicion,

Mauricio, estoy probando tu transaction, en unos minutos mas les comento.

Saludos

Alessandro.

felipe_loyolarodriguez
Active Contributor
0 Kudos

mmm

Como te decia, prueba cambiando el UserSign de mi validacion


--  VALIDA CONDICION DE PAGO
If @Object_Type = '17' AND @transaction_type IN ('A','U')
BEGIN
	DECLARE 
		@CardCode varchar(12),
		@Pago_OV SMALLINT,
		@Pago_SN SMALLINT,
		@UserId SMALLINT
			 
	SET	@CardCode = (SELECT CardCode FROM ORDR WHERE DocEntry=@list_of_cols_val_tab_del)
	SET	@Pago_OV = (SELECT GroupNum FROM ORDR WHERE DocEntry= @list_of_cols_val_tab_del)
	SET	@Pago_SN = (SELECT GroupNum FROM OCRD WHERE CardCode=@CardCode)
	SET	@UserId = (SELECT UserSign2 FROM ORDR WHERE DocEntry = @list_of_cols_val_tab_del)
 
	IF ((@Pago_OV != @Pago_SN) AND @UserId IN ('X','Y','Z'))
	BEGIN
		SELECT @error = -600, @error_message= 'No se Permite Cambiar la Condicion de Pago'
	END
END

Espero sirva

Atte.

FLR

former_member203638
Active Contributor
0 Kudos

Floyola, exactamente como lo pones asi lo hice con el usersign2, y me permite cambiar la condicion.

Mauricio, no me va, no me bloquea si cambio la condicion en la OV

O_o

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

Ok asi lo probe con las ofertas a clientes

solo cambia el 23 por el numero 17 y la OQUT por la ORDR



if @transaction_type in ('U') and @object_type in ('23')
begin
declare @user as int
declare @cp1 as int
declare @cp2 as int
set @user =(select usersign from oqut where docentry =@list_of_cols_val_tab_del)
 
set @cp1=(select groupnum from OQUT where docentry=@list_of_cols_val_tab_del)
set @cp2= (select GroupNum from ADOC where objtype=23 and
docentry=@list_of_cols_val_tab_del and LogInstanc in (select MAX(LogInstanc-1)from ADOC where DocEntry =@list_of_cols_val_tab_del) ) 
if  (@user = 1) and @cp1 != @cp2--- el numero correspondiente al userId de la OUSR que quieres bloquear
 
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End
 

former_member203638
Active Contributor
0 Kudos

Mauricio Te funciono a ti en cotizacion? Ya que Copie tu codigo para el modulo de cotizaciones y no me funciono.

Le cambie las tablas y el objectype para la ORDR y tampoco me funcionó.


If @transaction_type in ('A','U') and @object_type in ('17')
begin
declare @user as int
declare @cp1 as int
declare @cp2 as int
set @user =(select UserSign from ORDR where docentry =@list_of_cols_val_tab_del)
 
set @cp1=(select groupnum from ORDR where docentry=@list_of_cols_val_tab_del)
set @cp2= (select GroupNum from ADOC where objtype=17 and docentry=@list_of_cols_val_tab_del and LogInstanc in (select MAX(LogInstanc-1)from ADOC where DocEntry =@list_of_cols_val_tab_del) ) 
if  (@user = 50,126) and @cp1 != @cp2
 
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

Tambien le cambie a UserSign2 y nada. O_o

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

si vas a agregar mas de un usuario, utiliza la opcion de



@user in (50,126)

de otra forma lo tomara como si igualaras el @user con 50,126 , osea cincuenta mil ciento ventiseis

former_member203638
Active Contributor
0 Kudos

Se me fue el 126, si, es in, pero aun no me valida.

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

a ver , pon el codigo que estas usando por favor

former_member203638
Active Contributor
0 Kudos

Claro Mauricio, El ultimo que probe es el tuyo,


If @transaction_type in ('A','U') and @object_type in ('17')
begin
declare @user as int
declare @cp1 as int
declare @cp2 as int
set @user =(select UserSign2 from ORDR where docentry =@list_of_cols_val_tab_del)
 
set @cp1=(select groupnum from ORDR where docentry=@list_of_cols_val_tab_del)
set @cp2= (select GroupNum from ADOC where objtype = '17' and docentry=@list_of_cols_val_tab_del and LogInstanc in (select MAX(LogInstanc-1)from ADOC 
where DocEntry =@list_of_cols_val_tab_del) ) 
if  (@user = 50) and @cp1 != @cp2
 
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

Creo que a mi me funciona porque en el max (loginstac) yo no tengo mas documentos (Facturas, entregas, etc) que afecten la ADOC

Quizas ya en productivo como es tu caso, necesitas un filtro mas en la ultima parte

Intenta asi


If @transaction_type in ('A','U') and @object_type in ('17')
begin
declare @user as int
declare @cp1 as int
declare @cp2 as int
set @user =(select UserSign2 from ORDR where docentry =@list_of_cols_val_tab_del)
 
set @cp1=(select groupnum from ORDR where docentry=@list_of_cols_val_tab_del)
set @cp2= (select GroupNum from ADOC where objtype = '17' and docentry=@list_of_cols_val_tab_del
 and LogInstanc in (select MAX(LogInstanc-1)from ADOC where objtype = '17' AND DocEntry =@list_of_cols_val_tab_del) ) 
if  (@user = 50) and @cp1 != @cp2
 
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

former_member203638
Active Contributor
0 Kudos

www.charlie-colop.com.mx/Condiciones_SAP.jpg

No entiendo por que me deja actualizar, como que no toma los parametros del usersign.

Saludos

Alessandro

former_member188440
Active Contributor
0 Kudos

Pusiste el codigo tal cual lo puse arriba??? O_o

felipe_loyolarodriguez
Active Contributor
0 Kudos

Alessandro prueba este codigo


--  VALIDA CONDICION DE PAGO EN ORDEN DE VENTA
If @Object_Type = '17' AND @transaction_type IN ('U')
BEGIN
	DECLARE 
			@CardCode varchar(12),
			@Pago_OV SMALLINT,
			@Pago_SN SMALLINT,
			@UserId SMALLINT
			 
		SET	@CardCode = (Select CardCode From ORDR Where DocEntry=@list_of_cols_val_tab_del)
		SET	@Pago_OV = (Select GroupNum From ORDR Where DocEntry= @list_of_cols_val_tab_del)
		SET	@Pago_SN = (Select GroupNum From OCRD Where CardCode=@CardCode)
		SET	@UserId = (select UserSign2 From ADOC Where Docentry = @list_of_cols_val_tab_del AND ObjType = @object_type 
													AND LogInstanc = (SELECT TOP 1 LogInstanc-1 FROM ADOC WITH(NOLOCK) WHERE DocEntry=@list_of_cols_val_tab_del AND ObjType=@object_type ORDER BY LogInstanc DESC))

	IF (@UserId = 4) AND @Pago_OV != @Pago_SN
	BEGIN
		SELECT @error = -600, @error_message= 'No se Permite Cambiar la Condicion de Pago'
	END
END

Saludos

former_member203638
Active Contributor
0 Kudos

Mauricio, exactamente como lo pusiste lo inserte en el sql, no me funciono o_O?

Floyola, meti el que pusiste y tampoco

Creo que No esta jalando lo del usersign por que si se lo quito si funciona, pero la valicacion del usuario es lo importante

Quitado el usersign si bloquea:

<a href="http://www.charlie-colop.com.mx/condicion.jpg">http://www.charlie-colop.com.mx/condicion.jpg</a>


If @Object_Type = '17' AND @transaction_type = 'U'
BEGIN
	DECLARE 
			@CardCode varchar(12),
			@Pago_OV SMALLINT,
			@Pago_SN SMALLINT
			
			 
		SET	@CardCode = (Select CardCode From ORDR Where DocEntry=@list_of_cols_val_tab_del)
		SET	@Pago_OV = (Select GroupNum From ORDR Where DocEntry= @list_of_cols_val_tab_del)
		SET	@Pago_SN = (Select GroupNum From OCRD Where CardCode=@CardCode)
		 
	IF @Pago_OV != @Pago_SN
	BEGIN
		SELECT @error = -600, @error_message= 'No se Permite Cambiar la Condicion de Pago'
	END
END


Saludos

Alessandro

felipe_loyolarodriguez
Active Contributor
0 Kudos

Alessandro ese codigo me funciono aqui en la base DEMO

No entiendo porque no te esta funcionando...estas seguro que los usuarios son los correctos a los INTERNAL_K que estas bloquenado

En mi ejemplo use al Usuario de Ventas "4" y efectivamente me bloqueo con solo colocar la condicion

IF (@UserId = 4) me bloqueo automaticamente el usuario para modificar

Atte.

Felipe Loyola

former_member188440
Active Contributor
0 Kudos

Pues si es algo del diablo porq a mi me funciona asi para cualquier documento, si quieres lo revisamos remotamente con teamviewer


If @transaction_type in ('A','U') and @object_type in ('17')
begin
declare @user as int
declare @cp1 as int
declare @cp2 as int
set @user =(select UserSign2 from ORDR where docentry =@list_of_cols_val_tab_del)
--en version 88 es usersign2, en 2007 seria usersign de la ADOC (tu comentaste que tienes 88)
 
set @cp1=(select groupnum from ORDR where docentry=@list_of_cols_val_tab_del)
set @cp2= (select GroupNum from ADOC where objtype = '17' and docentry=@list_of_cols_val_tab_del
 and LogInstanc in (select MAX(LogInstanc-1)from ADOC where objtype = '17' AND DocEntry =@list_of_cols_val_tab_del) ) 
if  (@user = 50) and @cp1 != @cp2
 
begin
select @error = 1234
select @error_message='No se Permite Cambiar la Condicion de Pago'
End
End

former_member203638
Active Contributor
0 Kudos

Mauricio si es 8.8 y si !! es cosa del demonio, ahora ya esta bloqueando, pero a todos los usuarios, =P

Una pregunta, el @UserId viene siendo la el usersign2 de la OUSR ?

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

Noo, los usuarios de tu tabla OUSR deben servirte unicamente de referencia , es decir si quieres bloquear a manager, su internal_K es el 1, asi que el @user seria 1

El usersign2 es el usuario que ACTUALIZA, el usersign es el que creo el documento

former_member203638
Active Contributor
0 Kudos

Ok, sigo en pruebas.

Saludos

Alessandro.

former_member203638
Active Contributor
0 Kudos

Si yo busco en la Tabla OUSR el usersign2 y lo coloco en la parte de if (@user = 63) ya me bloquea o_O

Saludos

Alessandro.

former_member188440
Active Contributor
0 Kudos

Pero estas trayendo el usersign2 de la OUSR, osea el usuario que actualiza la tabla de usuarios!

Tu necesitas validar el usuario que esta actualizando el documento de marketing

former_member203638
Active Contributor
0 Kudos

Ya quedo Mauricio/Floyola.

Muchas Gracias.

Saludos

Alessandro.

Answers (0)