cancel
Showing results for 
Search instead for 
Did you mean: 

Autorizaciones con filtros segun consulta

Former Member
0 Kudos

Hola, buen día.

Tengo la siguiente consulta que funciona perfecto con documentos ya creados (ordenes de venta), el problema es que quiero incluirla en un proceso de autorización donde el documento aún no se crea en el sistema, leyendo encontré que debo seguir la misma lógica que las búsquedas formateadas para capturar el documento actual, pero no me está resultando, me pueden ayudar por favor?

Gracias

--declare de variables

declare @efectivo as varchar (10)

set @efectivo=( select  t0.groupnum from ordr t0 where t0.Docnum = $[$8.0.1])

declare @condiciones as varchar (10)

set @condiciones = (SELECT t0.DocNum FROM ORDR T0  INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode WHERE

T0.[DocNum] =$[$8.0.1] and ( ( T0.[DocTotal] >=  T0.[U_saldo] or  T0.[U_saldo] is null )

  or ( T1.[U_SEGURO] <>'1' and  T1.[U_SEGURO] <> '2' )or t1.[U_revcredito] ='Si')  )

 

 

--Primer filtro Efectivo o no

if @efectivo = '-1'

begin

--Si es efectivo, No arroja alarma

select 'No arroja Alarma '

end

else if  @efectivo <> '-1'

begin --Si no es efectivo comienza

if @condiciones is not null --Si algunas de las condiciones de venta no se esta cumpliendo

begin

select 'TRUE'

end

if @condiciones is null --Si todas las condiciones de cumplen

begin

select 'No arroja alarma'

end

end

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Ignacio, si la necesidad sigue siendo la misma, es decir, que la intención es que el query del modelo de autorización funcione como el query que publicaste al inicio de tu post, entonces intenta con este query:

select case when $[ORDR.GroupNum] <> -1

  and ($[29.0.number] >= isnull($[ORDR.U_Saldo],0)

  or T0.[U_SEGURO] not in ('1', '2')

  or T0.[U_revcredito] ='Si')

  then 'TRUE'

  else 'False'

from OCRD T0

where T0.CardCode = $[ORDR.CardCode]

En mis pruebas sí funcionó.

Saludos,

JC.

armandomuozsule
Active Participant
0 Kudos

Buen dia Ignacio, no se si te comprendi bien pero tu quieres aplicar este proceso con documentos que aun no esten autorizados es de decir en preliminares. si fuese asi yo lo probaria de la siguiente forma:

-declare de variables

declare @efectivo as varchar (10)

set @efectivo=( select  t0.groupnum from odrf t0 where t0.Docnum = $[$8.0.1])

declare @condiciones as varchar (10)

set @condiciones = (SELECT t0.DocNum FROM ODRF T0  INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode WHERE

T0.[DocNum] =$[$8.0.1] and ( ( T0.[DocTotal] >=  T0.[U_saldo] or  T0.[U_saldo] is null )

  or ( T1.[U_SEGURO] <>'1' and  T1.[U_SEGURO] <> '2' )or t1.[U_revcredito] ='Si')  )

 

 

--Primer filtro Efectivo o no

if @efectivo = '-1'

begin

--Si es efectivo, No arroja alarma

select 'No arroja Alarma '

end

else if  @efectivo <> '-1'

begin --Si no es efectivo comienza

if @condiciones is not null --Si algunas de las condiciones de venta no se esta cumpliendo

begin

select 'TRUE'

end

if @condiciones is null --Si todas las condiciones de cumplen

begin

select 'No arroja alarma'

end

end

Saludos Cordiales

Former Member
0 Kudos

Básicamente, necesito aplicar esta consulta a un proceso de autorización de ordenes de venta, cuando la persona este creando la orden al darle crear, debe funcionar la consulta que puse mas arriba, ya que si cumple con ciertos requisitos, el proceso de autorización no saltará, pero si cumple con alguno de los filtros, arrojará true y entonces el proceso comenzará y como te decía con documentos ya creados me funciona, pero con los preliminares no.

Probaré lo que me dices y te comento.

Gracias.

Former Member
0 Kudos

No me ha funcionado, necesito ayuda, porfavor.

former_member413321
Contributor
0 Kudos

Hola,

    En ese caso, como el documento no esta guardado, debes reemplazar DocTotal y U_Saldo por la consulta de la informacion de la pantalla. O sea $[$8.U_Saldo.NUMBER]

     Y en este caso no puedes consultar la table de OINV porque no esta guardada. Por lo que tendras que modificar el query sin esta tabla.

espero te funcione.

Former Member
0 Kudos

Hola, he logrado que la busqueda formateada me funcione, he creado un campo para probar si me trae el valor TRUE  y si me lo trae a perfectamente .Aprovecho de agradecerles por la ayuda con esta primera etapa.

El problema ahora es que apliqué esta query en un modelo de autorizaciones y todos los documentos pasan sin pedir autorización aunque el resultado sea TRUE, y me fije que arroja un error al crear

error interno 3006 es el que arroja, es extraño, ya que la misma query en un campo funciona sin problemas, me trae el valor.

Gracias de antemano.

former_member413321
Contributor
0 Kudos

Podrias mostrarnos como quedo el query al final. Puede ser que estas relacionando la tabla pero esta no esta guardada, por lo que nunca retorna datos.

Former Member
0 Kudos

Claro:

declare @efectivo as varchar (10)        --- variable para guardar medio de pago

set @efectivo=( $[$-47.7.0])

declare @seguro as varchar (10)                            --Variable para guardar tipo de seguro--

set @seguro = ( select t0.u_seguro  from ocrd t0  where t0.cardcode = $[$-4.0.0] )

declare @condiciones as varchar (10)                      --Variable donde se aplican los filtros--

  set @condiciones = (  SELECT 'Autorizar' WHERE

     ($[$-29.0.NUMBER] >=  $[$U_saldo.1.Number]) or ( $[$U_saldo.1.Number] is null)

or ( @seguro <>'1' and  @seguro <> '2' )          )

 

 

 

  if @efectivo = '-1'

begin

--Si es efectivo, No arroja alarma

select 'No arroja Alarma , es efectivo'

end

else if  @efectivo <> '-1'

begin --Si no es efectivo comienza

if @condiciones is not null --Si algunas de las condiciones de venta no se esta cumpliendo

begin

select 'TRUE'

end

if @condiciones is null --Si todas las condiciones de cumplen

begin

select 'No arroja alarma la query es NULL'

end

end

Former Member
0 Kudos

Hola, estuve probando con queries mas sencillas y tampoco me funciona los procesos de autorizaciones, por ejemplo traté con

Select 'True' where $[$-47.7.0] = -1

Solo que arroje el proceso de autorización cuando la condicion de pago es efectivo.

Y no funciona, a pesar de que la condicion es efectivo, el documento pasa sin problemas.

Ayuda porfavor con la query principal, o si existe algun manual de autorizaciones con consultas, no he podido encontrar ninguno.

GRACIAS!

former_member413321
Contributor
0 Kudos

Hola, porque utilizas el "-" ?

estas consultando valores del encabezado cierto?

Former Member
0 Kudos

Si, son todos del encabezado, estuve leyendo en algunos antiguos hilos que en algunos casos debia utilizar el '-'  y por alguna razon cuando no lo uso, la busqueda no me funcionaba, pero cuando si utilizaba el - si funciona.

former_member413321
Contributor
0 Kudos

Hola,

      Viendo tu instruccion veo que esta mal. Dado que haces el select y el where pero no hay un from. Esto es un error de sintaxis de SQL.

Debes utilizar una instruccion como la siguiente

select case when Filtro1 or filtro2 or filtro3 then 'TRUE' else 'FALSE' end

esto si te retorna un valor.

Former Member
0 Kudos

que zona me comentas que está mal? las variables que guardan los valores? o en los select que devuelven el TRUE?

Lo extraño es que si aplica esta query en un campo si me trae los valores.

former_member413321
Contributor
0 Kudos

En Set @efectivo =   coloca el select $[$etc)

En Set @condicion = cambialo por lo que te dije, select case when ...

Former Member
0 Kudos

Hola, he probado otras soluciones y finalmente me ha resultado, pero solo me ha funcionado utilizando campos nativos de sap, los errores vienen cuando intento hacer calculos con campos definidos por usuario.

Gracias por su ayuda.