Optimizar Codigo
Publicado por andres (1 intervención) el 19/10/2007 16:14:22
Necesito calcular la utilidad de un trabajo para eso tengo que validar de acuerdo a 4 tablas los procesos para ir calculando la utilidad, hice en sql un Cursor pero esto no me optimiza la depuracion del proyecto en .Net.
alguien podria ayudarme a optimizar el codigo es el siguiente:
create Procedure UtilidadCalculadaSP
@pagoutil decimal(18,2),
@venta decimal(18,2),
@comisionVend decimal(18,2),
@costosutil decimal(18,2),
@Codproducto int
as
declare @pago decimal(18,2),@costo decimal(18,4),@comision decimal(18,2),@idcarta int,@codclientecarta int,@codcliente int,@utilidadcliente int,
@valorminpago int,@valormaxpago int,@valormincosto decimal(18,2),@valormaxcosto decimal(18,2),@idcosto int,@idpago int,
@idprod int,@productos decimal(18,2),@comisionvendedor decimal(18,2),@Comutil decimal(18,2),@totalcotiza decimal(18,2),@utilidad decimal(18,2)
---------------------- Calcula la utilidad segun promedio de pago-------------------------
declare cat_cursor cursor for
select idpromediopago from grupo01
open cat_cursor
fetch next from cat_cursor
into @idpago
WHILE @@FETCH_STATUS = 0
BEGIN
set @valorminpago=(select valorminimo from grupo01 where idpromediopago=@idpago)
set @valormaxpago=(select valormaximo from grupo01 where idpromediopago=@idpago)
if @idpago=6
begin
IF @pagoutil>=@valorminpago
begin
set @pago=(select resultado from grupo01 where idpromediopago=@idpago)
end
end
else
begin
if @pagoutil>=@valorminpago and @pagoutil<=@valormaxpago
begin
set @pago=(select resultado from grupo01 where idpromediopago=@idpago)
end
end
FETCH NEXT FROM Cat_cursor
INTO @idpago
End
CLOSE cat_cursor
DEALLOCATE cat_cursor
---------------------- Calcula utilidad segun el producto--------------------
declare cat_cursor2 cursor for
select codproducto from grupo02
open cat_cursor2
fetch next from cat_cursor2
into @idprod
WHILE @@FETCH_STATUS = 0
BEGIN
if @codproducto=@idprod
begin
set @productos=(select resultado from grupo02 where codproducto=@idprod)
end
FETCH NEXT FROM Cat_cursor2
INTO @idprod
End
CLOSE cat_cursor2
DEALLOCATE cat_cursor2
--------------------- Calcular utilidad segun el monto de costos---------------------------
declare cat_cursor3 cursor for
select idmonto from grupo03
open cat_cursor3
fetch next from cat_cursor3
into @idcosto
WHILE @@FETCH_STATUS = 0
BEGIN
set @valormincosto=(select valorminimo from grupo03 where idmonto=@idcosto)
set @valormaxcosto=(select valormaximo from grupo03 where idmonto=@idcosto)
if @idcosto=9
begin
if @venta>=@valormincosto
begin
set @costo=(select resultado from grupo03 where idmonto=@idcosto)
end
end
else
begin
if @venta>=@valormincosto and @venta<=@valormaxcosto
begin
set @costo=(select resultado from grupo03 where idmonto=@idcosto)
end
end
FETCH NEXT FROM Cat_cursor3
INTO @idcosto
End
CLOSE cat_cursor3
DEALLOCATE cat_cursor3
------------------------ Calcular utlidad segun comision vendedor-------------------------------------
declare cat_cursor4 cursor for
select comisionvendedor from grupo04
open cat_cursor4
fetch next from cat_cursor4
into @comisionvendedor
WHILE @@FETCH_STATUS = 0
BEGIN
if @comisionvend=@comisionvendedor
begin
set @comision=(select resultado from grupo04 where comisionvendedor=@comisionvendedor)
end
FETCH NEXT FROM Cat_cursor4
INTO @comisionvendedor
End
CLOSE cat_cursor4
DEALLOCATE cat_cursor4
if @pago is null
begin
set @pago=0
end
if @costo is null
begin
set @costo=0
end
if @productos is null
begin
set @productos=0
end
if @comision is null
begin
set @comision=0
end
set @utilidad=(@pago+@costo+@comision+@productos)
if @utilidad is null or @utilidad=0
begin
set @utilidad=25
end
select @utilidad
alguien podria ayudarme a optimizar el codigo es el siguiente:
create Procedure UtilidadCalculadaSP
@pagoutil decimal(18,2),
@venta decimal(18,2),
@comisionVend decimal(18,2),
@costosutil decimal(18,2),
@Codproducto int
as
declare @pago decimal(18,2),@costo decimal(18,4),@comision decimal(18,2),@idcarta int,@codclientecarta int,@codcliente int,@utilidadcliente int,
@valorminpago int,@valormaxpago int,@valormincosto decimal(18,2),@valormaxcosto decimal(18,2),@idcosto int,@idpago int,
@idprod int,@productos decimal(18,2),@comisionvendedor decimal(18,2),@Comutil decimal(18,2),@totalcotiza decimal(18,2),@utilidad decimal(18,2)
---------------------- Calcula la utilidad segun promedio de pago-------------------------
declare cat_cursor cursor for
select idpromediopago from grupo01
open cat_cursor
fetch next from cat_cursor
into @idpago
WHILE @@FETCH_STATUS = 0
BEGIN
set @valorminpago=(select valorminimo from grupo01 where idpromediopago=@idpago)
set @valormaxpago=(select valormaximo from grupo01 where idpromediopago=@idpago)
if @idpago=6
begin
IF @pagoutil>=@valorminpago
begin
set @pago=(select resultado from grupo01 where idpromediopago=@idpago)
end
end
else
begin
if @pagoutil>=@valorminpago and @pagoutil<=@valormaxpago
begin
set @pago=(select resultado from grupo01 where idpromediopago=@idpago)
end
end
FETCH NEXT FROM Cat_cursor
INTO @idpago
End
CLOSE cat_cursor
DEALLOCATE cat_cursor
---------------------- Calcula utilidad segun el producto--------------------
declare cat_cursor2 cursor for
select codproducto from grupo02
open cat_cursor2
fetch next from cat_cursor2
into @idprod
WHILE @@FETCH_STATUS = 0
BEGIN
if @codproducto=@idprod
begin
set @productos=(select resultado from grupo02 where codproducto=@idprod)
end
FETCH NEXT FROM Cat_cursor2
INTO @idprod
End
CLOSE cat_cursor2
DEALLOCATE cat_cursor2
--------------------- Calcular utilidad segun el monto de costos---------------------------
declare cat_cursor3 cursor for
select idmonto from grupo03
open cat_cursor3
fetch next from cat_cursor3
into @idcosto
WHILE @@FETCH_STATUS = 0
BEGIN
set @valormincosto=(select valorminimo from grupo03 where idmonto=@idcosto)
set @valormaxcosto=(select valormaximo from grupo03 where idmonto=@idcosto)
if @idcosto=9
begin
if @venta>=@valormincosto
begin
set @costo=(select resultado from grupo03 where idmonto=@idcosto)
end
end
else
begin
if @venta>=@valormincosto and @venta<=@valormaxcosto
begin
set @costo=(select resultado from grupo03 where idmonto=@idcosto)
end
end
FETCH NEXT FROM Cat_cursor3
INTO @idcosto
End
CLOSE cat_cursor3
DEALLOCATE cat_cursor3
------------------------ Calcular utlidad segun comision vendedor-------------------------------------
declare cat_cursor4 cursor for
select comisionvendedor from grupo04
open cat_cursor4
fetch next from cat_cursor4
into @comisionvendedor
WHILE @@FETCH_STATUS = 0
BEGIN
if @comisionvend=@comisionvendedor
begin
set @comision=(select resultado from grupo04 where comisionvendedor=@comisionvendedor)
end
FETCH NEXT FROM Cat_cursor4
INTO @comisionvendedor
End
CLOSE cat_cursor4
DEALLOCATE cat_cursor4
if @pago is null
begin
set @pago=0
end
if @costo is null
begin
set @costo=0
end
if @productos is null
begin
set @productos=0
end
if @comision is null
begin
set @comision=0
end
set @utilidad=(@pago+@costo+@comision+@productos)
if @utilidad is null or @utilidad=0
begin
set @utilidad=25
end
select @utilidad
Valora esta pregunta


0