Estoy empezando con Stored Procedures (de hecho, estos son los primeros que hago), y me encuentro en dificultades... (pueden haber visto los post en el foro de softvelocity)
El tema es el siguiente...
(Uso C63 y MSSQL Express 2005)
Tengo que hacer un SP para actualizar STOCK. Tengo que recorrer la tabla MovimientosStock por Fecha y Hora, para un articulo en particular.
Durante la recorrida, calcular y actualizar el campo stock, en funcion del tipo de concepto que corresponda al movimiento (E/S)
El SP que hice, si lo invoco como Query desde el motor, anda perfecto.
El problema se dá cuando lo llamo desde una APP clarion. EN este caso, solo recorre unos pocos registros (actualizandolos), e ignora el resto.
Adjunto el SP:
Código: Seleccionar todo
USE [Pierabella]
GO
/****** Objeto: StoredProcedure [dbo].[RecalculoStockArticulo] Fecha de la secuencia de comandos: 10/19/2011 17:55:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: RecalculoStockArticulo
-- =============================================
ALTER PROCEDURE [dbo].[RecalculoStockArticulo]
@CodArticulo AS Int
AS
BEGIN
SET NOCOUNT ON
DECLARE @xStock_Normal AS Decimal(13,2)
DECLARE @Resultado Varchar(10)
DECLARE @Error Int
DECLARE @Contador Int
DECLARE @ErrorVar INT
DECLARE @RowCountVar INT
SET @Resultado = 'Error'
set @xStock_Normal = 0
set @Contador = 0
set @Error = 0
DELETE FROM StupidTable
UPDATE StupidTable SET C1 = '--', C2 = '--', C3 = '--';
UPDATE MovimientosStock SET Stock_Normal = 0 WHERE Cod_Articulo = @CodArticulo;
DECLARE cursor1 CURSOR LOCAL SCROLL_LOCKS FOR
SELECT Cod_Concepto,Cantidad_Un,Stock_Normal
FROM MovimientosStock Where Cod_Articulo = @CodArticulo AND Devolucion = 0 Order By Cod_Articulo, Fecha, Hora FOR UPDATE;
OPEN cursor1;
WHILE (@Error = 0)
BEGIN
FETCH NEXT FROM cursor1 ;
IF (@@fetch_status = 0)
BEGIN
UPDATE MovimientosStock SET Stock_Normal = dbo.CalculaStock(@xStock_Normal,Cantidad_Un,(SELECT TipoConcepto FROM ConceptosMovStock WHERE ConceptosMovStock.Cod_Concepto = MovimientosStock.Cod_Concepto)) WHERE CURRENT OF cursor1;
UPDATE MovimientosStock SET @xStock_Normal = Stock_Normal WHERE CURRENT OF cursor1;
SET @Contador = @Contador + 1;
set @Error = @@Error;
IF @Error <> 0
BEGIN
BREAK;
END
END
ELSE
BEGIN
BREAK;
END
END
CLOSE cursor1;
DEALLOCATE cursor1;
UPDATE Articulos SET Stock_Unidades = @xStock_Normal WHERE Cod_Articulo = @CodArticulo;
If @Error = 0
begin
Set @Resultado = 'Ok';
END
UPDATE StupidTable SET C1 = @Resultado, C2 = @Error, C3 = @Contador;
Return @Contador;
END
Código: Seleccionar todo
DO OpenFiles
!
LOC:Cod_Articulo = Codigo
StupidTable{PROP:SQL} = 'CALL RecalculoStockArticulo(' & LOC:Cod_Articulo & ')'
if errorcode()=90 then message(fileerror()).
next(StupidTable)
IF ErrorCode()
Message('MovimientosStock (SQL) - Error al Correr el Query = ' & FileError() & ' - ' & ErrorCode())
DebugOut(StupidTable{PROP:SQL})
ELSE
Message(SQL:C1)
END
!
DO CloseFiles
Agradezco cualquier ayuda!!!
Muchas gracias..
Saludos...