Bf solictud compra sobre tabla sino autorizacion

Buen dia expertos, haber si me pueden ayudar, requiero realizar el pago de comisiones, a 2 tipo de empleado, para lo cual genere una tabla definida del usuario, donde el sistema debera validar el mes, el año, la sucursal, el monto, si estos no aparecen en dicha tabla, NO se genera el documento, sino pasa a procedimiento de autorizacion, para lo cual requiero su ayuda y experiencia, genere la siguiente, pero la verdad ya me perdi, alguien que me pueda ayudar.

Saludos gracias.

image

Hola.
No me quedan claras varias cosas:

1.-Si pudieras aclarar, el pago de comisiones, que mencionas, desde donde lo vas a generar. Es decir desde que documento de SAP?
2.- El monto, también lo vas a comparar con la tabla de usuario?
3.- Aparte de la tabla de usuario que enviaste, y la consulta de la imagen de abajo que otras pruebas has realizado ?

Nos comentas.
Saludos.

Hola que tal, si mira voy a generar solicitudes de compras, en el cual va a comparar si existe registrado el mes, el año, la sucursal, el monto, el empleado, etc. si esos estan en la tabla definida por el usuario, se genera el documento

Sino solicitara aprobacion de autorizacion

A simple vista la tabla no le veo sentido…veo que se repiten varias cosas y los montos no lo veo, tampoco que tipo de validacion x empleado quieres usar. Creo te falta definir mas tu requerimiento.

1 me gusta

Hola @ingdamien una consulta:
¿Sabes como deberia ir una busqueda formateada para usarla en un proceso de autorizacion?
¿Que dato te debe devolver una BF, para activar un proceso de autorizacion X, no precisamente este?

Si claro, he hecho varias, por ejemplo…

image

Ahi realice una BF para el tipo de empleado, y que al momento de generar la solicitud tome un tipo, y no cualquiera.

Eso es muy diferente a lo que estoy exponiendo, cuando se tiene que validar una tabla de usuarios, eso NO lo he hecho.

Ok. Listo. Te preguntaba esto pues la consulta SQL te debe devolver un valor VERDADERO o FALSO, en caso retorne VERDADERO se ejecutara el proceso de autorizacion. En caso contrario NO.

Tu Busqueda Formateada podria ser entonces algo asi:

SELECT 'TRUE'
FROM 
[@COMISIONES01] a,
OPRQ b,
WHERE 
b.docnum = $[OPRQ.docnum.number] AND
month(b.docdate)=a.U_MES AND
year(b.docdate)=a.U_AÑO AND
b.u_sucursal=a.U_sucursal AND
b.doctotal=a.U_monto

Aqui estoy asumiendo algunos nombres de campos en tu base de datos de SAP, donde guardas valores tales como el nombre de la sucursal en la solicitud de compra.
Ademas yo cambiaria el valor del mes por numerico en lugar de Alfanumerico, en la consulta asumo que el mes es Numerico.

Esto es una sugerencia, aunque como tambien dice el compañero @juliancab, debes tener bien definidos tus requerimientos.

Espero haber podido ayudarte en algo.
Saludos.

Saul Hernandez

Hola buen dia, si mira los datos de la tabla todos son alfanumericos, ya que en la solicitudes de compra asi lo manejan…

image

image

Bueno, esta un poco dificil, pero si es bastante trabajo.

Te tocará hacer una conversion de datos de alfanumericos, a numericos en el caso de los montos, aunque alli, lo mas dificil será quitar la moneda. Podrias usar la funcion substring de SQL para ello.

En el caso de los meses podrias usar una conversion de numero de mes a nombre del mes, usando algo similar a:

Select DateName( month , DateAdd( month , month(getdate()) , 0 ) - 1 )

algo similar te digo, pues la consulta anterior te devuelve el mes Actual pero en ingles, tendrias que ver como puedes hacer para que te lo devuelva el nombre en español, y asi poder comparar el valor que viene de la solicitud de compra contra el valor que tenes en tu tabla de usuario.

Respecto al año, tambien tendras que convertirlo a valor numerico, para poder comparar.

Otra opcion seria,

Cambiar la tabla de usuario a datos que no sean TODOS alfanumericos y asi sea mas facil realizar las comparaciones.

Esas serian mis sugerencias.
Espero haber ayudado en algo.

Saludos.

Gracias te lo agradezco, dejame ver como me queda.

Saludos

Pero dime algo, si los campos alfanumericos en ambos lados, es decir en la tabla PRQ1, y la tabla del usuario @COMISIONES01, la comparacion no tendria por que convertir o si?

Si ambos son alfanumericos no seria necesario. Solo que tendrias que validar que ambos campos no lleven espacios en blanco.
Eso lo hecho con las funciones RTRIM, y LTRIM de SQL
Algo asi se usan:

SELECT (LTRIM(RTRIM(cardname) FROM OCRD

Aqui quita los espacios en blanco a la derecha y a la izquierda del campo “cardname”
Saludos.

Asi es no llevan espacios en blanco.

Bueno, entonces los podes comparar tal y como estan, pero para ser precavido, seria bueno usar esas funciones de SQL, LTRIM y RTRIM.

Saludos.

Asi es como yo lo dejaria, a reserva que me corrigas algo,

SELECT 'TRUE'
FROM 
[@COMISIONES01] a,
OPRQ b, PRQ1 c
WHERE 
a.MES= $[PRQ1.c.U_Ano] AND
a.U_Tipo)='b.Requester AND
c.U_Ano=a.U_EJERCICIO AND
c.U_Sucursal=a.U_Sucursal AND
c.doctotal=a.U_COMISON AND 
a.U_NOMBRE=c.Description AND

las comparaciones como tal, se ven bien.
la sintaxis de algunos campos quiza por alli, se te coló alguna letra donde no iba, sera cuestion de que veas detalladamente cada comparacion…

Yo para probar mis busquedas formateadas, uso algun campo de texto dentro de la pantalla que la estoy trabajando en este caso serian tus solicitudes de compra y verificas si te devuelve TRUE o FALSE.

Saludos.

Saul Hernandez

Que crees, NO esta funcionando la autorizacion, se hace una solicitud con mayor monto de comision, y de igual forma genera el documento.

SELECT ‘TRUE’
FROM
[@COMISIONES01] a,
OPRQ b, PRQ1 c
WHERE
a.U_EJERCICIO<> $[PRQ1.c.U_Ano] AND
c.U_Sucursal<>a.U_Sucursal AND
c.doctotal<>a.U_COMISON AND
a.U_NOMBRE<>c.Description

Hola @ingdamien
Segun la consulta que muestras, si la observas bien, te pregunto:
¿En que momento devuelve TRUE=VERDADERO?
¿Que debe cumplir la consulta para devolver TRUE?

revisala y me comentas.
Alli esta la respuesta a lo que me indicas:

Analiza detenidamente tu consulta de SQL y me comentas.
Saludos.

1 me gusta

Hola @saufondez

Mira en el momento que hace la comparacion, es decir si estoy leyendo la tabla @COMISIONES01, si el documento tiene el monto de la tabla, pasa y genera el documento, si es diferente, debe generar el flujo de autorizacion y pedir aprobacion.

Ya realice diferentes querys, pero no me esta funcionado.

.SELECT 'TRUE' 
T0.U_MES=T2.U_Mes AND
T0.U_EJERCICIO=T2.U_Ano AND
T0.U_Sucursal=T2.U_Sucursal AND
T0.COMISION=T2.LineTotal AND
T0.U_NOMBRE=T2.Dscription
FROM
[@COMISIONES01.Code] , T0 , OPRQ T1 INNER JOIN PRQ1 T2 ON T1.[DocEntry] = T2.[DocEntry]


SELECT  ‘TRUE’
FROM
[@COMISIONES01.code] T0,
OPRQ T1,  PRQ1 T2
WHERE
T0.U_MES=T2.U_Mes AND
T0.U_EJERCICIO=T2.U_Ano AND
T0.U_Sucursal=T2.U_Sucursal AND
T0.COMISION=T2.LineTotal AND
T0.U_NOMBRE=T2.Dscription