Me pidieron realizara una autorización para presupuesto. La cosa va así:
Si al momento de hacer una orden de compra, las cuentas contables afectada estan en cierto rango (se tienen cuentas por área de la empresa), y el monto provoca que el presupuesto se pase entre 80 y 90% debe solicitar autorización al líder de su área.
Si ya es del 90% para arríba debe llevar autorización por el director de Finanzas…
No tengo problemas en las personas, quien autoriza y quien no…
Mi problema está en el Query.
¿Como puedo saber si el asiento contable de un pedido de compra (que no genera asiento contable alguno), va a causar que el presupuesto se sobrepase más de un cierto porcentaje en ese mes?
EDIT: En parametrizaciones generales - presupuesto solo te lanza advertencia o te bloquea el presupuesto si ya te pasaste por 1 peso. La idea no es un mensaje de advertencia o bloqueo, sino que cuando ya se tenga cierto % el documento pida autorizaciones por área.
Podrías usar la herramienta de “proceso de aprobación”, con la cual podes armar una query que relacione el presupuesto con la orden de compra para poder observar el porcentaje en que vario, para luego decidir si entra al modelo de autorización o no.
Por el momento tengo este query que estoy probando. Es muy General aún, debo personalizarlo más, por ejemplo, colocarle un grupo de cuentas contables, si son las mismas, y sobrepasa por un porcentaje entre X% y Y% debe ir una autorización a un área.
Aún estoy armando el query, pero como tengo mucho que no trabajo con Cursores. por si alguien me puede ayudar un poco xD
DECLARE @CUENTA DECIMAL
DECLARE @PRESUPUESTO DECIMAL
DECLARE @SALDO DECIMAL
DECLARE @LINEA DECIMAL
-- creando el cursor
declare cuentas cursor SCROLL
for
-- consulta (aquí colocar mejor las condiciones y cuentas)
select t0.AcctCode[cuenta], round(sum(t0.LineTotal),0)[linea], round(t1.DebLTotal,0)[presupuesto], tq.saldo[Saldo]
from POR1 t0
LEFT OUTER JOIN BGT1 t1 on t0.AcctCode = t1.AcctCode and t1.Line_ID +1 = month(getdate())
LEFT OUTER JOIN (select t2.ACCOUNT, round(sum(t2.Debit),0) saldo
from JDT1 t2
where DATEPART (MONTH,t2.taxdate) = month(getdate()) and DATEPART (YEAR,T2.TaxDate) = '2020'
group by t2.Account) Tq ON t0.AcctCode = tq.Account
where t0.DocEntry = $[$8.0.0]
group by t0.AcctCode, T1.DebLTotal, T1.AcctCode, tq.saldo
-- abrir cursor
open cuentas
-- navega linea por linea
fetch NEXT FROM CUENTAS INTO @CUENTA,@LINEA, @PRESUPUESTO, @SALDO
WHILE (@@FETCH_STATUS = '0')
BEGIN
SELECT 'TRUE'
WHERE (@LINEA+@SALDO) > @PRESUPUESTO --Modificar para que sea % aquí
fetch NEXT FROM CUENTAS INTO @CUENTA,@LINEA, @PRESUPUESTO, @SALDO
END
-- cerrar cursor
close cuentas
deallocate cuentas
Siento que le estoy perdiendo al validar de la JDT1 todos los movimientos del mes… pero es que si lo hago contra la OBGT para saber lo que arroja ocupado del mes, y no tiene presupuesto (no todas las cuentas tienen presupuesto), entonces no me toma bien la consulta, llega a arrojar error, y con esta no me está arrojando tanto error.
En realidad no necesitas usar un cursos en un query de proceso de autorización, acordate que es un query especial que hace referencia a variables que aun no se guardan en la DB. cuando tu query hace referencia a una variable de la grilla, automáticamente repetirá el query por cada linea, y si alguna devuelve TRUE, ahí se inicia el proceso de autorización.