como enviar datos del formulario dos al formulario uno

852 views
Skip to first unread message

magdalena concepcion cañete fretes

unread,
Feb 17, 2011, 11:06:41 AM2/17/11
to Comunidad de Visual Foxpro en Español
hola amigos....no se como hacer esto, tengo un formulario llamado
movimiento de caja, en la cual, tengo un detalle de recibos, la cual
cargo los datos llamando al formulario de recibos que seria el
formulario dos, lo que quiero hacer es lo sgte, al abrir el formulario
recibos selecciono los datos del recibo, el cual quiero enviarlos en
el formulario de movimientos de caja que seria el formulario uno y no
se como hacerlo....ya pobre con lparameters pero no sale nada o
simplemente no estoy configurando bien....desde ya muchas gracias....

Daniel Sánchez

unread,
Feb 17, 2011, 11:32:00 AM2/17/11
to publice...@googlegroups.com
Lo que podrias hacer es enviar en el parametro el objeto del formulario 1 al 2

al llamar al formulario 2 pondrias así

do form miformulario2 with thisform

en el ini del formulario 2

lparameter oMiFormulario as object

* creas una propiedad para que mantengas la referencia de la variable objeto recibida ya que la variable recibida oMiFormulario es local y solo existe mientras se ejecuta el metodo ini despues deja de existir para evitar eso lo igualas  a una propiedad creada en el formulario

thisform.oMiformulario=oMiFormulario

ya estando en la propiedad solo haces referencia al objeto y su contenido como si fuera un thisform así por ejemplo para acceder al text1 del formulario 1 tendrias que digitarlo asi

nvalor=thisform.oMiformulario.text1.value

asi para cada objeto que tengas en el formulario 1

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Fcocibaeno

unread,
Feb 17, 2011, 11:50:17 AM2/17/11
to Comunidad de Visual Foxpro en Español
En el formulario1
DO form2.scx TO _numero_de_recibo

En el formulario2, en el evento Unload
RETURN recibos.numero


Ojala y sea eso, si no es, favor enviarme la imagen de los formularios
para tener una mejor idea.

!suerte!

Irlandes 1960

unread,
Feb 17, 2011, 12:29:11 PM2/17/11
to publice...@googlegroups.com
Hola Magdalena. Se me ocurren dos caminos, depende de cuan complejo sea lo que queres pasar de un lado para el otro.
 
Si queres que te devuelvan el detalle de recibos, esto suena a una tabla de varios registros, podrias ponerle al 2º formulario que use el entorno de datos predeterminado, propiedad THISFORM.DATASESSION = 1 (el valor por omision es sesion privada "2")
De esa forma el formulario dependiente toma el entorno de datos del formulario madre, le carga lo que quieras en una tabla auxiliar ya creada, y al volver al formulario madre, simplemente esta cargado en la tabla, y lo usas.
 
En cambio si hablamos de un dato solo, al invocar al formulario secundario hacelo con
do form secundario to lcrespuesta
El formulario secundario declarado como Modal THISFORM.WINDOWTYPE = 1 (el valor default es 0) y la respuesta la devuelve en el evento unload con la instruccion RETURN LCRESPUESTA
Suerte, Jorge

Maggi Fretes

unread,
Feb 17, 2011, 12:54:00 PM2/17/11
to publice...@googlegroups.com
uyyyyyy amigos...no me sale ....aca les envio las imagen de movimiento de caja, desde la cual llamo al formulario recibos, de la cual quiero los datos para el formulario movimiento de caja...Llorón
Doc1.docx

magdalena concepcion cañete fretes

unread,
Feb 17, 2011, 1:27:07 PM2/17/11
to Comunidad de Visual Foxpro en Español
lo que quiero traer de mi formilario recibo es, el nro de recibo que
esta en txt5, el nombre del cliente que esta txt6, monto del recibo q
esta en txt15 y ya probe con return pero me trae en blanco la variable
y lo que es nro me lo trae pero en forma de caracter....

Irlandes 1960

unread,
Feb 17, 2011, 1:34:55 PM2/17/11
to publice...@googlegroups.com
No funcionara, pero está muy bonito.
¿que es lo que tiene que volver del formulario de recibos? En las imagenes que mandas, esta todo como vacio.
En el ida y vuelta de un lado para el otro, fijate que si estas usando el tema de compartir el entorno de datos entre ambos formularios, disparar un refresh() cuando volves.
Otra receta, es que en casos como el que mostras, yo en realidad no uso dos formularios, sino que en realidad es el mismo, usando un gran pageframe sin los tabs (tabs = .f.) donde en las diferentes paginas ubico las diferentes funciones que se deben hacer.
Un ingreso de cobranzas o una emision de ordenes de pago, pueden a llegar a tener 15 o 17 paginas para ir y venir haciendo las locuras que el cliente quiere (ya se sabe, en argentina estamos todos un poco locos)
Es una solucion muy practica para estos casos complejos, ya que no hay tema de datos a compartir, y usas facilmente propiedades del form para controlar cosas, por ejemplo thisform.totalfactura, thisform.totalefectivo, thisform.totalcartera que te van dando los importes manejados en cada solapa como si fuera un form independiente.
Y la barra de botones de cada "subpantalla" cambia desde el evento activate de la pagina que se trate.
Incluso la ventaja adicional de que el pasaje de uno al otro es mas rápido, ya que todo esta inicializado y creado.
Volviendo a tu caso especifico (me acaba de aparecer tu aclaracion) la devolucion tene presente que es un solo campo, asi que lo tenes que "armar" antes de devolverlo en el unload, algo asi como
 
lcrespuesta = str(thisform.txt5.value)+thisform.txt6+str(thisform.txt15,10,2)
return lcrespuesta
 
al volver al formulario madre, esto te queda en una variable que tenes que "desarmar" para obtener cada parcial
 
do form recibo to lcacavuelve   && que es el comando para llamar al otro formulario
 
lnnrorec = val(substr(lcacacuelve,10))
lccliente = substr(lcacavuelve,11,50)   && o lo que mida el nombre del cliente
lnimporte = val(right(lcacacueve,10))
 
Espero que te sirvan estas ideas
Jorge

magdalena concepcion cañete fretes

unread,
Feb 17, 2011, 1:40:45 PM2/17/11
to Comunidad de Visual Foxpro en Español
gracias Irlandes jijijiji,... es que estoy probando para saber si
funciona todo correctamente por lo menos cuando yo pruebo...encontre
una solucion mas facil....declare una variable publica dentro de mi
programa principal y cada vez que habro mi formulario recibos le
asigno el valor a mi variable publica y cuando quiero estirar ese
valor lo llamo dentro de mi movimiento de caja.....graciassssss
amiguitooooo.......:)

Irlandes 1960

unread,
Feb 17, 2011, 2:50:00 PM2/17/11
to publice...@googlegroups.com
Cierto, la variable publica funciona, pero cuidado, que la variable publica es justamente eso, publica.
Si llamas dos o mas veces el mismo formulario desde la misma sesion del exe, podes tener cambios inesperados de valores de esa variable publica, y no sabes realmente en donde estas parado.
En general yo uso las variables publicas para ciertas cosas que necesito por todos lados, pero que solo se definen al entrar al sistema, por ejemplo el nombre del usuario.
Recorda siempre el viejo adagio de ese gran desarrollador árabe, Bolud-el-cotur, que dice
"La imaginacion del usuario es infinita, como las arenas del desierto, y toda posibilidad que no evites expresamente, mas temprano que tarde ocurrira"
Suerte y exitos
Jorge

Fcocibaeno

unread,
Feb 17, 2011, 3:14:12 PM2/17/11
to Comunidad de Visual Foxpro en Español
Yo uso el mismo procedimiento con unos pacientes, o sea, quiero traer
el codigo de un paciente, nombres y direccion... las cuales las
presento en un formulario aparte. El codigo es el que sigue..

El el formulario "maestro" en el evento keypress()
*************************************************
Lparameters nKeyCode, nShiftAltCtrl
If nKeyCode = -4 && si presiona la tecla F5
_vienedebuscar = .T.
Do Form frm/buscapacientes To _recomendador && _recomendador se va a
quedar con el codigo del paciente que es lo q necesito
This.Value = _recomendador && asigno el valor retornado al text1
This.Parent.nomrecomendado.Value = Alltrim(c_pacientes.nombres)+"
"+Alltrim(c_pacientes.apellidos) && el nombre y apellidos del
paciente los devuelvo a otros campos
Endif
*******************************************
En el formulario "hijo" en el evento UNLOAD
RETURN c_pacientes.codigo

Devuelvo el codigo de la tabla de pacientes. Como el Grid esta tomando
los datos de la tabla, cada vez que haces clic en un registro del
grid, se mueve el puntero a ese registro en el archivo.

Espero te sirva...
!suerte!


Maggi Fretes

unread,
Feb 17, 2011, 9:36:59 PM2/17/11
to publice...@googlegroups.com
Si tienes razón Irlandes....tienes muchas razón....pero yo hice de esa forma por los formulario solo los dejo abrir una sola vez....y solo voy a utilizar esas variables en un solo formulario....no se si este bien...pero si no me conviene mejor entonces como me dices lo hago como me lo planteaste.....gracias Irlandes



Date: Thu, 17 Feb 2011 16:50:00 -0300
Subject: Re: [vfp] Re: como enviar datos del formulario dos al formulario uno
From: irland...@gmail.com
To: publice...@googlegroups.com

magdalena concepcion cañete fretes

unread,
Feb 18, 2011, 1:20:18 PM2/18/11
to Comunidad de Visual Foxpro en Español
bueno amigos de nuevo con mi tema,como dije anteriormente solucione el
inconveniente que tenia utilizando variables publicas....pero como no
es tan seguro entonces quiero utilizar otros metodos mas seguros...lo
que quiero saber es si es posible traer datos sin tener que poner mi
formulario recibos en MODAL, la cual utilizo para traer datos de ella
en mi formulario movimiento de caja.....porfita si alguien es tan
amable de guiarme en esto....gracias

Jairo Miranda

unread,
Feb 18, 2011, 5:19:28 PM2/18/11
to publice...@googlegroups.com

HE visto bastantes comentarios sobre esto , asi que muestro lo que yo hago.

*verifico las vbles publicas

  release  Wid,  Wfactura,   wprecio

  public  Wid,  Wfactura,   wprecio

 

2 recojo los datos del formulario padre

 

      WITH thisformset.PROFORMA.Gframes1.Page1

               Wid = .ID1.Value  && Consecutivo

               Wfactura = .Num_ped1.value   && No de la factura

               wprecio =  .TxtPrecio.Value  && precio del cliente

                           

      ENDWITH

 

Corro el formulario hijo envieandole los parametros

 

      DO FORM "forms\Ventas6P.scx" WITH Wid, Wfactura, wprecio

 

Formulario hijo en el Init

 

Parameters   m.wid, m.wfactura, m.wprecio

 

tengo los datos del padre en el hijo .

 

Espero sirva

Daniel Sánchez

unread,
Feb 18, 2011, 9:11:08 PM2/18/11
to publice...@googlegroups.com
lo que te recomendaria seria usar una variable custom algo como esto le indicarias en tu form 1 antes de ir al form2

ovariable=createobject("custom")


ovariable.addproperty("Retorno1",0)
ovariable.addproperty("Retorno2","")
...
asi sucesivamente de acuerdo a los datos que necesites obtener del form2

do form miform2 with ovariable
*/para que funcione sin problema debo suponer que el miform2 es modal
cuando regresa ya tienes actualizado los datos de la variable ovariable y 
tomas los datos que deseas para visualizarlos o procesar o lo que desees hacer con ellos.


en tu form2 en el ini 

lparameters oVariable as object

thisform.ovariable=ovariable

debes crear una propiedad ovariable inicializada en .NULL. y lo asignas cuando entras el valor del parametro a la propiedad del formulario (puedes emplear en nombre de la variable o propiedad cualquier nombre que deseas) porque la variable del parametro del ini solo existe en ese metodo sales del metodo adios variable asi que de esa forma queda existiendo, ademas como es un objeto el tipo de paso es por referencia y no por valor (en el caso por referencia no pasa el valor de la variable si no la referencia de la direccion de memoria donde se ubica esa variable, eso quiere decir que cualquier dato que actualices en la variable objeto se reflejara en el origen).

En tu boton salir del form2 pones los datos que deseas que retorno en tu objeto

thisform.retorno1=thisform.text1.value
thisform.retorno2=thisform.text2.value
...

Daniel Sánchez

unread,
Feb 18, 2011, 9:18:13 PM2/18/11
to publice...@googlegroups.com
Lo que te recomendaria seria usar una variable custom algo como esto le indicarias en tu form 1 antes de ir al form2

ovariable=createobject("custom")


ovariable.addproperty("Retorno1",0)
ovariable.addproperty("Retorno2","")
...
asi sucesivamente de acuerdo a los datos que necesites obtener del form2

do form miform2 with ovariable
*/para que funcione sin problema debo suponer que el miform2 es modal
cuando regresa ya tienes actualizado los datos de la variable ovariable y 
tomas los datos que deseas para visualizarlos o procesar o lo que desees hacer con ellos.
si tuviera que mostrarlos en un textbox

thisform.text1.value=ovariable.retorno1
thisform.text2.value=ovariable.retorno2
...
asi sucesivamente


en tu form2 en el ini 

lparameters oVariable as object

thisform.ovariable=ovariable

debes crear una propiedad ovariable inicializada en .NULL. y lo asignas cuando entras el valor del parametro a la propiedad del formulario (puedes emplear en nombre de la variable o propiedad cualquier nombre que deseas) porque la variable del parametro del ini solo existe en ese metodo sales del metodo adios variable asi que de esa forma queda existiendo, ademas como es un objeto el tipo de paso es por referencia y no por valor (en el caso por referencia no pasa el valor de la variable si no la referencia de la direccion de memoria donde se ubica esa variable, eso quiere decir que cualquier dato que actualices en la variable objeto se reflejara en el origen).

En tu boton salir del form2 pones los datos que deseas que retorno en tu objeto

thisform.ovariable.retorno1=thisform.text1.value
thisform.ovariable.retorno2=thisform.text2.value
...

y solucionado tu problema de retornar mas de un dato desde otro form
Reply all
Reply to author
Forward
0 new messages