cancel
Showing results for 
Search instead for 
Did you mean: 

Autorizacion de ventas bajas

Former Member
0 Kudos

hola a todos!!

Quisiera poder aplicar un modelo de autorización basado en query para que me evalúe y me restrinja cuando dentro de la factura de reserva haya un item con % ganancia bruta por debajo del 5%

tengo el siguiente query

SELECT 'TRUE' FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry WHERE ((($T1.[GrossBuyPr] - $T1.[Price] )/$T1.[Price])*-100 ) < 4.99 and T0.[DocNum] = $[$38.44.0]

no me funciona me sale un error interno y termina creandolo, la idea es q restrinja....la que trae el sistema por defecto no me sirve porque el evalua el

Accepted Solutions (0)

Answers (5)

Answers (5)

angeles804
Active Contributor
0 Kudos

Es correcto lo que dice la última compañera, primero sigue los pasos para crear tu autorización, creas etapas, modelo y en el modelo te vas a condiciones, puedes mandar a llamar a tu query de ahi, pero incluso puedes generar un stored o procedimiento almacenado que haga lo que tu quieras, en el caso del compañero que habla de las líneas podrías hacer incluso eso, por aqui debe de haber un documento en un post que habla de esto o en el blog de este compañero es más sencillo. Yo genere algo así para limies de créditos


ALTER

PROCEDURE [dbo].[Sp_desv_Credito]


(


@Cliente

nvarchar(20),


@CondPago

nvarchar(60),


@doctotal

numeric(19,6)


--@docentry int


)


AS


DECLARE

@VARIABLE INT


DECLARE

@SnCondPago  nvarchar(60)


DECLARE

@cont          nvarchar(60)


DECLARE

@limitcredit   numeric(19,6)


DECLARE

@saldocuenta   numeric(19,6)



  

SET @VARIABLE = (select count(t0.docentry)


from OINV t0


where t0.docstatus='o' and (t0.paidtodate<t0.doctotal)


and (datediff(day,t0.docduedate,getdate()) >= 1)


and t0.cardcode=@cliente)




SET @SnCondPago =  (select OCRD.groupnum


from      OCRD


where      OCRD.cardtype = 'C'


and OCRD.cardcode = @Cliente)


  

SET @saldocuenta=     (select OCRD.balance


from      OCRD


where      OCRD.cardtype = 'C'


and OCRD.cardcode = @Cliente)+@doctotal


  

SET @limitcredit=     (select ocrd.creditline


 

from      OCRD


WHERE   OCRD.CARDTYPE='C'


and OCRD.CARDCODE= @cliente)


  



IF (@sncondpago<>2 and (@condpago<>-1 and @condpago<>2 and @condpago<>9))


  

and ((@saldocuenta>=@limitcredit)or (@variable>=1)) and (@cliente<>'7777' and @cliente<>'8888')


    

BEGIN


   

SELECT 'TRUE'


    

END


ELSE


if(@sncondpago=-1 or @sncondpago=2) and (@condpago<>-1 and @condpago<>2 and @condpago<>9)


begin


select 'true'


end


ELSE


if(@cliente='7777' and (@sncondpago<>@condpago))


begin


select 'true'


end


ELSE


if (@cliente='8888' and (@sncondpago<>@condpago))


begin


select 'true'


end


en el modelo mande llamar el procedimiento y me mandaba el preliminar como dice sara. Es sencillo solo cambia las variables que deseas, si sabes transact sql va a ser mas sencillo.

y esta es la pagina del amigo

----- http://saptogo.blogspot.mx/2011/09/sap-to-go-sap-business-one-empezar.html

espero haberte ayudado un poco

former_member228470
Participant
0 Kudos

Hola Johanna

Yo trabaje esta situacion tanto en pedidos como facturas.  El escenario es que los vendedores crean los pedidos y si marcan algun precio por debajo del permitido, solo dos usuarios pueden crear el documento.

1- Cree un bloqueo en el TN para que cuando hubiese una linea por debajo del precio permitido mandara error.  En este caso el vendedor que es quien hace el pedido, grabe el documento como preliminar.

If

@Object_Type = '17' and @transaction_type in ('A')

Begin

If  (Select top 1 'True'  From ORDR T0,RDR1 T1

INNER JOIN OITW T2 ON T2.ItemCode=T1.ItemCode AND T1.WhsCode=T2.WhsCode

Where T0.DocEntry=@list_of_cols_val_tab_del and t0.UserSign not in ('5','7') and T1.DocEntry=@list_of_cols_val_tab_del

and DocType='I' and T1.TreeType !='I' AND T1.Price <((T2.AvgPrice*0.11)+T2.AvgPrice) )='True'

Begin

Set @error='-1'

Set @error_message='Artculo esta por debajo del Precio Permitido, GRABAR COMO PRELIMINAR. Linea '+

(Select top 1 Convert(Varchar,(LineNum+1))+' '+'Referencia: '+T1.ItemCode From ORDR T0,RDR1 T1

INNER JOIN OITW T2 ON T2.ItemCode=T1.ItemCode AND T1.WhsCode=T2.WhsCode

Where T0.DocEntry=@list_of_cols_val_tab_del and t0.UserSign not in ('5','7')  and T1.DocEntry=@list_of_cols_val_tab_del

and DocType='I'  and T1.TreeType !='I' AND T1.Price <((T2.AvgPrice*0.11)+T2.AvgPrice))

End

End

2- Luego cree una alerta para que apenas el vendedor creara el documento como preliminar, le llegara al usuario autorizador quien revisa los precios y de estar correcto lo crea.

Select T0.DocNum, T0.CardName, T0.DocDate, T0.DocTotal, t1.SlpName

From ODRF T0  inner join OSLP t1 on T0.SlpCode = t1.SlpCode

Where T0.DocStatus = 'O'

Espero sea de ayuda. Saludos

marco_ramirez
Active Contributor
0 Kudos

Estimada Johanna

Si usas el procedimiento de autorizaciones con una BF no tendrás el resultado esperado toda vez que la autorización se aplicaría a nivel de encabezado, en este caso, a nivel del total de la factura lo cual no es lo que deseas.

Este código lo debes usar en TN-SQL haz las modificaciones necesarias a tu necesidad y seguro te funcionará, a mi me funciona 100% además valida cada línea de la factura.

if @Object_type = '23' and  (@transaction_type = 'A' or @transaction_type = 'U')

begin

          Declare @margen2 int

          Declare cMargen2 cursor for

          select ((T0.Price-T3.AvgPrice)/T0.Price)*100

                                        from QUT1 T0 INNER JOIN OQUT T1 ON T0.DocEntry = T1.DocEntry 

                                                                       INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode

                                                                       INNER JOIN OITW T3 ON T2.ItemCode = T3.ItemCode

                                        where T0.DocEntry = @list_of_cols_val_tab_del and T1.U_AprobDocto = 'NO'

          Open cMargen2

          Fetch cMargen2 into @margen2

          while @@Fetch_Status = 0

                    begin

                    if @margen2 < 4.99

                              begin

                                        Set @error = 15

                                        Set @error_message = 'El margen de ventas es menor al permitido. Solcite autorización'

                                        Deallocate cMargen2

                                        goto Fin

--Fin debe colocarse al final del espacio de instrucciones antes de -- Select the return values que está al final

                              end

  Fetch cMargen2 into @margen2

                    end

close cMargen2

Deallocate cMargen2

end

Former Member
0 Kudos

me podrias regalar tu correo para hablar internamente por favor....

carlos_martnez
Explorer
0 Kudos

Hola Johanna,

Lo que tienes que la consulta que vaya en la autorizacion sea un Stored Procedure donde dentro alimente una tabla temporal con esa consulta que tienes.

Una vez con los datos en la tabla temporal, debes identificar lo que no este bajo el criterio que necesitas y llene una variable que despues compararas para validar si cumple con el requerimiento.

Espero que esto te ayude un poco.

Saludos,

Carlos Mtz

marco_ramirez
Active Contributor
0 Kudos

Olvidaba decirte que debes crear un campo de usuario U_AprobDocto con valores Si/No y por defecto = 'NO' para que en tu formulario puedas cambiarlo a Si cuando el TN te bloquee el crear el documento y esto te genere la autorización.

Espero ser claro, sino comentas

Saludos

Former Member
0 Kudos

Alguien tiene algun aporte por favor!!!1