cancel
Showing results for 
Search instead for 
Did you mean: 

Bloquear campo en documentos de marketing

former_member228470
Participant
0 Kudos

Hola  a todos

Estoy realizando un bloqueo para que los vendedores o cualquier otra persona no pueda modificar la descripcion de un articulo en los documentos de marketing.  Tengo el codigo, pero cuando hago la prueba haciendo una orden de venta y cambio la descripcion me manda el error;  sin embargo, cuando coloco la descripcion correcta igual me manda el error  y no deberia.  Si me pueden ayudar para ver que me hace falta en el codigo se los agradeceria

If

@Object_Type = '17' and @transaction_type in ('A','U') and

(select top 1 'true' from RDR1 t0, OITM t1 where t0.Dscription <> t1.ItemName) = 'true'

begin


Set @error = -1

Set @error_message = 'Descripcion de la referencia no puede ser modificada'

end

Accepted Solutions (0)

Answers (3)

Answers (3)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Prueba este Transaction

IF @object_type=17 AND @transaction_type IN ('A','U')

BEGIN

          DECLARE

                    @Item NVARCHAR(20)

 

          SET @Item = (

                                        SELECT TOP 1 T1.ItemCode

                                        FROM ORDR T0

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

                                        WHERE T0.DocEntry = @list_of_cols_val_tab_del AND ISNULL(T1.Dscription,'') <> (SELECT Y.ItemName FROM OITM Y WHERE Y.ItemCode=T1.ItemCode) AND T0.DocType='I'

                                        )

          IF @Item IS NOT NULL

          BEGIN

                    SELECT @error=777, @error_message='No puede cambiar la descripcion del articulo '+@Item

          END

END

Saludos

former_member228470
Participant
0 Kudos

Hola Felipe, probe tu codigo y me funciona bien.  Solo me toca agregarle para que solo permita que un usuario pueda cambiarlo...Voy a hacerlo y colocare el codigo final.  Gracias

former_member228470
Participant
0 Kudos

Al final queda asi


IF

@object_type=17 AND @transaction_type IN ('A','U')


BEGIN


DECLARE @Item NVARCHAR(20)

   

SET @Item = (

SELECT TOP 1 T1.ItemCode


                

FROM ORDR T0


                

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


                

WHERE T0.DocEntry = @list_of_cols_val_tab_del AND


                      

ISNULL(T1.Dscription,'') <> (SELECT Y.ItemName FROM OITM Y WHERE Y.ItemCode=T1.ItemCode)


                      

AND T0.DocType='I' AND T0.UserSign NOT IN('1')


               

)


    

IF @Item IS NOT NULL


    

BEGIN


        

SELECT @error=777, @error_message='No puede cambiar la descripcion del articulo '+@Item


    

END


END

marco_ramirez
Active Contributor
0 Kudos

Sara

Intenta con la opción parametrizaciónes de formulario -- Formato de tabla -- Campo

Tienes dos opciones: Visible y activo

Quita el chequesito de activo sobre el campo que deseas no se modifique y listo.

El procedimiento es:

Abrir el formulario en el que deses restringir el campo

Del lado derecho en la parte superior de la pantalla encuentras la opción de parametrizaciones de formulario

El botón es el de fondo amarillo

Seleccionas formato de tabla

y en el campo deseado desactivas.

Espero sea lo que necesitas

Saludos

Former Member
0 Kudos

Lo que dice marco te debiera funcionar pero para esto tienes que quitarle los permisos a los usuarios para que entren a las parametrizaciones de formulario, esto tiene lados negativos y positivos , ya que hay que hacerlo por usuario, y el usuario en el futuro no podrá agregar campos, tendría que hacerlo un usuario con permisos

Former Member
0 Kudos

La validacion en el transaction debiera ser algo como lo siguiente:


If



@Object_Type

= '17' and @transaction_type in ('A','U')





begin



declare

@cantidad as int


set

@cantidad =(select *


from

ORDR t0


inner

join RDR1 t1 on t0.DocEntry=t1.DocEntry


and

t0.docentry= @list_of_cols_val_tab_del


inner

join OITM t2 on t1.ItemCode=t2.ItemCode and t1.Dscription <> t2.ItemName


)



if

@cantidad > 0


begin


Set

@error = -1





Set

@error_message = 'Descripcion de la referencia no puede ser modificada'


end




end

former_member228470
Participant
0 Kudos

Hola Fernando, gracias por tu pronta  respuesta, pero tengo una duda.  Que controlas con la variable @cantidad

Former Member
0 Kudos

Es solo para decir cuantas lineas de tu orden de venta no cumplen con la validacion y si este valor es mayor o igual a 1 tiene que dar error

former_member228470
Participant
0 Kudos

Probe el codigo pero me manda este error

Msg 116, Level 16, State 1, Procedure SBO_SP_TransactionNotification, Line 630


Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.