cancel
Showing results for 
Search instead for 
Did you mean: 

Bloqueo de Campos SBO_SP_TransactionNotification

former_member204202
Active Participant
0 Kudos

Hola, necesito ayuda con el SBO_SP_TransactionNotification lo que necesito es que los usuarios ya no puedan modificar el empleado de ventas después de que hayan creado la factura, para esto cree esta consulta que cumple con lo que necesito pero a la vez me bloquea la actualización de otros campos, en resumen me bloquea la modificación de todos los campos y no solo del SlpCode. Espero me puedan ayudar!!!

Accepted Solutions (1)

Accepted Solutions (1)

former_member203638
Active Contributor
0 Kudos

Hola David, Intenta este:

IF @object_type = '13' AND @transaction_type = 'U'

Begin

Declare @Log Varchar(20)

Declare @Vendedor Varchar(20)

         

SET @Log = (SELECT T0.SlpCode FROM ADOC T0 WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND

           T0.LogInstanc = (SELECT TOP 1 Y.LogInstanc FROM ADOC Y WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type

                            ORDER BY Y.LogInstanc DESC))

                                                 

SET @Vendedor = (SELECT T0.Slpcode FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)

    

    

     IF @Vendedor != @Log

     BEGIN

          Set @error = -00231

          Set @error_message = 'No tiene permiso de actualizar'

     END

END

Temas de Referencia:

Saludos.

Alessandro.

former_member204202
Active Participant
0 Kudos

Hola Alessandro pues no me queda mas que darte las gracias es justamente lo que necesitaba la verdad no sabia el contenido de la tabla ADOC y no se me ocurría como comparar los datos antiguos y los actualizados. Gracias

Aprovechando tal vez alguien tenga por ahí una tipo guía del SBO_SP_PostTransactionNotification que me puedan facilitar.

Saludos.

former_member204202
Active Participant
0 Kudos

Hola me puedes ayudar en algo mas por favor, siempre con respecto al SBO_SP_TransactionNotification.en las facturas de clientes, tengo dos Campos de Usuario uno es "Medio de Pago"  y el otro es "Banco". En "Medio de Pago existen las opciones (efectivo, Tarjeta Crédito, Cheque, etc.) en "Banco" esta libre puedes digitar el nombre al cual pertenece el cheque.

Lo que necesito es: Cuando "Medio de Pago" sea = a Cheque, pida que llenen el campo "Banco" me refiero a que digiten el nombre del banco y si no lo llenan que no deje crear la factura.

Por favor ayúdame, la verdad no se me viene a la mente como hacerlo, tal vez puedas guiarme.

former_member203638
Active Contributor
0 Kudos

Hola David, Intenta este:

IF (@object_type='13' AND @transaction_type = 'A') --Factura de Cliente

Begin

Declare @MetodoPago as nvarchar (10)

Declare @banco as nvarchar (10)

Set @MetodoPago = (SELECT T0.U_MetododePago FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)

Set @banco = (select T0.U_Banco FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)

IF (@MetodoPago = 'cheque' and @banco is null)

Begin

Select @Error = 1

Select @error_message = 'Ingresa el Banco '

End

End

Saludos.

Alessandro.

former_member204202
Active Participant
0 Kudos

Hola de nuevo gracias Alessandro y disculpa las molestias. Tus consultas me han quedado exactas ya con estos ejemplos sigo con el SBO_SP_TransactionNotification, gracias.

Former Member
0 Kudos

Hello Alesandro, he revisado todos los comentarios y me han servido de mucho; existe alguna forma de bloquear completamente el campo vendedor una vez creada la Oferta de Venta; de esa forma evitamos que en las Orden de Venta, Entregas, facturas pueda ser modificado.

former_member203638
Active Contributor
0 Kudos

Hola, se podria pero tendrias que adecuar el TN, por que este escenario esta basado en cambiar el vendedor en la factura (objtype=13).

Saludos.

Alessandro.

Answers (3)

Answers (3)

Former Member
0 Kudos

Buenos días

Soy nueva con los Transactions, espero que me puedan ayudar.

Tengo un caso similar a este. Necesito bloquear la actualización de los pedidos de cliente a excepción de un campo en especial, ya que este se puede editar las veces que sea necesario.

Esto es lo que tengo:

IF @object_type='17' and (@transaction_type='U')

begin

IF (SELECT COUNT (*)

   FROM  ORDR T0  INNER JOIN OUSR T1 ON T0.UserSign = T1.USERID

   WHERE (U_ARMAZON IS NULL )

   AND T0.DocEntry = @list_of_cols_val_tab_del ) >0

   BEGIN

     if (select usersign2 from ORDR where DocEntry=@list_of_cols_val_tab_del) in (1)

   begin

set @error=12

set @error_message='No se Puede Realizar el Cambio'

END

END

END

Mi idea es que el usuario pueda crear su pedido de cliente y dejar en blanco el campo U_ARMAZON, pero después puede tener la opción de actualizarlo, pero solo debe poder actualizar este campo.

Pero con lo que tengo no me funciona.

Muchas gracias por el apoyo que me puedan brindar

Former Member
0 Kudos

David,

Haga SBO_SP_TransactionNotification y bloquear cualquier cambio en "Empl.dpto.Ventas" cuando diferentes fuentes de documento de marketing.

o

Compare el SlpCode documento del documento de marketing con el Business Partner

Ejemplo:

IF @object_type = '17' and (@transaction_type='U')

BEGIN

               Declare @vendedor Int

               Set @vendedor = (Select T0.SlpCode From ORDR T0 Where T0.SlpCode <> -1 and           T0.DocEntry = @list_of_cols_val_tab_del)

          If @vendedor > -1

          Begin

                    Set @error = 1000

                    Set @error_message = 'No es permitido cambiar vendedor'

          End

END

Saludos,

Marcelo Silva Santos

former_member204202
Active Participant
0 Kudos

Hola gracias por tu aporte, probé tu consulta y pues si bloqueaba el campo del vendedor después de su creación pero también lo hacia con los demás, al final es bueno que no se puedan modificar los campos de la factura después de crearla pero no era mi idea. gracias! 

Former Member
0 Kudos

Hola como están? tengo un problema , resulta que necesito bloquear las facturas si estas no tienen su pedido previo, alguien tiene una pista de como lograrlo? he tenido algunas pero no me resulta, o bloqueo completa la factura o se queda abierta.

if @object_type  = 13 and @transaction_type in ('A')

begin

     declare @val as int

     select @val = T0.docentry from INV1 T0 inner join OINV T1 on T1.docentry = T0.docentry where T1.usersign !=1 and T1.userSign2 != 1

     and T1.docentry = @list_of_cols_val_tab_del

end

if @val is not null

     begin @error etc etc.

    

para ver si alguien me pudiera orientar, saludos

angeles804
Active Contributor
0 Kudos

te mande un ejemplo !

Former Member
0 Kudos

Si entiendo bien , lo que tu deseas es que cada vez que se actualice una factura no te permita actualizar el vendedor. De la manera como lo estas haciendo no es posible ya que todo dato que rescates por el transaction son con los datos actualizados, y pierdes el dato que estaba originalmente y no tienes como hacer la comparación.

La manera que se me ocurre de hacer esto puede ser de 2 maneras:

1. Como en el transaction sobre la tabla oinv solo puedo recatar el valor nuevo, solo me faltaría rescatar el valor antiguo que se puede hacer de la tabla del log de modificaciones, y luego puedo hacer la comparación.

2. Otra manera que es la que mas me gusta, es crear una tabla que tenga 2 campos Docentry y SlpCode, donde se guardara Docentry de factura y código de vendedor, donde la idea es que cada vez que se cree una factura grabar en esta tabla el docentry de la factura y el código de vendedor de la factura, esta tarea se puede realizar mediante SBO_SP_PostTransactionNotice. En tonces cada vez que se quiera actualizar una factura tendremos el valor nuevo y el valor antiguo.

A i me gusta mucho mas la opción de 2 asi  no dependo del log de modificaciones, ya que en mi experiencia no siempre he tenido resultados satisfactorios con el log de modificaciones

former_member204202
Active Participant
0 Kudos

Hola gracias por tu respuesta, con tu primera opción me di cuenta que necesitaba el valor antiguo  para compararlo con el actualizado y pues con la consulta que publico Alessandro me quedo mas que claro, la segunda opción que me diste me llama la atención ya que nunca eh usado el SBO_SP_PostTransactionNotice y no entiendo si te refieres a usar una tabla #temp o crear una como tal que al final seria lo mismo que compararla con la ADOC, pero seria bueno que dieras una idea para hacer pruebas en mi  base test.