cancel
Showing results for 
Search instead for 
Did you mean: 

Modelo de Autorización con Condición basada en Consulta de usuario

Former Member
0 Kudos

Hola buenas Tardes,

Alguien puede decirme si estoy realizando mal la configuración del Modelo de autorización o cómo debería parametrizarlo basado en una consulta?. Mi QUERY funciona correctamente para lo que estoy necesitando?...Solo requiero que se genere la etapa de autorización configurada para el modelo (OFERTA3) cuando el documento OFERTAS tiene un % TOTAL de ganancia bruta < 20 y el código de empleado del Departamento de Ventas sea '2" o '3'. Si se cumplen ambas condiciones se debe generar el procedimiento de autorización OFERTA 3.

He probado instalar el Modelo SOLAMENTE uilizando la QUERY 1 como condición (anexa) y también seleccionando tanto el check de la variable estándar %de ganancia bruta <20 y otra consulta solo para validar el empleado de ventas pero en ninguno de los casos obtengo lo que necesito. En el primero (solo QUERY 1) no me generó ningun procedimiento y en el segundo (VARIABLE + CONSULTA) arrojó dos ETAPAS de autorización que estan configuradas OFERTA1 y OFERTA3 y debería solo generarme la etapa OFERTA 3.

QUERY 1:

SELECT T0.SlpCode, T0.DocNum, (T0.GrosProfit) / SUM ((T1.GrossBuyPr*T1.Quantity))*100 AS '%TotalBeneficio' 
FROM OQUT T0
INNER JOIN QUT1 T1 ON T1.DocEntry=T0.DocEntry
WHERE (T0.SlpCode = '2') OR (T0.SlpCode = '3')
GROUP BY T0.SlpCode,T0.DocNum,T1.GrossBuyPr,T0.GrosProfit
HAVING (T0.GrosProfit) / SUM ((T1.GrossBuyPr*T1.Quantity))*100 < '20'

Alguien puede ayudarme de antemano gracias por la colaboración,

M.C

Accepted Solutions (0)

Answers (2)

Answers (2)

former_member220991
Participant
0 Kudos

Buenos dias yo tambien quiero utilizar este tipo de herramientas en SAP B1 yo lo que requiero es poner un candado al momento de que cancelen la factura

esta es mi consulta

SELECT  DISTINCT 'True' FROM OINV WHERE CANCELED = 'C'

pero no me genera nada no se el por que

soy nuevo en mundo de SAP y SQL si me pueden ayudar por favor

tony_murillo
Participant
0 Kudos

Hola Rodriguez Motos,

Las autorizaciones por medio de consultas se disparan sólo si arrojan un valor 'TRUE', es decir tienes que crear un query en el que verifique lo que necesitas y diga que es 'TRUE', te pongo un ejemplo muy sencillo para que entiendas mejor y lo apliques a tu query:

SELECT DISTICT 'True' FROM OINV WHERE CardCode.OINV = 'C01'

El cual verifica si el cliente de la factura tiene el código "C01" dispare e inicie en el proceso de autorización.

Espero te sirva.

Saludos.

Edited by: Antonio Murillo on Apr 5, 2011 1:42 AM

Edited by: Antonio Murillo on Apr 5, 2011 1:42 AM

Former Member
0 Kudos

Hola Antonio,

Gracias, me ha servido para corregir la QUERY la cual ya funciona con valor TRUE.

Pero haciendo pruebas vuelvo a encontrarme con el mismo problema original, me está disparando dos modelos de autorización sin cumplir el documento con ninguna de las condiciones de ningún modelo. Lo único que tengo es al mismo Autor, el mismo documento (oferta), y para cada modelo su etapa que son distintas (incluso con distinto usuario que autoriza), ni decir de las condiciones que cada modelo tiene configurado porque no cumple con ninguna y aún así me dispara dos procedimientos de autorización.

Alguien se le ha presentado este inconveniente?? se han ELIMINADO los registros de algunas ETAPAS (por no hacer falta) acaso puede estar generando algun fallo?

Si puede alguien darme una idea de lo que puede estar ocurriendo, o de lo que pueda estar mal configurado (si lo está) se los agradecería,

Un saludo,

M.C.

Former Member
0 Kudos

Creo deberías intentar de mano solo la parte de la consulta del empleado de ventas.

Estas evaluando este dato en la cabecera y las líneas pueden ser distintas.

En cualquier caso evaluas si es true o false la línea o el dato de cabecera oportuno y debería saltar el procedimiento de autorización, de ese estilo tengo varias funcionando.

Luego le añades el segundo requerimiento. Nunca he probado a usar una del sistema y una de usuario en el mismo procedimiento de autorización (no sé si funcionará) y que la query sirva para evaluar dos condicionantes en una misma query puede ser posible pero complicado.

Former Member
0 Kudos

Duplica los posts

Edited by: Gonzalo Gomez Gonzalez on Apr 5, 2011 1:36 PM

Former Member
0 Kudos

Gracias Gonzalo por tu ayuda,

Estoy utilizando una QUERY muy sencilla, solo dice que si el codigo de empleado ='2' se dispare el procedimiento. Aún así no se dispara nimgún procedimiento, adjunto mi query. Quizás tengo un error en ella. Pero de igual forma probando con las líneas del documento en mis pruebas solo tengo una línea con el mismo código de empleado de ventas que tengo en el encabezado y aún así no me dispara el procedimiento.

ME SURGE UNA GRAN DUDA: PUEDE DESENCADENARSE UN PROCEDMIENTO DE AUTORIZACIÓN CUANDO SE CUMPLEN 2 CONDICIONES EN EL MISMO MODELO USANDO A LA VEZ UNA CONSULTA GRABADA:

SELECT DISTINCT 'True' FROM OQUT T0 WHERE T0.SlpCode = '2'

Y UNA VARIABLE PREDEFINIDA:

% Ganancia Bruta >= 20

Si esto no es posible no puedo cumplir con la autorización que requiero?

Gracias por la colaboración.

M.C

tony_murillo
Participant
0 Kudos

Hola M.C.

Tu query debe tener una sintaxis para que verifique el dato en el documento abierto, es decir estas diciéndole al sistema que haga una comprobación de datos sobre un documento que aún no existe, por tal motivo tu consulta nunca se dispara. Cuando hacer referencia a T0.SlpCode le estas diciendo al sistema que vaya a la base de datos y lo verifique pero no existe ningún documento creado.

Verifica tu consulta, debería quedar algo así:

SELECT DISTINCT 'True' FROM OQUT T0 WHERE $[$20.1.NUMBER] = 2

Y si puedes tener varios modelos de autorización relacionados a un documento, en caso de cumplir uno o varios el sistema te enlista los modelos relacionados para poner un comentario en cada renglón.

Former Member
0 Kudos

Una luz al final del tunel. Ha funcionado el procedimiento de autorización basado en la consulta, gracias por la explicación Antonio la consideración de un documento no creado la he entendido.

Ahora solo resta saber mi GRAN DUDA porque sigo en ello, me queda un paso para conseguirlo (ojalá se pueda). Estoy probando el modelo con las dos CONDICIONES en simultáneo (ambas 'true') , la consulta que ya me funciona perfectamente y una variable predefinida (% ganancia bruta<20) y me está validando que alguna de las dos se cumpla, pero no ambas, así que no puedo completar el requerimiento SlpCode=2 y % ganancia bruta<20.

Puede alguien decirme si hacer las dos validaciones FUNCIONA.

tony_murillo
Participant
0 Kudos

Hola M.C.

Que bueno que funcionó lo de la consulta.

Pongamos en claro tu duda, lo que entiendo es que en un solo modelo de autorización quieres poner dos validaciones?

Si es correcto lo que entiendo la verdad no lo recomeindo, te recomeindo que hagas un modelo de autorización por validación es decir;

Nombre: Validación Vendedor

Seleccionar los docuemntos etc.

Y que se dispare con la consulta que ya creamos.

y otro modelo:

Nombre: % de Ganancia

Al ser una autorización traida por default en el sistema es fácil configurarla

Si lo haces así cuando estés por crear un documneto del vendedor 2 y con un % de ganancia inferior al 20% te aparecerá la ventana de solicitud de autorización enlistandote los dos modelos de autorización.

Espero que me hayas entendido, pero de que se pueden combinar esas dos autorizaciones si se puede y lo valida el sistema sin problemas.

Saludos.

Antonio Murillo

Former Member
0 Kudos

Muchisimas gracias Antonio por tu ayuda.

Has entendido bien y de la misma yo lo he hecho, habia probado y efectivamente se generan dos modelos de autorización por separado uno por el vendedor y otro por el % de ganancia, ocurre que mi autorizador es el mismo y le llegarian en ambos casos dos solicitudes de aprobación para un mismo documento que no podría crearse hasta que ambos envios no los autorice y la verdad es que siendo el mismo responsable que autoriza y mismo documento siento que no es muy eficiente el procedimiento.

Ahora bien valdría la pena diseñarme una consulta que valide el % de ganancia en el documento creado y así que fuesen dos consultas a la vez las que, si se cumplen, disparen el modelo? así solo se requeriría en un solo mensaje la aprobación del mismo documento y no dos?

Voy a probar añadir una consulta más (más sencilla que el porcentaje de ganancia) a ver si funcionan dos consultas en simultáneo......si lo hace me pongo con la Query de % de ganancias y TODOS FELICES......

luego te comento que tal me fue....a por ello.

M.C.

Former Member
0 Kudos

Hola Antonio,

He realizado la prueba con dos consultas por separado y ocurre lo mismo considera o una o la otra pero no las dos en el mismo proceso.

Así que solo queda una alternativa, diseñar una sola consulta que considere el código del empleado de ventas (que ya tengo la porción de query) añadiendo a ésta:

 SELECT DISTINCT 'True' FROM OQUT T0 WHERE $[$20.1.NUMBER] = 1 

el % de ganancia bruta total del documento > 20%

El cálculo del % de la ganancia bruta es: (GrosProfit.OQUT) / Suma ((GrossBuyPr.QUT1 * Quantity.QUT1)) * 100

Alguien podría indicarme si son éstas las variables de sistema (necesito usarlas por ser un documento no creado no?), o si podrían darme una mano para completar la consulta.

GrosProfit.OQUT= 3.75

GrossBuyPr.QUT1 = 3.73

Quantity.QUT1 = 3.11

de antemano agradecería la ayuda para conseguir el objetivo.

Un saludo,

M.C.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Pruebalo de esta manera


((SELECT $[$42.OQUT.GrosProfit]) / (SUM((SELECT $[$38.21.NUMBER])*(SELECT $[$38.11.NUMBER]))))*100

o de esta otra


DECLARE @Var1 INT, @Var2 INT, @Var3 INT
SET @Var1 = SELECT SUM((SELECT $[$38.21.NUMBER])*(SELECT $[$38.11.NUMBER]))
SET @Var2 = SELECT (SELECT $[$42.OQUT.GrosProfit])/ @Var1
SET @Var3 = SELECT @Var2*100

Slds

Edited by: Floyola on May 9, 2011 1:22 PM

Former Member
0 Kudos

Hola he probado pero me devuelve el siguiente error:

Could not commit transaction (ADOC)

He utilizado esta consulta:

*** VALIDACION DE SLPCODE Y % BENEFICIO***

DECLARE @Var1 INT, @Var2 INT, @Var3 INT
SET @Var1 = SELECT SUM((SELECT $[$38.21.NUMBER])*(SELECT $[$38.11.NUMBER]))
SET @Var2 = SELECT (SELECT $[$42.OQUT.GrosProfit])/ @Var1
SET @Var3 = SELECT @Var2*100

SELECT DISTINCT 'True' FROM OQUT T0 WHERE $[$20.1.NUMBER] = 1 AND @Var3 >= 20 

former_member188440
Active Contributor
0 Kudos

me parece esta incorrecto en esta linea


DECLARE @Var1 INT, @Var2 INT, @Var3 INT
SET @Var1 = SELECT SUM((SELECT $[$38.21.NUMBER])*(SELECT $[$38.11.NUMBER]))
SET @Var2 = SELECT (SELECT $[$42.OQUT.GrosProfit])/ @Var1************************** sobra el  $42********************
SET @Var3 = SELECT @Var2*100
 
SELECT DISTINCT 'True' FROM OQUT T0 WHERE $[$20.1.NUMBER] = 1 AND @Var3 >= 20 

felipe_loyolarodriguez
Active Contributor
0 Kudos

Prubalo denuevo de esta manera


DECLARE @Var1 INT, @Var2 INT, @Var3 INT
SET @Var1 = (SELECT SUM($[$38.14.NUMBER]*$[$38.11.NUMBER]))
SET @Var2 = $[OQUT.GrosProfit] / @Var1
SET @Var3 = @Var2 * 100

SELECT DISTINCT 'True' FROM OQUT T0 WHERE $[OQUT.SlpCode] = '1' AND @Var3 >= '20' 

Edited by: Floyola on May 18, 2011 2:18 PM

Former Member
0 Kudos

Hola,

He modificado la consulta y sigue dando el mismo error "Could not commit transaction (ADOC)".

Quisiera conocer la razón del error, ya por despejar de mis dudas su motivo. He resuelto el problema de forma mucho más compleja y laboriosa que una simple query con variables de sistema como esperaba.

Quedo a la espera de comentarios para cerrar el punto.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Tambien he tenido ese error al tratar de hacer procedimientos y he tenido que re-hacer el query

En mi caso, fue netamente debido al los tipos de datos de los campos.

He leido en varios post en ingles, que este error se debe a problemas tanto en la creacion como el la UNION(JOIN) de campos de usuario o tablas de usuario. Tambien puede deberse a SP_TN que estes utilizando puedan estar afectando la validacion, segun Paul explica aqui

Slds

Former Member
0 Kudos

Gracias Floyola por el hilo. Lo consideraré en futuras querys, este caso lo dejaré cerrado porque lo he trabajado montón. Gracias por el apoyo.