cancel
Showing results for 
Search instead for 
Did you mean: 

Store Procedure/ Autorizacion en Ordenes de Venta

former_member203638
Active Contributor
0 Kudos

Hola a todos, me han pedido que los renglones que se borren en las ordenes de venta, se bloqueen esos documentos o que sap no permita al usuario actualizar.

Escenario:

Tengo 3 renglones de producto, si el usuario elimina un cualquier renglon, al momento de actualizar no se permita, en conclusion, renglones capturados no deben quitarse.

Existe alguna opcion a travez de SP o alguna de etapa de autorizacion?

Muchas Gracias.

Alessandro.

Accepted Solutions (1)

Accepted Solutions (1)

former_member188440
Active Contributor
0 Kudos

Puedes meterlo en el TransactionNotification

colocando

if object_type in (17) and transaction _type in ('U')

begin

set @error=1

set @error_message= 'No puede modificar pedidos'

end

esto debajo de la leyenda "ADD YOUR CODE HERE"

former_member203638
Active Contributor
0 Kudos

Muchas gracias mauricio, más en especifico se le puede agregar al Transaction grupo de articulos para que valide que grupo de articulos ejecuta el SP y cuales no?

Gracias y Saludos.

former_member188440
Active Contributor
0 Kudos

Si claro que se puede , solo necesitas hacer tantos subquerys requieras para esto.

Cual seria el escenario?

former_member203638
Active Contributor
0 Kudos

Escenario, Un usuario en especifico NO DEBE quitar los renglones que ya halla capturado en una orden de venta.

Tengo varios Grupos de articulos el usuario solo puede quitar articulos de algunos.

Por un decir,

Grupo de articulos:

1.-carpetas -Si Puede Quitar renglones

2.-hojas No puede Quitar Renglones Pero Si puede agregar Mas Renglones

3.- calculadoras- No puede Quitar renglones PeroSI puede agregar mas Renglones

Espero Haberme explicado, esto es solo para un usuario en especifico.

Muchas Gracias.

former_member188440
Active Contributor
0 Kudos

Me parece que para tener un mejor control, es neceasrio establecer por politica esta logica de negocio, no croe que por validacion se pueda controlar este comportamiento en el sistema.

Sin embargo por medio del Transaction, SI podrias controlar que usuario puede, luego de haber borrado o aumentado lineas, actualizar efectivamente el documento

Te recomiendo que por medio de una tabla de usuario controles los grupos de articulos y su respectivo usuario asignado, esto con el fin de que por medio del stored , valides si el usuario que actualiza, tiene asignados los grupos de articulos que esta trabajando en el documento.

former_member203638
Active Contributor
0 Kudos

Me queda clara tu explicacion Mauricio, Podras guiarme para lograr este objetivo, apenas hoy me estoy introduciendo en el tema del SP.

Gracias y Saludos.

former_member188440
Active Contributor
0 Kudos

Pasame tu correo y te mando un documento del TransactionNotification

former_member203638
Active Contributor
0 Kudos

Gracias Mauricio, ya te envie un correo.

Gracias!

former_member188440
Active Contributor
0 Kudos

Ya te mande el correo

former_member203638
Active Contributor
0 Kudos

Gracias Mauricio, ya tenia ese documento, peor aun no me aclara como empesar.

Gracias y Saludos.

former_member188440
Active Contributor
0 Kudos

Necesitas el query en si? el codigo completo para hacer las validaciones?

former_member203638
Active Contributor
0 Kudos

Si no es mucha molestia.

former_member203638
Active Contributor
0 Kudos

Tengo el siguiente sp pero no me esta funcionando, para que valide a un usuario en especifico, al quitar renglones en las ordenes de venta que pertenezcan a un grupo de articulos en especifico.

if  @Object_Type in (17) and @transaction_type in ('D')
begin
declare @user  int
select @user=usersign2 from ordr WHERE DocEntry = @list_of_cols_val_tab_del
if @user in (50)
begin
set @error=1
set @error_message= 'No tiene Autorizacion'
end

if exists (SELECT T2.ItmsGrpCod FROM ORDR T0  INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE T0.Docentry =@list_of_cols_val_tab_del
and (T2.ItmsGrpCod =1054 or  T2.ItmsGrpCod =1055))
BEGIN
SELECT @Error = 3, @error_message = 'No tiene autorizacion'
END
END

En el manual del transaction menciona el parametro "D" es cuando un renglon se elimina, esto es correcto?.Por eso pongo @transaction_type in ('D'),

Alguna ayudita?

Gracias.

Edited by: Alessandro Santinelli on Oct 12, 2010 9:52 PM

Edited by: Alessandro Santinelli on Oct 12, 2010 9:53 PM

former_member188440
Active Contributor
0 Kudos

El parametro 'D' es cuando eliminas TODO el documento , no para una linea en particular

former_member203638
Active Contributor
0 Kudos

Y para mi escenario que opcion tengo?

former_member188440
Active Contributor
0 Kudos

Como te comentaba, no creo que sea posible hacerlo asi, quizas por SDK si puedas hacer algo al respecto, pero lo veo poco practico.

Me parece que la logica que sigues es correcta pero necesitas utilizar el parametro 'U' que es para el Update. Veo correcto tambien lo del usuario.

Tal vez podrias trabajar en una validacion en la cual mediante el docentry, cuentes cuantos renglones existen y al momento de actualizar no te lo permita. Tu tienes ya en existencia en la base el pedido, este ya genero un docentry en la tabla ORDR, entonces necesitarias comparar los renglones de la tabla RDR1 contra lo que traes en tus renglones de @list_of_cols-........

Tal vez algo asi te pueda ayudar a validar la cantidad de renglones, ademas de la validacion de los grupos de articulos etc.

former_member203638
Active Contributor
0 Kudos

Gracias por tu orientacion Mauricio,ya me trabe, pretendia sumar los renglones y luego compararlo contando los numeros de renglones en total del docentry.

if  @Object_Type in (17) and @transaction_type in ('U')
begin
declare @line int
declare @suma int
select @line= (LineNum+1) From RDR1 Where RDR1.Docentry = @list_of_cols_val_tab_del and (@line<@suma=(count(docentry))
if (not is null(@line,0)=0)
BEGIN
Select @error=1, @error_message= 'test'
END
END 

Gracias.

former_member188440
Active Contributor
0 Kudos

Intenta almacenar en una variable como @line el resultado de select count (linenum) from rdr1 where docentry=@list_of-.........

esto lo comparas contra el resultado de set @suma =(select count (linenum) from .....--aqui es donde debes basarte en tu tabla de historial, donde ya tienes existente el documento)

Answers (0)