on 10-11-2010 6:10 PM
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.
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"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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.
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
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.
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.
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)
User | Count |
---|---|
98 | |
11 | |
11 | |
6 | |
3 | |
3 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.