Página 2 de 2

Re: Source con retorno de más de un valor

Publicado: Mar Feb 15, 2011 5:45 am
por dlopez
danielnelsonrivarola escribió:Leo, gracias por responder.
En el Prototype del source pongo
(ULONG,ULONG,ULONG,*REAL,*REAL,*REAL,*REAL),BYTE

al llamar la función

if SourceStockHacienda(Recate,Renspa,CategoriaOrigen,StockIni,Ingresos,Egresos,Stock)
message('Error al Calcular Stock|Verifique y reintente',icon:exclamation)
end

y al compilar me da el error
No matching prototype available, en la linea del if, revisé todo y no encuentro el error.
Si tenes muchos parametros puedes usar un group y pasarlo por referencia. Es mas complejo pero ademas de agrupar una serie de datos en un solo parametro, tiene como ventaja adicional el no tener limites en la cantidad de datos pasados.
Además, si mas adelante quieres aumentar la cantidad de parametros o valores devueltos solo debes agregarlos al group y recompilar.

Ej:

Código: Seleccionar todo

! declaramos un  group "tipo" que usaremos para pasar los parámetros.
! tipicamente se declara en global data

misParametros_tipo    GROUP,TYPE,pre(misParamTipo)
Param1                    ULONG
Param2                    ULONG
Param3                    DECIMAL
Param4                    DECIMAL
                      END !GROUP

! en el prototype del source declaramos:

miProcedure (*misParametros_tipo par)

! dentro del source usas el group "par".  Ejemplo:

  if par.Param1  then 
     par.param3 = 10
     par.Param4 =  11
  end
  ......

!-----------------
! para llamar al source debes crear un group local del mismo tipo que misparametros_tipo
!--------------------
  DATA
prm   group(misParametros_tipo),pre(p)
      end

   CODE

  
     prm.Param1 = 4
     prm.param2 = 5
 
     !llamamos al procedure pasando el grupo local

     miProcedure(prm)

     ! al volver ya tienes los valores retornados en prm

      message(prm.param3 & ' ' & prm.param4)

 
Saludos