cancel
Showing results for 
Search instead for 
Did you mean: 

Alerta Documento preliminar

former_member228470
Participant
0 Kudos

Hola a todos

Tengo el siguiente caso, del cual necesito crear un proceso

Los vendedores no pueden crear una orden de venta por debajo del precio permitido.  Solo dos usuarios estan autorizados para hacerlo, previa revision.

1- Para esto cree un bloqueo en el transaction notification y que el mensaje les diga que deben guardar el documento como preliminar. 

If @Object_Type = '17' and @transaction_type in ('A')

Begin

If  (Select top 1 'True'  From ORDR T0,RDR1 T1 INNER JOIN OITW T2 ON T2.ItemCode=T1.ItemCode AND T1.WhsCode=T2.WhsCode

Where T0.DocEntry=@list_of_cols_val_tab_del and t0.UserSign not in ('5','7') and T1.DocEntry=@list_of_cols_val_tab_del

and DocType='I' and T1.TreeType !='I' AND T1.Price <((T2.AvgPrice*0.11)+T2.AvgPrice)

)='True'

Begin

Set @error='-1'

Set @error_message='Artculo esta por debajo del Precio Permitido, Linea '+(

Select top 1 Convert(Varchar,(LineNum+1))+' '+'Referencia: '+T1.ItemCode From ORDR T0,RDR1 T1

INNER JOIN OITW T2 ON T2.ItemCode=T1.ItemCode AND T1.WhsCode=T2.WhsCode

Where T0.DocEntry=@list_of_cols_val_tab_del and t0.UserSign not in ('5','7')  and T1.DocEntry=@list_of_cols_val_tab_del

and DocType='I'  and T1.TreeType !='I' AND T1.Price <((T2.AvgPrice*0.11)+T2.AvgPrice) + ' '+'GRABAR COMO PRELIMINAR')

End

End

2- De ahi cree una alerta para que cada vez qeu se cree un documento preliminar de orden de venta, le llegue al usuario qeu autoriza

Select T0.DocNum, T0.CardName, T0.DocDate, T0.DocTotal, t1.SlpName

From ODRF T0  inner join OSLP t1 on T0.SlpCode = t1.SlpCode

Where T0.DocStatus = 'O'

3- El usuario revisa la orden y la crea, automaticamente imprime la lista de picking

4- Debe llegarle un mensaje al vendedor que ya su orden de venta se creó (ESTA ES LA PARTE QUE ME FALTA DESARROLLAR)

Saludos y gracias

Accepted Solutions (0)

Answers (5)

Answers (5)

Former Member
0 Kudos

Había perdido el historial de esta consulta, y tal vez demasiado tarde, pero les coloco la solución que yo utilicé.

Como comenté anteriormente, iba a ser en dos pasos

1.- Validación con un formated search a nivel de línea

2.- validación a nivel global mediante una sumatoria.

Anexo el código que usé para validar el documento

el campo de usuario a nivel línea que uticé fué: U_BXP_LABEL11 y el formulario donde apliqué el procedimiento de autorización fué la orden de venta.

El problema que comentaba Sara se soluciona haciendo un cast recursivo para convertir todo a número.

SELECT 'TRUE' HAVING sum(cast(cast($[$38.U_BXP_LABEL11.0] as varchar(50)) as float))>=1

former_member228470
Participant
0 Kudos

Hola David, ya pude arreglar lo de la busqueda formateada y me funciona, a nivel de detalle me coloca 1 y 0 dependiendo si se cumple o no la consulta.

Ahora cree mi modelo de autorizacion pero no me la ejecuta, me dejo crear el documento a pesar que no se cumple.  Este es el codigo

Select Case When (Select sum(t0.u_precest) From INV1 T0  ) >= 1   Then 'TRUE' Else 'FALSE' End

Former Member
0 Kudos

Revisando el código de tu stored y tu último comentario de que sap sólo valida a la primera línea de detalle del documento, me entró la duda de si la forma en la que generaste la consulta original 'la que trataste hacer proceso de autorización' tiene todo el detalle necesario.

hasta donde yo conozco, las líneas se pueden validar 1 a 1 o todas a la vez, para lo cual yo sugeriría lo siguiente:

Crear un campo de usuario de tipo número  a nivel detalle de tu documento (con valor default  de 0).

Con una búsqueda formateada, retornar el resultado de tu consulta a ese campo cuando el usuario esté capturando el precio ya fuera '0' que podría ser que pasa y '1' cuando la condición de tu búsqueda se cumpla.

Luego, para crear la alerta, declararía una sumatoria de ese campo de usuario en una subconsulta y lo compararía, si el dato es mayor a 1, entonces se dispararía el proceso de autorización.

Esta para mi sería una forma de hacerlo, de forma que el código de tu autorización no sería tan grande, pero requuiere la preparación de los datos (los 0 y los 1's a nivel de detalle)

Coméntame qué te parece la idea y la llevamos a cabo, yo te apoyo en la generación de la consulta del proceso de autorización y el de al búsqueda formateada.

former_member228470
Participant
0 Kudos

Hola David

Disculpa que no haya contestado antes.  Si me parece buena idea lo que me planteas.  Incluso ya cree el campo de usuario a nivel de detalle, e hice mi  busqueda formulada pero me manda un error.  Te lo escribo para ver si me das luces.

SELECT CASE  WHEN $[$38.14.0] <

(select ((T2.AvgPrice*0.11)+T2.AvgPrice)  from OITW t2 where t2.ItemCode=$[$38.1.0] and T2.WhsCode = '01') THEN  1 end

FROM RDR1 T1

"Error al convertir el tipo de datos nvarchar a numeric"

De todas formas yo sigo indagando para ver si encuentro el error.

Saludos,

Sara

Former Member
0 Kudos

Hola Sara y ya probaste hacer por medio del procedimiento de autorizacion que tiene SAP creo que te seria mas facil,

1. Porque evitas utilizar el Transaction Notification.

2. Los documentos que se crean y estan configurados para pedir autorizacion y se envian un mensaje interno en SAP al usuario que se desea que autorice y los documentos son creados en forma preliminar.

3. Cuando el usuario autoriza hasta este momento se puede crear el documento.

4. Ya con esto creo que podrias utilizar el query que tiene en tu paso 2 para crear una alerta por medio de usuario.

Si necesitas ayuda con gusto te puedo ayudar para configurar el procedimiento de autorizacion.

Saludos

former_member228470
Participant
0 Kudos

Hola Carlos, gracias por tu seguimiento.

Al principio pense en el procedimiento de autorización, pero no sé si de repente cree mal la
consulta, porque me disparaba la autorización cada vez que se creaba una orden de venta, aunque no cumpliera con lo requerido.

Pero averiguando en los foros, encontré que los procedimientos de autorización solo se disparan a nivel de cabecera, y a nivel de linea solo toma la primera. Y si en el caso de
que se presente el inconveniente en una linea que no sea la primera no me disparara
la autorización.
Por eso desistí de usarlo.

Former Member
0 Kudos

podrías generar una consulta sobre las órdenes de venta y convertirla en una alarma.

Cada vendedor usa una sesión diferente?

Si es así, podrías hacer un filtro por vendedor de la consulta a las órdenes de venta que estén abiertas y que pertenezcan a su usuario.

algo así como:

SELECT T0.[DocNum] FROM ORDR T0  INNER JOIN OSLP T1 ON T0.SlpCode = T1.SlpCode WHERE T1.[SlpCode]='La clave de tu vendedor'

dependiendo de cómo acceden tus vendedores a sap 'Mediante sesiones independientes o compartidas' se podría hacer un ligue entre el vendedor y el usuario conectado para hacerle llegar la alarma.

tienes ligado el dato maestro de empleado con usuarios de sap? eso tmb ayuda.

Saludos!

former_member228470
Participant
0 Kudos

Hola David, trate de hacer una alerta como me sugeriste para que apenas el usuario autorizador cree la orden de venta le llegue al usuario que la solicito pero es inconsistente.

Aunque no haya sido creada por el autorizador, le llega de una vez al vendedor cuando no debe ser asi.  Debe llegarle despues que se cree la orden de venta.  Este es el codigo que use

SELECT T0.[DocNum] FROM ORDR T0  INNER JOIN OSLP T1 ON T0.SlpCode = T1.SlpCode WHERE T1.[SlpCode]=5 and T0.usersign = 1

AND T0.DocStatus = 'O' and T0.Printed = 'Y'