cancel
Showing results for 
Search instead for 
Did you mean: 

Validación centros de beneficio por usuario

0 Kudos

Estimados

necesito restringir las imputaciones a los centros de beneficio por usuario, para algunos usuario no debe permitir imputar los CB y emitir un mensaje No autorizado. Trate de hacerlo creando un campo de usuario en la tabla de usuario, y enlazando una busqueda formateada pero no logro los resultado que espero. Como lo podria hacer con Transaction Notification?.

Por favor solicito si alguien me enviara un manual de TN.

gracias, Saludos

Marianet

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas tardes

Tienes algun correo para enviarte el manual.

Saludos

FLR

0 Kudos

Estimada

Floyola, favor enviar el manual al sgte. correo:

neiramarianet arroba hotmail .com

Saludos y Muchasss gracias.

Marianet

0 Kudos

Estimado Felipe

gracias por el manual y el ejemplo, otra consulta como conecto el SP en sap BO en el campo al cual estoy generando el SP

saludos y muchas gracias

Marianet

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenos dias

Prueba con esta validacion en las facturas de proveedores


IF  (@object_type = 18)  and (@transaction_type= 'A' or @transaction_type = 'U')
BEGIN

	DECLARE @USER as Nvarchar (25)
	SET @USER = (SELECT T0.userSign 
				FROM OPCH T0 
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)

	DECLARE @CB as NVarchar (25)
	SET @CB = (SELECT COUNT(T1.OcrCode) 
				FROM OPCH T0
				INNER JOIN PCH1 T1 ON T1.DocEntry = T0.DocEntry
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)
	IF (@USER IN (cod,cod,cod,cod)) AND (@CB > '0')
		BEGIN
			SET @error = 101
			SET @error_message = 'No tiene autorizacion para trabajar con centros de beneficio'
		END
END

Saludos

FLR

0 Kudos

Felipe

hice los cambio en los parametros (usuario), y funciono perfecto, gracias por tu valiosa ayuda

saludos

Marianet

felipe_loyolarodriguez
Active Contributor
0 Kudos

Como acotacion, si quieres que el usuario no haga ningun documento con centro de beneficio, copias el porcedimiento y cambias el ObjType y las tablas por las del documento

Ejemplo

Entrada de mercaderias OP

Objtype = 20

tabla = OPDN

tabla2 = PDN1

Saludos

FLR

0 Kudos

Estimado felipe

Lo probare, muchas gracias por tu ayuda, otros favorcito, tienes informacacion de la version 8.8.1, he buscado en la red pero no hay mucho.

saludos

marianet

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenos dias

Desafortunadamente todavia no migramos de SAP 2007 a 8.8, asi que documentacion es poca la que poseo.

Sin embargo, puedes seguir este link [http://saptogo.blogspot.com] que es el de un consultor SAP.

Vere que puedo encontrar en internet y te lo envio por mail

Saludos

0 Kudos

Felipe

efectivamente la version 8.8.1 esta en pruebas, hay poca información, con los SP me ha ido bastante bien, he modificado algunos pero en la transaccion por ejemplo ingreso de facturas de compras no reconoce los cambio, debere eliminar el antiguo sp de alguna parte?

una vez mas , gracias por tu ayuda.

saludos

Marianet

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Si entiendo bien, modificas un SP y el SAP no te reconoce los cambios? estas segura que los cambios quedan guardados en el SBO_SP_TransactionNotification?

si quieres dejar sin efecto un SP, solo colocalo entre /* */

ejemplo


/*IF  (@object_type = 17)  and (@transaction_type= 'A' or @transaction_type = 'U')
BEGIN

  DECLARE @SN as Nvarchar (25)
  SELECT @SN = T0.CardCode FROM ORDR T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del
  IF @SN = '96936470-0'
     BEGIN
       SET @error = 102
       SET @error_message = 'SN incorrecto'
     END
END*/

Asi dejas sin efecto el SP

Saludos

0 Kudos

Felipe

no se que estare haciendo mal pero tengo el sgte error al ejecutar desde sql, estoy generando al restriccion de CB en la orden de compra cambie las tablas

a OPDN y PDN1,

el proceso que hice fue el siguiente

En sql click derecho sobre SBO_SP_TransactionNNotification- Incluir procedimiento de almacenado como y selecciono CREATE

me trae por defecto el primer SP que esta echo para factura de proveedores y sobre este modifico. No se si estara correcto.

gracias por tu ayuda

Mens 2714, Nivel 16, Estado 3, Procedimiento SBO_SP_TransactionNotification, Línea 48

Ya hay un objeto con el nombre 'SBO_SP_TransactionNotification' en la base de datos.

es SQL 2005

saludos

Marianet

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas,

El procedimiento esta correcto, pero las tablas de Orden de compra son OPOR y POR1, tambien debes cambiar el Object_type

Las tablas OPDN y PDN1 son de las Entradas de Mercaderias OP, mas arrina te las puse como ejemplo junto con el objtype

Para saber el tipo de objeto de cada documento debes hacer la siguiente query


SELECT DISTINCT objtype
FROM TABLA

Si le das OPCH te arrojara 18, si le das OINV te arrojara 13 y asi con las demas

Entonces si quieres hacer el SP para las ordenes de compra, debes saber cual es el objtype de la O/C.

Luego en la validacion, aparte de cambiar las tablas, debes cambiar el Object_type

Donde dice


IF  (@object_type = 18) -- (18 = Factura de Proveedores)

Debe decir


IF  (@object_type = 22) -- (22 = Orden de Compra)

Saludos

FLR

PD: Si no te funciona, enviame un pantallazo

Edited by: Floyola on Jan 25, 2011 5:08 PM

Edited by: Floyola on Jan 25, 2011 5:11 PM

0 Kudos

Felipe

favor corrigene si estoy en un error se debe cambiar el nombre al crear un nuevo SP en CREATE PROC, te adjunto el sp de ordenes de compras para que lo observes y veas si cometi algun error

Hice ordenes de compra pero no esta considerando el sp, graba sin enviar el mensaje. en la factura proveedor funciona correctamente, ¿al grabar un SP cambia automaticamente de CREATE A ALTER?

MUCHAS GRACIAS POR TU AYUDA

MARIANET

USE

GO

/****** Objeto: StoredProcedure .[SBO_SP_TransactionNotification] Fecha de la secuencia de comandos: 01/26/2011 13:14:31 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER proc .[orden1]

@object_type nvarchar(20), -- SBO Object Type

@transaction_type nchar(1), -- dd, pdate, elete, ancel, C[L]ose

@num_of_cols_in_key int,

@list_of_key_cols_tab_del nvarchar(255),

@list_of_cols_val_tab_del nvarchar(255)

AS

begin

-- Return values

declare @error int -- Result (0 for no error)

declare @error_message nvarchar (200) -- Error string to be displayed

select @error = 0

select @error_message = N'Ok'

-- ADD YOUR CODE HERE

IF (@object_type = 22) and (@transaction_type= 'A' or @transaction_type = 'U')

BEGIN

DECLARE @USER as Nvarchar (25)

SET @USER = (SELECT T0.userSign

FROM OPOR T0

WHERE T0.DocEntry = @list_of_cols_val_tab_del)

DECLARE @CB as NVarchar (25)

SET @CB = (SELECT COUNT(T1.OcrCode)

FROM OPOR T0

INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry

WHERE T0.DocEntry = @list_of_cols_val_tab_del)

IF (@USER IN (1)) AND (@CB > '0')

BEGIN

SET @error = 101

SET @error_message = 'No tiene autorizacion para trabajar con centros de beneficio'

END

END

-

-


-- Select the return values

select @error, @error_message

end

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas

Deberia estar de esta manera, pruebalo antes


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[SBO_SP_TransactionNotification]

@object_type nvarchar(20), -- SBO Object Type
@transaction_type nchar(1), -- [A]dd, pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255)

AS

begin

-- Return values
declare @error int -- Result (0 for no error)
declare @error_message nvarchar (200) -- Error string to be displayed
select @error = 0
select @error_message = N'Ok'

-----------------------------------------------------------------------------
-- ADD YOUR CODE HERE
-- VALIDACION CENTRO BENEFICIO POR USUARIO EN ORDENES DE COMPRA

IF  (@object_type = 22)  and (@transaction_type= 'A' or @transaction_type = 'U')
BEGIN

	DECLARE @USER as Nvarchar (25)
	SET @USER = (SELECT T0.userSign 
				FROM OPOR T0 
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)

	DECLARE @CB as NVarchar (25)
	SET @CB = (SELECT COUNT(T1.OcrCode) 
				FROM OPOR T0
				INNER JOIN POR1 T1 ON T1.DocEntry = T0.DocEntry
				WHERE T0.DocEntry = @list_of_cols_val_tab_del)

	IF (@USER IN (1)) AND (@CB > '0')
		BEGIN
			SET @error = 101
			SET @error_message = 'No tiene autorizacion para trabajar con centros de beneficio'
		END
END
-----------------------------------------------------------------------------

-- Select the return values
select @error, @error_message

end

Saludos

FLR

Edited by: Floyola on Jan 26, 2011 5:17 PM

Answers (0)