Excluir un cliente en un modelo aprobacion

Buenas tardes

cree un modelo de autorizacion que cuando se intente crear una nota de venta y el % de ganancia bruta este por debajo del -1 pida autorizacion

La consulta creada me funciona pero para la primera linea de la Nota de venta en cambio cuando agrego en la linea uno un codigo superior al precio y en la segunda linea agrego un codigo por debajo de margen no pasa por el modelo de autorizacion

A la comunidad que debo hacer en este caso

SELECT DISTINCT ‘TRUE’ FROM ORDR WHERE $[ORDR.CardCode]<> (‘000016’) and $[ORDR.GrosProfit.NUMBER]<=-1

a ok el la ganancia bruta es a nivel detalle no documento entonces, hay que agregarle o validar con el detalle RDR1 si cualquier detalle tiene una ganancia bruta igual o menor a -1. es diferente a la ganancia bruta del documento completo. deja valido como ayudarte.

Muchas Gracias eres un ckack

Lo raro es que la primera linea si me la toma y la segunda no , cuando la primera linea no esta por debajo de margen pero las segunda si

es que la ganancia bruta a nivel documento es la mediación del detalle en conjunto, en cambio a nivel detalle tendra que validar cada linea.

Puedes Probar con esta adecuación…
SELECT DISTINCT 'TRUE 'FROM ORDR WHERE EXISTS ( SELECT 1 FROM RDR1 T0 where T0."GrssProfit" <= -1) AND $[ORDR.CardCode] <> '000016'

No me funciono ahora me pide autorizacion por cada producto que agrego y no estan en el margen negativo , ejemplo el costo Promedio esta en 12.000 y coloco en 15.000 y me pide igual autorizacion asi no este por debajo

Puedes revisar en la parte del menú antes de que crees el documento hay un icono de calculadora que dice ganancia bruta te puedes fijar si los artículos realmente tienen ganacia o se van a negativo si alguno de todos se va a negativo por eso te marca la alerta

si , te salen en rojo cuando esta en negativos , pero lo que estoy haciendo esta en positivo y igual me envia la autorizacion

Me imagino que la evaluación de la ganancia bruta la quieres por fila en lugar de documento.

Si bien en un query de búsqueda formateada sí puedes poner un campo de las filas, este tipo de queries no los acepta SAP para su uso en los modelos de autorización. Para los modelos de autorización solo los campos a nivel documento pueden ser utilizados en sus queries, de filas no.

Mi workaround que he diseñado para estos casos y que he usado por años es este:

  1. Crear un campo a nivel documento llamado “PideAut” o como gustes. Que incluya 2 valores: SI y NO. El No será el valor default.
  2. Crear un candado para bloquear la venta cuando la ganancia bruta no reúna las condiciones que necesites y que el campo del punto 1 sea igual a NO.
  3. Crear un modelo de autorización con un query que evalúe el campo del punto 1, que cuando sea SI entonces resulte en un TRUE para el modelo de autorización.

Cuál será el efecto:

  1. Cuando las reglas que evalúa tu candado no se cumplan, entonces SAP va a bloquear la operación.
  2. Si el usuario quiere realmente continuar, tendrá que elegir SI en el campo que creaste (“PedirAut”) y al continuar entonces SAP lanzará la petición de autorización.

Hay otros métodos que pueden servir, como el manejo de tablas temporales pero este que te comento me ha resultado mucho más práctico.

Espero te sea de utilidad.

Saludos,

JC.

1 me gusta

@jchusmit , entiendo entonces tiene que ser un bloqueo y de alguna forma crear un campo de usuario que autorice si y no ., de otra forma no se puede

Tengo esta consulta se puede agregar a este modelo de linea para ver si funciona ?

SET @Num=(
SELECT COUNT(*) AS Expr1
FROM RDR1 T0 INNER JOIN ORDR T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OITM T2 ON T0.[ItemCode] = T2.[ItemCode]
INNER JOIN OCRD T3 ON T0.[BaseCard] = T3.[CardCode]
INNER JOIN ITM1 T4 ON T2.[ItemCode] = T4.[ItemCode]
WHERE T0.PRICE < T4.[Price]

IF (@Num>0)
BEGIN
SET @lin=(
SELECT Top 1 cast((T0.LineNum+1) as varchar)
FROM RDR1 T0 INNER JOIN ORDR T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OITM T2 ON T0.[ItemCode] = T2.[ItemCode]
INNER JOIN OCRD T3 ON T0.[BaseCard] = T3.[CardCode]
INNER JOIN ITM1 T4 ON T2.[ItemCode] = T4.[ItemCode]
WHERE T0.PRICE < T4.[Price]
END