Retornar un Array a un formulario.

58 views
Skip to first unread message

Matías Mancuello

unread,
May 21, 2017, 10:28:27 PM5/21/17
to publicesvfoxpro
Hola grupo. Estoy tratando de retornar un array a un formulario. Intenté pasarlo por valor, pero no hay caso, también traté de pasarlo por referencia, como es lo que recomeindan, pero tampoco pude. Alguna sugerencia con este tema?  

Desde ya, gracias.. saludos!

Carlos Miguel FARIAS

unread,
May 22, 2017, 7:07:26 AM5/22/17
to Grupo Fox
Un array solo puede pasarse por referencia, si lo haces por valor solo pasa el primer valor.
Puedes hacerlo para todos los casos con
SET UDFPARMS TO REFERENCE
o puede hacerlo en casos específicos anteponiendo un @ al parámetro que quieres pasar por referencia.
En mi caso, configuraba para trabajar todo por referencia porque con la debida prolijidad de programación es mucho más rápido pasar parámetros por referencia que por valor.
 Al pasar por valor, la función/método/procedimiento receptor debe:
a) "crear" variables locales (o privadas) para manejar los valores pasados.
b) copiar los datos
c) crear referencias a esos datos (que el código son el nombre de los parámetros)
Cuando pasas por referencia, solo se debe asignar nuevas referencias a los lugares de los datos.
Tiene la ventaja además que se pueden devolver datos cambiados al punto de llamada.
El return solo permite devolver un valor (u objeto).
Usando parámetros por referencia, retornan valores vía parámetros.
Eso ya era posible con FoxDOS
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe, aunque sea por referencia

Matías Mancuello

unread,
May 24, 2017, 9:01:39 AM5/24/17
to publicesvfoxpro
Que tal Carlos. Gracias por tu respuesta. Te comento que puede pasar los datos del array dentro de un objeto. 

ADDPROPERTY(THISFORM.oDatosPresup, "aItems[n,7]", '')

SELECT consul_items
GO TOP 
i = 1 
DO WHILE !EOF()
THISFORM.oDatosPresup.aItems[i,1] = consul_items.codigo
THISFORM.oDatosPresup.aItems[i,2] = consul_items.producto
THISFORM.oDatosPresup.aItems[i,3] = consul_items.cant
THISFORM.oDatosPresup.aItems[i,4] = consul_items.punit
THISFORM.oDatosPresup.aItems[i,5] = consul_items.subtot
THISFORM.oDatosPresup.aItems[i,6] = consul_items.linea
THISFORM.oDatosPresup.aItems[i,7] = consul_items.presenta
i = i + 1
SKIP
ENDDO



RETURN THISFORM.oDatosPresup

Matías Mancuello

unread,
May 24, 2017, 9:03:56 AM5/24/17
to publicesvfoxpro
Primero declaré el array dentro del objeto, y luego lo cargue con los datos. De esa manera pasa el array completo, y no solo el primer valor. 

Muchas gracias nuevamente. Saludos!
Reply all
Reply to author
Forward
0 new messages