on 03-14-2012 9:12 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Alguien tiene algun aporte por favor!!!1
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.