In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Cuestion de Orden supongo

Foro público de Xailer en español
Responder
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cuestion de Orden supongo

Mensaje por Bingen Ugaldebere »

Para llamar a un form2 desde un form1 hago
WITH OBJECT oFrm := TFormEditUsuarios():New( Self )
:cText:="Añadir datos de Usuario"
:lAlta:=.T.
msginfo(:lAlta)
::oDBFUsuarios:AddNew()
:ShowModal()
if :nModalResult == mrOK
::oDBFUsuarios:Update()
::oDbBrowse1:RefreshCurrent()
else
::oDBFUsuarios:Cancel()
endif
:End()
END WITH
En el form2 llamado TFormEditUsuarios he creado una DATA llamada
DATA lAlta INIT .F.
Se puede ver arriba que asigno a :lAlta:=.T. y a continuación pregunto
por ella msginfo(:lAlta) y me dice que es .F.
Al parecer no la pone a .T. hasta que es presentado el FORM en pantalla.
Pero lo que quiero es antes de presentar el Form en pantalla poder usar
esa Data en la creación de los controles y datasets del formulario, como
cuando usábamos funciones y le mandábamos parámetros vaya.
Se puede hacer de otra manera.....
Muchas gracias.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9462
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Cuestion de Orden supongo

Mensaje por ignacio »

Bingen,
Si efectivamente funciona así hay algo mal en Xailer. Por favor revisa tu
código pues es muy probable que vuelvas a poner lAlta a falso en alguna
parte de Form2 o mandanos un ejemplo que muestre el error.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=462790b4@ozsrv2.ozlan.local...]462790b4@ozsrv2.ozlan.local...[/email]
> Para llamar a un form2 desde un form1 hago
>
> WITH OBJECT oFrm := TFormEditUsuarios():New( Self )
> :cText:="Añadir datos de Usuario"
> :lAlta:=.T.
> msginfo(:lAlta)
> ::oDBFUsuarios:AddNew()
> :ShowModal()
>
> if :nModalResult == mrOK
> ::oDBFUsuarios:Update()
> ::oDbBrowse1:RefreshCurrent()
> else
> ::oDBFUsuarios:Cancel()
> endif
> :End()
> END WITH
>
>
> En el form2 llamado TFormEditUsuarios he creado una DATA llamada
>
> DATA lAlta INIT .F.
>
> Se puede ver arriba que asigno a :lAlta:=.T. y a continuación pregunto por
> ella msginfo(:lAlta) y me dice que es .F.
>
> Al parecer no la pone a .T. hasta que es presentado el FORM en pantalla.
>
> Pero lo que quiero es antes de presentar el Form en pantalla poder usar
> esa Data en la creación de los controles y datasets del formulario, como
> cuando usábamos funciones y le mandábamos parámetros vaya.
>
> Se puede hacer de otra manera.....
>
> Muchas gracias.
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
correo
Mensajes: 109
Registrado: Mar Nov 22, 2005 7:15 pm

Cuestion de Orden supongo

Mensaje por correo »

Te sugiero alguna correcciones que debes hacer
WITH OBJECT oFrm := TFormEditUsuarios()
:cText:="Añadir datos de Usuario"
:lAlta:=.T.
// msginfo(:lAlta)
:New() //Esta es la clave .Primero modificar el valor de las datas
y despues ejecutar el metodo constructor
::oDBFUsuarios:AddNew()
:ShowModal()
if :nModalResult == mrOK //Recuerda que debes devolver este valor
::oDBFUsuarios:Update()
::oDbBrowse1:RefreshCurrent() //Esto sobra
else
::oDBFUsuarios:Cancel()
endif
:End()
END WITH
Un saludo .Juanjo
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=462790b4@ozsrv2.ozlan.local...]462790b4@ozsrv2.ozlan.local...[/email]
> Para llamar a un form2 desde un form1 hago
>
> WITH OBJECT oFrm := TFormEditUsuarios():New( Self )
> :cText:="Añadir datos de Usuario"
> :lAlta:=.T.
> msginfo(:lAlta)
> ::oDBFUsuarios:AddNew()
> :ShowModal()
>
> if :nModalResult == mrOK
> ::oDBFUsuarios:Update()
> ::oDbBrowse1:RefreshCurrent()
> else
> ::oDBFUsuarios:Cancel()
> endif
> :End()
> END WITH
>
>
> En el form2 llamado TFormEditUsuarios he creado una DATA llamada
>
> DATA lAlta INIT .F.
>
> Se puede ver arriba que asigno a :lAlta:=.T. y a continuación pregunto por
> ella msginfo(:lAlta) y me dice que es .F.
>
> Al parecer no la pone a .T. hasta que es presentado el FORM en pantalla.
>
> Pero lo que quiero es antes de presentar el Form en pantalla poder usar
> esa Data en la creación de los controles y datasets del formulario, como
> cuando usábamos funciones y le mandábamos parámetros vaya.
>
> Se puede hacer de otra manera.....
>
> Muchas gracias.
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cuestion de Orden supongo

Mensaje por Bingen Ugaldebere »

Gracias JJ, creo que el constructor no es :New() sino :Create() pero a
pesar de poner en el form1 lAlta:=.T. en el form2 sigue apareciendo
lAlta como .F.
Salu2 y gracias.
Juan José Garcí­a escribió:
> Te sugiero alguna correcciones que debes hacer
> WITH OBJECT oFrm := TFormEditUsuarios()
> :cText:="Añadir datos de Usuario"
> :lAlta:=.T.
> // msginfo(:lAlta)
> :New() //Esta es la clave .Primero modificar el valor de las datas
> y despues ejecutar el metodo constructor
> ::oDBFUsuarios:AddNew()
> :ShowModal()
> if :nModalResult == mrOK //Recuerda que debes devolver este valor
> ::oDBFUsuarios:Update()
> ::oDbBrowse1:RefreshCurrent() //Esto sobra
> else
> ::oDBFUsuarios:Cancel()
> endif
> :End()
> END WITH
>
> Un saludo .Juanjo
>
>
> "Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
> news:[email=462790b4@ozsrv2.ozlan.local...]462790b4@ozsrv2.ozlan.local...[/email]
>> Para llamar a un form2 desde un form1 hago
>>
>> WITH OBJECT oFrm := TFormEditUsuarios():New( Self )
>> :cText:="Añadir datos de Usuario"
>> :lAlta:=.T.
>> msginfo(:lAlta)
>> ::oDBFUsuarios:AddNew()
>> :ShowModal()
>>
>> if :nModalResult == mrOK
>> ::oDBFUsuarios:Update()
>> ::oDbBrowse1:RefreshCurrent()
>> else
>> ::oDBFUsuarios:Cancel()
>> endif
>> :End()
>> END WITH
>>
>>
>> En el form2 llamado TFormEditUsuarios he creado una DATA llamada
>>
>> DATA lAlta INIT .F.
>>
>> Se puede ver arriba que asigno a :lAlta:=.T. y a continuación pregunto por
>> ella msginfo(:lAlta) y me dice que es .F.
>>
>> Al parecer no la pone a .T. hasta que es presentado el FORM en pantalla.
>>
>> Pero lo que quiero es antes de presentar el Form en pantalla poder usar
>> esa Data en la creación de los controles y datasets del formulario, como
>> cuando usábamos funciones y le mandábamos parámetros vaya.
>>
>> Se puede hacer de otra manera.....
>>
>> Muchas gracias.
>
>
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cuestion de Orden supongo

Mensaje por Bingen Ugaldebere »

Aquí­ va un ejemplo que he hecho al vuelo, verás que en el form1 se
asigna un Data del Form2 lAlta:=.T. y en el form2 muestro un logdebug
que dice que es .F.
Gracias.
Ignacio Ortiz de Zúñiga escribió:
> Bingen,
>
> Si efectivamente funciona así­ hay algo mal en Xailer. Por favor revisa tu
> código pues es muy probable que vuelvas a poner lAlta a falso en alguna
> parte de Form2 o mandanos un ejemplo que muestre el error.
>
> Un saludo,
>
--
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Cuestion de Orden supongo

Mensaje por jose.luis »

Bingen,
Ciertamente Juan José te ha dado la solución:
oFrm := TForm2()
oFrm:cText:="Añadir datos de Bancos"
oFrm:lAlta:=.T.
::oDBFDataset1:AddNew()
oFrm:New( Self )
oFrm:ShowModal()
if oFrm:nModalResult == mrOK
::oDBFDataset1:Update()
else
::oDBFDataset1:Cancel()
endif
oFrm:End()
Por lo que he visto... el comportamiento del código que hay arriba con este
otro:
oFrm := TForm2():New( Self )
oFrm:cText:="Añadir datos de Bancos"
oFrm:lAlta:=.T.
::oDBFDataset1:AddNew()
oFrm:ShowModal()
if oFrm:nModalResult == mrOK
::oDBFDataset1:Update()
else
::oDBFDataset1:Cancel()
endif
oFrm:End()
No es el mismo. Yo creo que tiene que ser algo específico de la clase
tForm. Este código:
LOCAL o
LOCAL p
o := tMiClase():New ( Self )
o:lAlta := .T.
MsgInfo(o:lAlta)
p := tMiOtraClase():New()
p:lAlta := .T.
MsgInfo(p:lAlta)
CLASS tMiClase FROM tComponent
DATA lAlta INIT .F.
ENDCLASS
CLASS tMiOtraClase
DATA lAlta INIT .T.
METHOD New() INLINE Self
ENDCLASS
Funciona bien en ambos casos. En fin... a ver que dicen los expertos de
Xailer por que yo tambien uso mucho la forma de programar que muestra Bingen
(aunque, curiosamente, no me he encontrado con ningún comportamiento
anómalo, o no lo he visto aún).
Saludos,
José Luis Capel
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=4627c0b7@ozsrv2.ozlan.local...]4627c0b7@ozsrv2.ozlan.local...[/email]
> Aquí va un ejemplo que he hecho al vuelo, verás que en el form1 se
> asigna un Data del Form2 lAlta:=.T. y en el form2 muestro un logdebug
> que dice que es .F.
>
> Gracias.
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Bingen,
>>
>> Si efectivamente funciona así hay algo mal en Xailer. Por favor revisa tu
>> código pues es muy probable que vuelvas a poner lAlta a falso en alguna
>> parte de Form2 o mandanos un ejemplo que muestre el error.
>>
>> Un saludo,
>>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9462
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Cuestion de Orden supongo

Mensaje por ignacio »

Bingen,
Tu código tiene muy poco que ver con lo que mandastes anteriomente. En tu
anterior mensaje mostrabas algo así:
WITH OBJECT oFrm := TForm2():New( Self )
:cText:="Añadir datos de Bancos"
:lAlta:=.T.
logdebug( :lAlta )
Y comentabas que lAlta devolvía FALSO, y me temo que no es cierto.
Sin embargo en tu NUEVO código pones el control del valor de lAlta en el
evento OnCreate del DataSet QUE SE EVALUA EN LA PROPIA LLAMADA A SU
CONTRUCTOR NEW, y por lo tanto mucho antes de que se ejecute la línea lAlta
:= .T. por lo que obviamente el logdebug() que existe en dicho evento sólo
puede devolver .F. que es el valor inicial de la DATA.
Como te comentaba Juan José García, en este mismo hilo, el truco está en
llamar a NEW después de asignar el valor a lAlta. Algo así:
WITH OBJECT oFrm := TForm2()
:cText:="Añadir datos de Bancos"
:lAlta:=.T.
:New( Self )
Saludos
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Bingen Ugaldebere" <bingen@muninser.com> escribió en el mensaje
news:[email=4627c0b7@ozsrv2.ozlan.local...]4627c0b7@ozsrv2.ozlan.local...[/email]
> Aquí va un ejemplo que he hecho al vuelo, verás que en el form1 se
> asigna un Data del Form2 lAlta:=.T. y en el form2 muestro un logdebug
> que dice que es .F.
>
> Gracias.
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Bingen,
>>
>> Si efectivamente funciona así hay algo mal en Xailer. Por favor revisa tu
>> código pues es muy probable que vuelvas a poner lAlta a falso en alguna
>> parte de Form2 o mandanos un ejemplo que muestre el error.
>>
>> Un saludo,
>>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cuestion de Orden supongo

Mensaje por Bingen Ugaldebere »

Aja! ahora lo veo mas claro no me habí­a fijado que Juanjo quitó el new
del With Object y lo puse en 2 sitios y claro no iba.
Muchas gracias a todos.
Ignacio Ortiz de Zúñiga escribió:
> Bingen,
>
> Tu código tiene muy poco que ver con lo que mandastes anteriomente. En tu
> anterior mensaje mostrabas algo así­:
>
> WITH OBJECT oFrm := TForm2():New( Self )
> :cText:="Añadir datos de Bancos"
> :lAlta:=.T.
> logdebug( :lAlta )
>
> Y comentabas que lAlta devolví­a FALSO, y me temo que no es cierto.
>
> Sin embargo en tu NUEVO código pones el control del valor de lAlta en el
> evento OnCreate del DataSet QUE SE EVALUA EN LA PROPIA LLAMADA A SU
> CONTRUCTOR NEW, y por lo tanto mucho antes de que se ejecute la lí­nea lAlta
> := .T. por lo que obviamente el logdebug() que existe en dicho evento sólo
> puede devolver .F. que es el valor inicial de la DATA.
>
> Como te comentaba Juan José Garcí­a, en este mismo hilo, el truco está en
> llamar a NEW después de asignar el valor a lAlta. Algo así­:
>
> WITH OBJECT oFrm := TForm2()
> :cText:="Añadir datos de Bancos"
> :lAlta:=.T.
> :New( Self )
>
> Saludos
>
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Cuestion de Orden supongo

Mensaje por Bingen Ugaldebere »

Efectivamente era una cuestión de orden
Primero asignar los valores a las Datas lAlta:=.T.
Después hacer el :New()
Gracias a todos.
Responder