BF para autorizacion revisando todas las lineas

Excelente día.

Tengo un query que uso para solicitar la autorización de creación de factura la cual funcionaba bien hasta que un usuario por coincidencia encontró la manera de burlarla.

Tengo ciertos artículos a los que les damos un descuento por una promoción por temporada y los cuales los controlo seleccionando la propiedad 64 de los datos maestro de artículos, en esta ocasión el descuento autorizado es un 10% en determinados artículos, no se hizo una BF para fijar el descuento dentro de las líneas de la factura porque se usa como estrategia de venta a discreción del vendedor.

Si el articulo no tiene la selección de la propiedad 64 y tiene un descuento o si el artículo es de los seleccionados en la propiedad 64 y el descuento es diferente al 10% autorizado debe detonar la solicitud de autorización.

El código del query para condicionar la autorización, el código es el siguiente:

DECLARE
@SIPROMO nvarchar(1)
SET @SIPROMO = (SELECT T2.QryGroup64 FROM OITM T2 WHERE T2.ItemCode = $[$38.1.0])
SELECT distinct 'TRUE', @SIPROMO
FROM INV1
WHERE ($[$38.15.number] <> 0 AND @SIPROMO ='N') OR ($[$38.15.number] BETWEEN 1 AND 9 AND @SIPROMO ='Y') OR ($[$38.15.number] > 10)

Como dije, funciona bien siempre y cuando la primera línea tenga el articulo a revisar pero resulta que por coincidencia el usuario hizo una factura con 2 líneas y en la segunda línea capturó el descuento del 10% en el artículo que no está autorizado, como no está en la primera línea no detonó la solicitud de autorización porque la primera línea cumple con para no detonarla.

Me podrían ayudar a solucionar este detalle en el query, no se como hacer para que recorra las líneas de la factura y detone la autorización en la primera línea que cumpla con la condición para hacerlo.

Por anticipado agradezco su ayuda y quedo al pendiente.

Saludos :handshake:
José Alberto Medina M.

Hola Jammunico,

Hasta donde entiendo la query solo se ejecuta una vez al crear el documento, asi que tu query tiene que estar diseñado para ejecutarse una sol vez, por lo que el parametro que usaste @SIPROMO creo que no funcionaria, intenta colocar la subconsulta en vez del parametro.

Saludos,

Hola @Willy_Caldero, Gracias por la orientación, ¿En que parte pondría la subconsulta? y ¿Cómo sería la subconsulta?, tendrías algún ejemplo, muchas gracias.

Saludos.
:handshake:

Hola Jammunico
Revisa lo siguiente

Revisando las notas tienes razón, de forma estandar los procesos de autorización solo llegan a la primera linea, esto es una limitante actual, pero puedes darle la vuelta apoyandote con bloqueos usando el TN (transacction notification), este se ejecuta al grabar el documento, la idea es que cuando grabes, un SP dentro del TN bloquee la creacion, y de paso te muestra un mensaje que diga que necesitas autorizacion, adicionalmente creas un UDF (campo de usaurio a nivel cabecera), con las opciones “Si/No”, que tenga el valor por defecto en “No”, y que manualmente cambies este valor a “Si”, y recien pase a un proceso de autorizacion sencillo que en su query solo pregunte por este campo de usuario a nivel cabecera.

Ejemplo:

  1. Agregar al SP TN
if @Object_type = '13' and (@transaction_type = 'A' or @transaction_type = 'U')
begin
Declare @Desc int
Declare cDesc cursor for
select T0.DiscPrcnt
from INV1 T0 INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode
where T0.DocEntry = @list_of_cols_val_tab_del and T1.U_Autoriza = 'NO'
 * Open cDesc
Fetch cDesc into @Desc
while @@Fetch_Status = 0
begin
 if @Desc &gt;= 40
 begin
 Set @error = 1
 Set @error_message = 'Descuento mayor al autorizado. Solcite autorización'
 Deallocate cDesc
 goto Fin
 end
 Fetch cDesc into @Desc
 end
 close cDesc
 Deallocate cDesc
 end
  1. Crea un campo de usuario en la cabecera de documentos de marketing y por defecto debe tener el valor No

para que el TN te envíe el mensaje y en el campo de usuario tu puedas cambiar a Si y esto te active la autorización

  1. Crea una Query con lo siguietes datos

If $[oinv.U_Autoriza]= 'No' Select 'True'

la Query anterior es la que vas a utilizar en la autorización

Se puede tratar de automatizar para que no tengas que usar el cambio manual del UDF a pedir autorización, pero es un poco mas elaborado, con tablas auxiliares, BF’s, y mas UDF’s, te paso un documento que muestra un ejemplo.

:arrow_right: Ejemplo movido a sector de aportes, recuerden leer las normas, no se permite pasar contenido descargable en los foros públicos ya que la comunidad (todo el sitio web) puede ser sancionado por tal motivo.

Ref: h_tps://foros.consultoria-sap.com/t/28958

Si alguien necesita consultar este “ejemplo”, por favor solicitar en Manuales SAP citando este post, y se enviará sin importar cuántas solicitudes previas de material ya tengan. :v:

Espero te sea de ayuda la info.

Saludos cordiales,

1 me gusta

Si igual me iria por uno TN para la aprobacion de documentos de marketing por las lineas. Creo sino mal recuerdo existe un documento de como puedes elaborarlo.

Que tal apreciables @andresramirez, @Willy_Caldero y @juliancab, gracias por su interés en el tema.

Sus aportes me parece muy buenos e interesantes, el problema es que no tengo mucha experiencia en todo este mundo del SAP.

Solo soy usuario avanzado (por decirlo de alguna manera) porque uso SBO desde el 2005 pero no se todo lo que un consultor debe saber, solo algo de SQL para poder desarrollar pequeños querys y algunos procedimientos de autorización experimentando y tratando de marcarles los errores con autorizaciones y algunos bloqueos a los usuarios.

@andresramirez ya vi el enlace que amablemente me envías pero necesito digerirlo y entender de que es lo que hablan, con eso del TN (transacction notification, esto lo sé gracias a @Willy_Caldero) y desarrollar un ADDON para mi serían palabras mayores.

@Willy_Caldero, gracias voy a releer tu respuesta y en cuanto pueda entender tu aporte será genial de seguro.

@juliancab, también gracias y espero pronto entender lo del TN para coincidir contigo.

Entiendo que debo leer, comprender y estudiar pero lo debo hacer con tiempo para poder comprender, por el trabajo no tengo mucho tiempo pero trataré de hacerlo.

Sin embargo, @andresramirez, de lo que leí de tu enlace me da una idea para un truco simple que no sé si se pueda hacer, es crear un UDF a nivel cabecera y escondérselo al usuario pero que si se modifique al revisar en la línea que el artículo no tenga la propiedad 64 y que el descuento sea diferente a 0%, si cumple con esta condición debe modificar el UDF y que detone la autorización, ¿Qué piensan?, ¿Se puede hacer eso?.

De alguna manera estoy aprendiendo con sus aportes, agradezco mucho la ayuda y consejos.

Seguiré experimentando a ver si no se pasa la vigencia de la promoción y cuando ya la tenga no la pueda usar pero quedaría para la próxima ocasión.

Saludos.
:handshake:

2 Me gusta

Esto SI funciona sin quebrarse tanto la cabeza.

En las pruebas sin hacer clic en el botón de crear no me funcionaba así que me arriesgue a probarlo intentando crear la factura y funciono perfectamente, la BF recorre las líneas del documento para revisar todas las líneas y funciono sin ningún problema.

La autorización detono aún con el artículo en la línea final o en medio.

Con esto queda solucionado mi problema.

Saludos.
:handshake: :raising_hand_man:t2:

1 me gusta