Página 1 de 2
Source con retorno de más de un valor
Publicado: Vie Feb 11, 2011 11:09 pm
por danielnelsonrivarola
Estimados, necesito retornar más de un valor en mi source, como se hace para recuperarlo
Retorno = SourceMio(Par1,Par2)
Desde ya muchas gracias
Re: Source con retorno de más de un valor
Publicado: Sab Feb 12, 2011 7:51 am
por LeoPalomares
Hola Daniel,
No podés retornar más de un valor desde una función pero lo que si podés hacer es pasarle variables por referencia para que tu función las pueda actualizar.
Explicaciones:
Hay dos métodos de parametrización de variables en las funciones y/o procedimientos, por valor o por referencia (esto no es exclusivo de Clarion). Cuando pasás un parámetro por valor la función está recibiendo una copia de lo que se le haya pasado mientras que cuando pasás un parámetro por referencia la función está recibiendo un "puntero" a la dirección de memoria en donde reside la variable que se le está pasando en la llamada.
Ejemplo:
Loc:ApeNom CSTRING(101)
Loc:FechaAlta LONG
CODE
IF InfoCliente(10, Loc:ApeNom, Loc:FechaAlta) = True
!Error al recuperar la info del cliente
ELSE
DISPLAY()
END
InfoCliente(LONG pIdCliente, *CSTRING pOutApeNom, *LONG pOutFechaAlta),BYTE
Loc:Error BYTE
CODE
Loc:Error = True
CLEAR(pOutApeNom)
CLEAR(pOutFechaAlta)
IF pIdCliente
DO OpenTables
Cli:IdCliente = pIdCliente
GET(Clientes, Cli:PKClientes)
IF ERRORCODE()
MESSAGE('Error bla,bla,bla')
ELSE
Loc:Error = False
pOutApeNom = Cli:Apellido & ', ' & Cli:Nombre
pOutFechaAlta = Cli:FechaAlta
END
DO CloseTables
END
RETURN(Loc:Error)
Saludos!!!
Leo Palomares
Re: Source con retorno de más de un valor
Publicado: Sab Feb 12, 2011 7:52 am
por LeoPalomares
Hey!!! yo había indentado todo el código del ejemplo con espacios!!!
Cómo hay que hacer para indentar y que lo respete? alguien sabe?
Saludos!!!
Leo Palomares
Re: Source con retorno de más de un valor
Publicado: Sab Feb 12, 2011 8:23 am
por Mauricio
Averiguo sobre la indentación del código. Aún tengo muchos items por mejorar, mañana creo que actualizaré la versión del phpBB y se van a encontrar con ciertos cambios (si es que todo funciona
).
Saludos.
Re: Source con retorno de más de un valor
Publicado: Sab Feb 12, 2011 11:58 pm
por danielnelsonrivarola
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.
Re: Source con retorno de más de un valor
Publicado: Dom Feb 13, 2011 8:40 am
por Mauricio
Las variables que estás pasando como parámetros son del mismo tipo?
Podés postear la función así la vemos?
Re: Source con retorno de más de un valor
Publicado: Lun Feb 14, 2011 12:40 am
por danielnelsonrivarola
Mauricio, gracias por responder!
Las variables *REAL son todas DECIMAL.
Este es el código que llama la función, el cual da error
CalculoStock ROUTINE
if (REC:Renspa and REC:Renspa <> Loc:RenspaAnt) or |
(REC:CategoriaOrigen and REC:CategoriaOrigen <> Loc:CatOriAnt)
Loc:RenspaAnt = REC:Renspa
Loc:CatOriAnt = REC:CategoriaOrigen
Loc:StockIni = 0
Loc:Ingresos = 0
Loc:Egresos = 0
Loc:Stock = 0
! Loc:Stock = SourceStockHacienda(REC:Recate,REC:Renspa,REC:CategoriaOrigen)
if SourceStockHacienda(REC:Recate,REC:Renspa,REC:CategoriaOrigen,Loc:StockIni,Loc:Ingresos,Loc:Egresos,Loc:Stock)
Message('Error Cálculo de Stock','Error de Cálculo',icon:exclamation)
end
! Loc:StockIni = Glo:StockIni
! Loc:Ingresos = Glo:Ingresos
! Loc:Egresos = Glo:Egresos
display
end
Además te adjunto el TXA de la función
Gracias!
Re: Source con retorno de más de un valor
Publicado: Lun Feb 14, 2011 6:51 am
por LeoPalomares
Ya dijiste el problema vos mismo en la segunda linea.
O bien definis el parametro como *DECIMAL o, sino, definis las variables locales como REAL.
Cuando pasás variables por referencia siempre debés respetar los tipos.
Saludos!!!
Leo Palomares
Re: Source con retorno de más de un valor
Publicado: Lun Feb 14, 2011 4:23 pm
por danielnelsonrivarola
Leo, creía que lo tomaba igual, pq como DECIMAL no lo acepta en el prototype y en su lugar REAL funciona, asumí un compatibilidad erronea. Gracias, aprendo y lo pruebo.
Re: Source con retorno de más de un valor
Publicado: Mar Feb 15, 2011 5:25 am
por dlopez
danielnelsonrivarola escribió:Leo, creía que lo tomaba igual, pq como DECIMAL no lo acepta en el prototype y en su lugar REAL funciona, asumí un compatibilidad erronea. Gracias, aprendo y lo pruebo.
Tengo entendido que en el prototype "se aceptan" decimales pasados por referencia (*decimal), que es lo que justamente estás necesitando.