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.
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.
No me funcionan los campos calculados
No me funcionan los campos calculados
Hola,
He intentado usar por primera vez un campo calculado, y lo lee pero no lo
graba, este es el código, es igual que en la ayuda y nunca llega a grabar ni
a mostrar el logdebug:
oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet, Value ) }
<--- esto no lo evalúa nunca
Function SaveLogo( oDataSet, Value )
logdebug( Value ) <---- esto no se evalúa nunca
::oDataset:c_nomlogo := Value
Return nil
Un Saludo,
Joaquín
He intentado usar por primera vez un campo calculado, y lo lee pero no lo
graba, este es el código, es igual que en la ayuda y nunca llega a grabar ni
a mostrar el logdebug:
oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet, Value ) }
<--- esto no lo evalúa nunca
Function SaveLogo( oDataSet, Value )
logdebug( Value ) <---- esto no se evalúa nunca
::oDataset:c_nomlogo := Value
Return nil
Un Saludo,
Joaquín
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
No me funcionan los campos calculados
Joaquin,
El evento se evalua cuando hagas algo así:
oDataSet:MiCampoCalculado := "lo que sea"
Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
valor.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> He intentado usar por primera vez un campo calculado, y lo lee pero no lo
> graba, este es el código, es igual que en la ayuda y nunca llega a grabar
> ni
> a mostrar el logdebug:
>
> oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
>
>
>
> oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> Value ) }
> <--- esto no lo evalúa nunca
>
>
>
> Function SaveLogo( oDataSet, Value )
>
> logdebug( Value ) <---- esto no se evalúa nunca
>
> ::oDataset:c_nomlogo := Value
>
> Return nil
>
> Un Saludo,
>
> Joaquín
>
>
El evento se evalua cuando hagas algo así:
oDataSet:MiCampoCalculado := "lo que sea"
Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
valor.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> He intentado usar por primera vez un campo calculado, y lo lee pero no lo
> graba, este es el código, es igual que en la ayuda y nunca llega a grabar
> ni
> a mostrar el logdebug:
>
> oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
>
>
>
> oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> Value ) }
> <--- esto no lo evalúa nunca
>
>
>
> Function SaveLogo( oDataSet, Value )
>
> logdebug( Value ) <---- esto no se evalúa nunca
>
> ::oDataset:c_nomlogo := Value
>
> Return nil
>
> Un Saludo,
>
> Joaquín
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
No me funcionan los campos calculados
Ignacio,
Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y el
calculado de la forma que le indico, porque además no tiene mucha lógica
pues si se hace como dices da error de "requiere bloqueo".
Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
manualmente???
Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el buffer
por lo que en ese momento no quiero guardarlo en la base de datos.
No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé que
el evento saltaba al hacer Update() en la base.
Un Saludo,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> El evento se evalua cuando hagas algo así:
>
> oDataSet:MiCampoCalculado := "lo que sea"
>
> Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
> valor.
>
> Un saludo,
>
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Hola,
> >
> > He intentado usar por primera vez un campo calculado, y lo lee pero no
lo
> > graba, este es el código, es igual que en la ayuda y nunca llega a
grabar
> > ni
> > a mostrar el logdebug:
> >
> > oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> > oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >
> >
> >
> > oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> > Value ) }
> > <--- esto no lo evalúa nunca
> >
> >
> >
> > Function SaveLogo( oDataSet, Value )
> >
> > logdebug( Value ) <---- esto no se evalúa nunca
> >
> > ::oDataset:c_nomlogo := Value
> >
> > Return nil
> >
> > Un Saludo,
> >
> > Joaquín
> >
> >
>
>
Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y el
calculado de la forma que le indico, porque además no tiene mucha lógica
pues si se hace como dices da error de "requiere bloqueo".
Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
manualmente???
Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el buffer
por lo que en ese momento no quiero guardarlo en la base de datos.
No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé que
el evento saltaba al hacer Update() en la base.
Un Saludo,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> El evento se evalua cuando hagas algo así:
>
> oDataSet:MiCampoCalculado := "lo que sea"
>
> Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
> valor.
>
> Un saludo,
>
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Hola,
> >
> > He intentado usar por primera vez un campo calculado, y lo lee pero no
lo
> > graba, este es el código, es igual que en la ayuda y nunca llega a
grabar
> > ni
> > a mostrar el logdebug:
> >
> > oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> > oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >
> >
> >
> > oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> > Value ) }
> > <--- esto no lo evalúa nunca
> >
> >
> >
> > Function SaveLogo( oDataSet, Value )
> >
> > logdebug( Value ) <---- esto no se evalúa nunca
> >
> > ::oDataset:c_nomlogo := Value
> >
> > Return nil
> >
> > Un Saludo,
> >
> > Joaquín
> >
> >
>
>
-
- Mensajes: 203
- Registrado: Vie Abr 01, 2005 9:05 am
No me funcionan los campos calculados
Joaquin,
Por lo que yo se los campos calculados son "virtuales", es decir, no se
almacenan en las tablas, si no que se ejecutan al cargar esa fila y es
entonces cuando toman el valor. Siendo calculados no tiene sentido que
se guarden.
Saludos,
Jose Alfonso Suarez
Joaquín Martínez escribió:
> Ignacio,
>
> Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y el
> calculado de la forma que le indico, porque además no tiene mucha lógica
> pues si se hace como dices da error de "requiere bloqueo".
>
> Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
> Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> manualmente???
>
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé que
> el evento saltaba al hacer Update() en la base.
>
> Un Saludo,
> Joaquín
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
>>Joaquin,
>>
>>El evento se evalua cuando hagas algo así:
>>
>>oDataSet:MiCampoCalculado := "lo que sea"
>>
>>Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
>>valor.
>>
>>Un saludo,
>>
>>
>>"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>>news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>>>Hola,
>>>
>>>He intentado usar por primera vez un campo calculado, y lo lee pero no
>
> lo
>
>>>graba, este es el código, es igual que en la ayuda y nunca llega a
>
> grabar
>
>>>ni
>>>a mostrar el logdebug:
>>>
>>>oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
>>>oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
>>>
>>>
>>>
>>>oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
>>>Value ) }
>>><--- esto no lo evalúa nunca
>>>
>>>
>>>
>>>Function SaveLogo( oDataSet, Value )
>>>
>>>logdebug( Value ) <---- esto no se evalúa nunca
>>>
>>>::oDataset:c_nomlogo := Value
>>>
>>>Return nil
>>>
>>>Un Saludo,
>>>
>>>Joaquín
>>>
>>>
>>
>>
>
>
Por lo que yo se los campos calculados son "virtuales", es decir, no se
almacenan en las tablas, si no que se ejecutan al cargar esa fila y es
entonces cuando toman el valor. Siendo calculados no tiene sentido que
se guarden.
Saludos,
Jose Alfonso Suarez
Joaquín Martínez escribió:
> Ignacio,
>
> Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y el
> calculado de la forma que le indico, porque además no tiene mucha lógica
> pues si se hace como dices da error de "requiere bloqueo".
>
> Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
> Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> manualmente???
>
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé que
> el evento saltaba al hacer Update() en la base.
>
> Un Saludo,
> Joaquín
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
>>Joaquin,
>>
>>El evento se evalua cuando hagas algo así:
>>
>>oDataSet:MiCampoCalculado := "lo que sea"
>>
>>Y entonces recibirás en la función SaveLogo() como segundo parametro dicho
>>valor.
>>
>>Un saludo,
>>
>>
>>"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>>news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>>>Hola,
>>>
>>>He intentado usar por primera vez un campo calculado, y lo lee pero no
>
> lo
>
>>>graba, este es el código, es igual que en la ayuda y nunca llega a
>
> grabar
>
>>>ni
>>>a mostrar el logdebug:
>>>
>>>oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
>>>oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
>>>
>>>
>>>
>>>oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
>>>Value ) }
>>><--- esto no lo evalúa nunca
>>>
>>>
>>>
>>>Function SaveLogo( oDataSet, Value )
>>>
>>>logdebug( Value ) <---- esto no se evalúa nunca
>>>
>>>::oDataset:c_nomlogo := Value
>>>
>>>Return nil
>>>
>>>Un Saludo,
>>>
>>>Joaquín
>>>
>>>
>>
>>
>
>
No me funcionan los campos calculados
Jose A.,
Ya lo sé, lo que debería hacer es al hacer Update() salvar ese campo
calculado según indica el evento onSetValue (cada valor en su campo de
verdad).
Y no que ahora hay que asignarlo antes del Update(), sólo eso, que no se ve
lógico para el que no lo sabe.
Un Saludo,
Joaquín
"Jose Alfonso Suárez Moreno" <jasm.nospam@chochurro.com> escribió en el
mensaje news:42c99a34$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Por lo que yo se los campos calculados son "virtuales", es decir, no se
> almacenan en las tablas, si no que se ejecutan al cargar esa fila y es
> entonces cuando toman el valor. Siendo calculados no tiene sentido que
> se guarden.
>
> Saludos,
>
> Jose Alfonso Suarez
>
> Joaquín Martínez escribió:
> > Ignacio,
> >
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y
el
> > calculado de la forma que le indico, porque además no tiene mucha lógica
> > pues si se hace como dices da error de "requiere bloqueo".
> >
> > Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> >
> > Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el
buffer
> > por lo que en ese momento no quiero guardarlo en la base de datos.
> >
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé
que
> > el evento saltaba al hacer Update() en la base.
> >
> > Un Saludo,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >
> >>Joaquin,
> >>
> >>El evento se evalua cuando hagas algo así:
> >>
> >>oDataSet:MiCampoCalculado := "lo que sea"
> >>
> >>Y entonces recibirás en la función SaveLogo() como segundo parametro
dicho
> >>valor.
> >>
> >>Un saludo,
> >>
> >>
> >>"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >>news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >>
> >>>Hola,
> >>>
> >>>He intentado usar por primera vez un campo calculado, y lo lee pero no
> >
> > lo
> >
> >>>graba, este es el código, es igual que en la ayuda y nunca llega a
> >
> > grabar
> >
> >>>ni
> >>>a mostrar el logdebug:
> >>>
> >>>oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> >>>oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >>>
> >>>
> >>>
> >>>oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> >>>Value ) }
> >>><--- esto no lo evalúa nunca
> >>>
> >>>
> >>>
> >>>Function SaveLogo( oDataSet, Value )
> >>>
> >>>logdebug( Value ) <---- esto no se evalúa nunca
> >>>
> >>>::oDataset:c_nomlogo := Value
> >>>
> >>>Return nil
> >>>
> >>>Un Saludo,
> >>>
> >>>Joaquín
> >>>
> >>>
> >>
> >>
> >
> >
Ya lo sé, lo que debería hacer es al hacer Update() salvar ese campo
calculado según indica el evento onSetValue (cada valor en su campo de
verdad).
Y no que ahora hay que asignarlo antes del Update(), sólo eso, que no se ve
lógico para el que no lo sabe.
Un Saludo,
Joaquín
"Jose Alfonso Suárez Moreno" <jasm.nospam@chochurro.com> escribió en el
mensaje news:42c99a34$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Por lo que yo se los campos calculados son "virtuales", es decir, no se
> almacenan en las tablas, si no que se ejecutan al cargar esa fila y es
> entonces cuando toman el valor. Siendo calculados no tiene sentido que
> se guarden.
>
> Saludos,
>
> Jose Alfonso Suarez
>
> Joaquín Martínez escribió:
> > Ignacio,
> >
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada campo y
el
> > calculado de la forma que le indico, porque además no tiene mucha lógica
> > pues si se hace como dices da error de "requiere bloqueo".
> >
> > Si tengo 20 campos normales y 3 calculados, según me comentas al hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> >
> > Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el
buffer
> > por lo que en ese momento no quiero guardarlo en la base de datos.
> >
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda pensé
que
> > el evento saltaba al hacer Update() en la base.
> >
> > Un Saludo,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >
> >>Joaquin,
> >>
> >>El evento se evalua cuando hagas algo así:
> >>
> >>oDataSet:MiCampoCalculado := "lo que sea"
> >>
> >>Y entonces recibirás en la función SaveLogo() como segundo parametro
dicho
> >>valor.
> >>
> >>Un saludo,
> >>
> >>
> >>"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >>news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >>
> >>>Hola,
> >>>
> >>>He intentado usar por primera vez un campo calculado, y lo lee pero no
> >
> > lo
> >
> >>>graba, este es el código, es igual que en la ayuda y nunca llega a
> >
> > grabar
> >
> >>>ni
> >>>a mostrar el logdebug:
> >>>
> >>>oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> >>>oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >>>
> >>>
> >>>
> >>>oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> >>>Value ) }
> >>><--- esto no lo evalúa nunca
> >>>
> >>>
> >>>
> >>>Function SaveLogo( oDataSet, Value )
> >>>
> >>>logdebug( Value ) <---- esto no se evalúa nunca
> >>>
> >>>::oDataset:c_nomlogo := Value
> >>>
> >>>Return nil
> >>>
> >>>Un Saludo,
> >>>
> >>>Joaquín
> >>>
> >>>
> >>
> >>
> >
> >
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
No me funcionan los campos calculados
This is a multi-part message in MIME format.
------=_NextPart_000_0015_01C58147.B9E08F50
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0016_01C58147.B9E08F50"
------=_NextPart_001_0016_01C58147.B9E08F50
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, pues =
se queda igual
> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que asignarles =
el nuevo valor. Perd=F3name pero es como lo llevas haciendo toda tu =
vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto antes. =
Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de los =
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el mensaje =
news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene mucha =
l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el =
buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee pero =
no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca llega =
a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0016_01C58147.B9E08F50
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo=20
y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha cambiado,=20
puesÂse queda igual
</DIV>
<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere =
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o=20
AddNew(). Si quieres cambiar el buffer del DataField pero no su valor en =
la base=20
de datos sin estar en modo edici=F3n, tienes el m=E9todoÂVarPut(). =
</DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:001001c58136$f652dd50$0e00000a@ozlan.local"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa =
que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda tu =
vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente=20
puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3 en=20
el mensaje <A=20
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer =
oDataset:Update(),=20
salvara cada campo y el<BR>> calculado de la forma que le indico, =
porque=20
adem=E1s no tiene mucha l=F3gica<BR>> pues si se hace como dices da =
error de=20
"requiere bloqueo".<BR>> <BR>> Si tengo 20 campos normales y 3 =
calculados,=20
seg=FAn me comentas al hacer<BR>> Update() grabar=EDa s=F3lo 20 y =
luego uno por uno=20
habr=EDa que grabarlos<BR>> manualmente???<BR>> <BR>> Y aparte, =
si estoy=20
en un "edit()" al hacer lo que dices estoy con el buffer<BR>> por lo =
que en=20
ese momento no quiero guardarlo en la base de datos.<BR>> <BR>> No =
entiendo muy bien como trabaja, porque incluso viendo la ayuda pens=E9 =
que<BR>>=20
el evento saltaba al hacer Update() en la base.<BR>> <BR>> Un=20
Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> <BR>> "Ignacio =
Ortiz de=20
Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3 en=20
el mensaje<BR>> <A=20
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo() como=20
segundo parametro dicho<BR>>> valor.<BR>>><BR>>> =
UnÂ=20
saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn Mart=EDnez" =
<<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3 en=20
el mensaje<BR>>> <A=20
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera vez=20
un campo calculado, y lo lee pero no<BR>> lo<BR>>> > graba, =
este es=20
el c=F3digo, es igual que en la ayuda y nunca llega a<BR>> =
grabar<BR>>>=20
> ni<BR>>> > a mostrar el logdebug:<BR>>> =
><BR>>>=20
> oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField=20
|<BR>>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED=20
funciona<BR>>> ><BR>>> ><BR>>> ><BR>>> =
>=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,<BR>>>=20
> Value ) }<BR>>> > <--- esto no lo eval=FAa =
nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value ) =
<----=20
esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo=20
:=3D Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> >=20
Joaqu=EDn<BR>>> ><BR>>> =
><BR>>><BR>>><BR>>=20
<BR>></BODY></HTML>
------=_NextPart_001_0016_01C58147.B9E08F50--
------=_NextPart_000_0015_01C58147.B9E08F50
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <001001c58136$f652dd50$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0015_01C58147.B9E08F50--
Attached files
------=_NextPart_000_0015_01C58147.B9E08F50
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0016_01C58147.B9E08F50"
------=_NextPart_001_0016_01C58147.B9E08F50
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, pues =
se queda igual

> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que asignarles =
el nuevo valor. Perd=F3name pero es como lo llevas haciendo toda tu =
vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto antes. =
Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de los =
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el mensaje =
news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene mucha =
l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el =
buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee pero =
no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca llega =
a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0016_01C58147.B9E08F50
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo=20
y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha cambiado,=20
puesÂse queda igual

<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere =
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o=20
AddNew(). Si quieres cambiar el buffer del DataField pero no su valor en =
la base=20
de datos sin estar en modo edici=F3n, tienes el m=E9todoÂVarPut(). =
</DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:001001c58136$f652dd50$0e00000a@ozlan.local"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa =
que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda tu =
vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente=20
puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3 en=20
el mensaje <A=20
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer =
oDataset:Update(),=20
salvara cada campo y el<BR>> calculado de la forma que le indico, =
porque=20
adem=E1s no tiene mucha l=F3gica<BR>> pues si se hace como dices da =
error de=20
"requiere bloqueo".<BR>> <BR>> Si tengo 20 campos normales y 3 =
calculados,=20
seg=FAn me comentas al hacer<BR>> Update() grabar=EDa s=F3lo 20 y =
luego uno por uno=20
habr=EDa que grabarlos<BR>> manualmente???<BR>> <BR>> Y aparte, =
si estoy=20
en un "edit()" al hacer lo que dices estoy con el buffer<BR>> por lo =
que en=20
ese momento no quiero guardarlo en la base de datos.<BR>> <BR>> No =
entiendo muy bien como trabaja, porque incluso viendo la ayuda pens=E9 =
que<BR>>=20
el evento saltaba al hacer Update() en la base.<BR>> <BR>> Un=20
Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> <BR>> "Ignacio =
Ortiz de=20
Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3 en=20
el mensaje<BR>> <A=20
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo() como=20
segundo parametro dicho<BR>>> valor.<BR>>><BR>>> =
UnÂ=20
saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn Mart=EDnez" =
<<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3 en=20
el mensaje<BR>>> <A=20
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera vez=20
un campo calculado, y lo lee pero no<BR>> lo<BR>>> > graba, =
este es=20
el c=F3digo, es igual que en la ayuda y nunca llega a<BR>> =
grabar<BR>>>=20
> ni<BR>>> > a mostrar el logdebug:<BR>>> =
><BR>>>=20
> oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField=20
|<BR>>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED=20
funciona<BR>>> ><BR>>> ><BR>>> ><BR>>> =
>=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,<BR>>>=20
> Value ) }<BR>>> > <--- esto no lo eval=FAa =
nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value ) =
<----=20
esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo=20
:=3D Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> >=20
Joaqu=EDn<BR>>> ><BR>>> =
><BR>>><BR>>><BR>>=20
<BR>></BODY></HTML>
------=_NextPart_001_0016_01C58147.B9E08F50--
------=_NextPart_000_0015_01C58147.B9E08F50
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <001001c58136$f652dd50$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0015_01C58147.B9E08F50--
Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
No me funcionan los campos calculados
This is a multi-part message in MIME format.
------=_NextPart_000_008B_01C58158.21305D10
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_008C_01C58158.21305D10"
------=_NextPart_001_008C_01C58158.21305D10
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un control =
que no se pueda salvar tal cual, le asigno el valor al campo calculado, =
y luego s=F3lo cuando haga update() ya cada campo real tiene su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField | =
oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual
> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que asignarles =
el nuevo valor. Perd=F3name pero es como lo llevas haciendo toda tu =
vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de los =
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene mucha =
l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el =
buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee =
pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_008C_01C58158.21305D10
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR></FONT><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, Value =
| Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, 4 =
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, 14, =
10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da la =
impresi=F3n de=20
que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu planteamiento, =
en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo real =
tiene su=20
valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge como =
primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la=20
siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D ::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal }=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT face=3DArial =
size=3D2>
<DIV><BR>oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | =
Salvar(=20
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en =
vez de=20
hacer internamente algo como:</DIV>
<DIV>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa incorrecto =
porque el=20
campo no existe )</DIV>
<DIV>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo=20
lo ver=EDa como:</DIV>
<DIV>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual
</DIV>
<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere =
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit()=20
o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la=20
base de datos sin estar en modo edici=F3n, tienes el =
m=E9todoÂVarPut().=20
</DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:008601c58147$57a1a680$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda tu =
vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer =
oDataset:Update(),=20
salvara cada campo y el<BR>> calculado de la forma que le indico, =
porque=20
adem=E1s no tiene mucha l=F3gica<BR>> pues si se hace como dices da =
error de=20
"requiere bloqueo".<BR>> <BR>> Si tengo 20 campos normales y 3=20
calculados, seg=FAn me comentas al hacer<BR>> Update() grabar=EDa =
s=F3lo 20 y=20
luego uno por uno habr=EDa que grabarlos<BR>> =
manualmente???<BR>> <BR>>=20
Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el=20
buffer<BR>> por lo que en ese momento no quiero guardarlo en la =
base de=20
datos.<BR>> <BR>> No entiendo muy bien como trabaja, porque =
incluso=20
viendo la ayuda pens=E9 que<BR>> el evento saltaba al hacer =
Update() en la=20
base.<BR>> <BR>> Un Saludo,<BR>> Joaqu=EDn<BR>> <BR>> =
<BR>>=20
<BR>> "Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas algo =
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera vez=20
un campo calculado, y lo lee pero no<BR>> lo<BR>>> > =
graba, este=20
es el c=F3digo, es igual que en la ayuda y nunca llega a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el =
logdebug:<BR>>>=20
><BR>>> > oField :=3D :Datosemp:AddCalcField( =
"MiField_c_nomlogo",=20
{| oField |<BR>>> > oField:oDataset:c_nomlogo } ) <-- Esto =
s=ED=20
funciona<BR>>> ><BR>>> ><BR>>> =
><BR>>> >=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,<BR>>>=20
> Value ) }<BR>>> > <--- esto no lo eval=FAa =
nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value ) =
<----=20
esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo=20
:=3D Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> >=20
Joaqu=EDn<BR>>> ><BR>>> =
><BR>>><BR>>><BR>>=20
<BR>> </BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_008C_01C58158.21305D10--
------=_NextPart_000_008B_01C58158.21305D10
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <008601c58147$57a1a680$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_008B_01C58158.21305D10--
Attached files
------=_NextPart_000_008B_01C58158.21305D10
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_008C_01C58158.21305D10"
------=_NextPart_001_008C_01C58158.21305D10
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un control =
que no se pueda salvar tal cual, le asigno el valor al campo calculado, =
y luego s=F3lo cuando haga update() ya cada campo real tiene su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField | =
oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual

> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que asignarles =
el nuevo valor. Perd=F3name pero es como lo llevas haciendo toda tu =
vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de los =
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene mucha =
l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el =
buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee =
pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_008C_01C58158.21305D10
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR></FONT><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, Value =
| Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, 4 =
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, 14, =
10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da la =
impresi=F3n de=20
que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu planteamiento, =
en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo real =
tiene su=20
valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge como =
primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la=20
siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D ::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal }=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT face=3DArial =
size=3D2>
<DIV><BR>oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | =
Salvar(=20
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en =
vez de=20
hacer internamente algo como:</DIV>
<DIV>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa incorrecto =
porque el=20
campo no existe )</DIV>
<DIV>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo=20
lo ver=EDa como:</DIV>
<DIV>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual

<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere =
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit()=20
o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la=20
base de datos sin estar en modo edici=F3n, tienes el =
m=E9todoÂVarPut().=20
</DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:008601c58147$57a1a680$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda tu =
vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores que =
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer =
oDataset:Update(),=20
salvara cada campo y el<BR>> calculado de la forma que le indico, =
porque=20
adem=E1s no tiene mucha l=F3gica<BR>> pues si se hace como dices da =
error de=20
"requiere bloqueo".<BR>> <BR>> Si tengo 20 campos normales y 3=20
calculados, seg=FAn me comentas al hacer<BR>> Update() grabar=EDa =
s=F3lo 20 y=20
luego uno por uno habr=EDa que grabarlos<BR>> =
manualmente???<BR>> <BR>>=20
Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con el=20
buffer<BR>> por lo que en ese momento no quiero guardarlo en la =
base de=20
datos.<BR>> <BR>> No entiendo muy bien como trabaja, porque =
incluso=20
viendo la ayuda pens=E9 que<BR>> el evento saltaba al hacer =
Update() en la=20
base.<BR>> <BR>> Un Saludo,<BR>> Joaqu=EDn<BR>> <BR>> =
<BR>>=20
<BR>> "Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas algo =
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera vez=20
un campo calculado, y lo lee pero no<BR>> lo<BR>>> > =
graba, este=20
es el c=F3digo, es igual que en la ayuda y nunca llega a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el =
logdebug:<BR>>>=20
><BR>>> > oField :=3D :Datosemp:AddCalcField( =
"MiField_c_nomlogo",=20
{| oField |<BR>>> > oField:oDataset:c_nomlogo } ) <-- Esto =
s=ED=20
funciona<BR>>> ><BR>>> ><BR>>> =
><BR>>> >=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,<BR>>>=20
> Value ) }<BR>>> > <--- esto no lo eval=FAa =
nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value ) =
<----=20
esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo=20
:=3D Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> >=20
Joaqu=EDn<BR>>> ><BR>>> =
><BR>>><BR>>><BR>>=20
<BR>> </BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_008C_01C58158.21305D10--
------=_NextPart_000_008B_01C58158.21305D10
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <008601c58147$57a1a680$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_008B_01C58158.21305D10--
Attached files
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
No me funcionan los campos calculados
This is a multi-part message in MIME format.
------=_NextPart_000_0014_01C5815B.D1BFEB70
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0015_01C5815B.D1BFEB70"
------=_NextPart_001_0015_01C5815B.D1BFEB70
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro
=20
Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se ten=EDa =
que disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice =
el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un control =
que no se pueda salvar tal cual, le asigno el valor al campo calculado, =
y luego s=F3lo cuando haga update() ya cada campo real tiene su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField | =
oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual
> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con =
el buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 =
en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee =
pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0015_01C5815B.D1BFEB70
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, Value =
| Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, 4 =
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, 14, =
10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-) </DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(), no=20
TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el valor del =
campo con=20
el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy seguro=20
que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que tienes =
muchas=20
lagunas al respecto. Te aconsejo que te detengas en el evento OnPreSave =
del=20
TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR></FONT><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, =
4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da =
la impresi=F3n de=20
que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo =
real tiene su=20
valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge como =
primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la=20
siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D ::oDatosemp:AddCalcField( =
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal } =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT face=3DArial =
size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio |=20
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update() y en=20
vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa incorrecto =
porque el=20
campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente=20
yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual
</DIV>
<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el=20
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000f01c5814b$0e34aa70$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda =
tu vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo =
la ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de la =
forma que=20
le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> pues si =
se hace como=20
dices da error de "requiere bloqueo".<BR>> <BR>> Si tengo 20 =
campos=20
normales y 3 calculados, seg=FAn me comentas al hacer<BR>> =
Update()=20
grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos<BR>>=20
manualmente???<BR>> <BR>> Y aparte, si estoy en un "edit()" al =
hacer=20
lo que dices estoy con el buffer<BR>> por lo que en ese momento =
no quiero=20
guardarlo en la base de datos.<BR>> <BR>> No entiendo muy bien =
como=20
trabaja, porque incluso viendo la ayuda pens=E9 que<BR>> el =
evento saltaba=20
al hacer Update() en la base.<BR>> <BR>> Un Saludo,<BR>>=20
Joaqu=EDn<BR>> <BR>> <BR>> <BR>> "Ignacio Ortiz de =
Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas =
algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo =
que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez"=20
<<A =
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera=20
vez un campo calculado, y lo lee pero no<BR>> lo<BR>>> > =
graba,=20
este es el c=F3digo, es igual que en la ayuda y nunca llega =
a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |<BR>>> =
>=20
oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > =
oField:OnSetValue :=3D=20
{|oField, Value | SaveLogo( oField:oDataSet,<BR>>> > Value =
)=20
}<BR>>> > <--- esto no lo eval=FAa nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value =
)=20
<---- esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo :=3D Value<BR>>> ><BR>>> > =
Return=20
nil<BR>>> ><BR>>> > Un Saludo,<BR>>>=20
><BR>>> > Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_0015_01C5815B.D1BFEB70--
------=_NextPart_000_0014_01C5815B.D1BFEB70
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000f01c5814b$0e34aa70$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0014_01C5815B.D1BFEB70--
Attached files
------=_NextPart_000_0014_01C5815B.D1BFEB70
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0015_01C5815B.D1BFEB70"
------=_NextPart_001_0015_01C5815B.D1BFEB70
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro

Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se ten=EDa =
que disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice =
el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un control =
que no se pueda salvar tal cual, le asigno el valor al campo calculado, =
y luego s=F3lo cuando haga update() ya cada campo real tiene su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField | =
oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual

> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en modo =
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero no su =
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara cada =
campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas al =
hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con =
el buffer
> por lo que en ese momento no quiero guardarlo en la base de datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la ayuda =
pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 =
en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo lee =
pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0015_01C5815B.D1BFEB70
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, Value =
| Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, 4 =
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, 14, =
10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-) </DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(), no=20
TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el valor del =
campo con=20
el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy seguro=20
que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que tienes =
muchas=20
lagunas al respecto. Te aconsejo que te detengas en el evento OnPreSave =
del=20
TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR></FONT><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, =
4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da =
la impresi=F3n de=20
que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo =
real tiene su=20
valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge como =
primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la=20
siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D ::oDatosemp:AddCalcField( =
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal } =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT face=3DArial =
size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio |=20
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update() y en=20
vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa incorrecto =
porque el=20
campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente=20
yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual

<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el=20
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000f01c5814b$0e34aa70$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el=20
nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo toda =
tu vida. No=20
puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo =
la ayuda=20
pens=E9 que<BR>> el evento saltaba al hacer Update() en la =
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de la =
forma que=20
le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> pues si =
se hace como=20
dices da error de "requiere bloqueo".<BR>> <BR>> Si tengo 20 =
campos=20
normales y 3 calculados, seg=FAn me comentas al hacer<BR>> =
Update()=20
grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos<BR>>=20
manualmente???<BR>> <BR>> Y aparte, si estoy en un "edit()" al =
hacer=20
lo que dices estoy con el buffer<BR>> por lo que en ese momento =
no quiero=20
guardarlo en la base de datos.<BR>> <BR>> No entiendo muy bien =
como=20
trabaja, porque incluso viendo la ayuda pens=E9 que<BR>> el =
evento saltaba=20
al hacer Update() en la base.<BR>> <BR>> Un Saludo,<BR>>=20
Joaqu=EDn<BR>> <BR>> <BR>> <BR>> "Ignacio Ortiz de =
Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas =
algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo =
que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la funci=F3n =
SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez"=20
<<A =
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera=20
vez un campo calculado, y lo lee pero no<BR>> lo<BR>>> > =
graba,=20
este es el c=F3digo, es igual que en la ayuda y nunca llega =
a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |<BR>>> =
>=20
oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > =
oField:OnSetValue :=3D=20
{|oField, Value | SaveLogo( oField:oDataSet,<BR>>> > Value =
)=20
}<BR>>> > <--- esto no lo eval=FAa nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( Value =
)=20
<---- esto no se eval=FAa nunca<BR>>> ><BR>>> > =
::oDataset:c_nomlogo :=3D Value<BR>>> ><BR>>> > =
Return=20
nil<BR>>> ><BR>>> > Un Saludo,<BR>>>=20
><BR>>> > Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_0015_01C5815B.D1BFEB70--
------=_NextPart_000_0014_01C5815B.D1BFEB70
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000f01c5814b$0e34aa70$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0014_01C5815B.D1BFEB70--
Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
No me funcionan los campos calculados
This is a multi-part message in MIME format.
------=_NextPart_000_00BC_01C58160.E7F65050
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_00BD_01C58160.E7F65050"
------=_NextPart_001_00BD_01C58160.E7F65050
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
Mira, dejo ya este tema porque leemos muy diferente, la forma en que =
funciona me parece bien como otra cualquiera, simplemente te comentaba =
que no estaba tan claro.
Estoy "harto" de leerme la documentaci=F3n, no te creas que ni la he =
visto, conozco los eventos de TDataSet y s=E9 que se podr=EDa hacer de =
esa manera o de otras 1000 diferentes, pero si estoy usando el update() =
con datacontrols quer=EDa hacerlo por ese camino.
Un Saludo y gracias por tu tiempo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca5ebc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro
=20
Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que disparar autom=E1ticamente oField:OnSetValue en cada =
llamada a Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente =
actualice el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un =
control que no se pueda salvar tal cual, le asigno el valor al campo =
calculado, y luego s=F3lo cuando haga update() ya cada campo real tiene =
su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField =
| oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que =
ser=EDa incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 =
en el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual
> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas =
al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas =
al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy =
con el buffer
> por lo que en ese momento no quiero guardarlo en la base de =
datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en =
el mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo =
lee pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_00BD_01C58160.E7F65050
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, dejo ya este tema porque leemos =
muy=20
diferente, la forma en que funciona me parece bien como otra cualquiera, =
simplemente te comentaba que no estaba tan claro.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Estoy "harto" de leerme la =
documentaci=F3n, no te=20
creas que ni la he visto, conozco los eventos de <FONT size=3D3>TDataSet =
y s=E9 que=20
se podr=EDa hacer de esa manera o de otras 1000 diferentes, pero si =
estoy usando=20
el update() con datacontrols quer=EDa hacerlo por ese =
camino.</FONT></FONT></DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial>Un Saludo y gracias por tu tiempo,</FONT></DIV>
<DIV><FONT face=3DArial>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca5ebc$1@ozsrvnegro.ozlan.local">news:42ca5ebc$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, =
4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-)=20
</DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(),=20
no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el =
valor del=20
campo con el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy seguro=20
que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas=20
lagunas al respecto. Te aconsejo que te detengas en el evento =
OnPreSave del=20
TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo cuanto antes. Muchas gracias.<BR></FONT><FONT =
face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, =
6, 4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da =
la impresi=F3n=20
de que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo =
real tiene=20
su valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge =
como primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera=20
la siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D =
::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal =
}=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT =
face=3DArial size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio |=20
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update() y en=20
vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque=20
el campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente=20
yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual
</DIV>
<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n =
en modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el=20
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:00b701c58150$23a9e230$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles=20
el nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo =
toda tu=20
vida. No puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo =
la=20
ayuda pens=E9 que<BR>> el evento saltaba al hacer Update() en =
la=20
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la =
documentaci=F3n de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de la =
forma=20
que le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> =
pues si se hace=20
como dices da error de "requiere bloqueo".<BR>> <BR>> Si =
tengo 20=20
campos normales y 3 calculados, seg=FAn me comentas al =
hacer<BR>>=20
Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos<BR>>=20
manualmente???<BR>> <BR>> Y aparte, si estoy en un "edit()" =
al hacer=20
lo que dices estoy con el buffer<BR>> por lo que en ese momento =
no=20
quiero guardarlo en la base de datos.<BR>> <BR>> No entiendo =
muy=20
bien como trabaja, porque incluso viendo la ayuda pens=E9 =
que<BR>> el=20
evento saltaba al hacer Update() en la base.<BR>> <BR>> Un=20
Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> <BR>> =
"Ignacio Ortiz=20
de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas =
algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo =
que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la =
funci=F3n SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez"=20
<<A =
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera=20
vez un campo calculado, y lo lee pero no<BR>> lo<BR>>> =
>=20
graba, este es el c=F3digo, es igual que en la ayuda y nunca llega =
a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|<BR>>> >=20
oField:oDataset:c_nomlogo } ) <-- Esto s=ED =
funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > =
oField:OnSetValue=20
:=3D {|oField, Value | SaveLogo( oField:oDataSet,<BR>>> > =
Value )=20
}<BR>>> > <--- esto no lo eval=FAa nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( =
Value )=20
<---- esto no se eval=FAa nunca<BR>>> ><BR>>> =
>=20
::oDataset:c_nomlogo :=3D Value<BR>>> ><BR>>> > =
Return=20
nil<BR>>> ><BR>>> > Un Saludo,<BR>>>=20
><BR>>> > Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_00BD_01C58160.E7F65050--
------=_NextPart_000_00BC_01C58160.E7F65050
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <00b701c58150$23a9e230$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_00BC_01C58160.E7F65050--
Attached files
------=_NextPart_000_00BC_01C58160.E7F65050
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_00BD_01C58160.E7F65050"
------=_NextPart_001_00BD_01C58160.E7F65050
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Ignacio,
Mira, dejo ya este tema porque leemos muy diferente, la forma en que =
funciona me parece bien como otra cualquiera, simplemente te comentaba =
que no estaba tan claro.
Estoy "harto" de leerme la documentaci=F3n, no te creas que ni la he =
visto, conozco los eventos de TDataSet y s=E9 que se podr=EDa hacer de =
esa manera o de otras 1000 diferentes, pero si estoy usando el update() =
con datacontrols quer=EDa hacerlo por ese camino.
Un Saludo y gracias por tu tiempo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca5ebc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro

Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que disparar autom=E1ticamente oField:OnSetValue en cada =
llamada a Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente =
actualice el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un =
control que no se pueda salvar tal cual, le asigno el valor al campo =
calculado, y luego s=F3lo cuando haga update() ya cada campo real tiene =
su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica de =
como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField =
| oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | Salvar( =
oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y en vez =
de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que =
ser=EDa incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 =
en el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha cambiado, =
pues se queda igual

> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas =
al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n de =
los datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me comentas =
al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy =
con el buffer
> por lo que en ese momento no quiero guardarlo en la base de =
datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como segundo =
parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en =
el mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo =
lee pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y nunca =
llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_00BD_01C58160.E7F65050
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, dejo ya este tema porque leemos =
muy=20
diferente, la forma en que funciona me parece bien como otra cualquiera, =
simplemente te comentaba que no estaba tan claro.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Estoy "harto" de leerme la =
documentaci=F3n, no te=20
creas que ni la he visto, conozco los eventos de <FONT size=3D3>TDataSet =
y s=E9 que=20
se podr=EDa hacer de esa manera o de otras 1000 diferentes, pero si =
estoy usando=20
el update() con datacontrols quer=EDa hacerlo por ese =
camino.</FONT></FONT></DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial>Un Saludo y gracias por tu tiempo,</FONT></DIV>
<DIV><FONT face=3DArial>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca5ebc$1@ozsrvnegro.ozlan.local">news:42ca5ebc$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo=20
cuanto antes. Muchas gracias.<BR><FONT face=3DArial =
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, 6, =
4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-)=20
</DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(),=20
no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el =
valor del=20
campo con el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy seguro=20
que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas=20
lagunas al respecto. Te aconsejo que te detengas en el evento =
OnPreSave del=20
TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo cuanto antes. Muchas gracias.<BR></FONT><FONT =
face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, =
6, 4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me da =
la impresi=F3n=20
de que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en cada=20
"valid" de un control que no se pueda salvar tal cual, le asigno el =
valor al=20
campo calculado, y luego s=F3lo cuando haga update() ya cada campo =
real tiene=20
su valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge =
como primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera=20
la siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D =
::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | oField:oDataset:CampoReal =
}=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT =
face=3DArial size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio |=20
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update() y en=20
vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque=20
el campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente=20
yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara cada=20
campo y el<BR>> calculado de la forma que le indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual

<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no est=E1n =
en modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el=20
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:00b701c58150$23a9e230$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles=20
el nuevo valor. Perd=F3name pero esÂcomo lo llevas haciendo =
toda tu=20
vida. No puedo entender la complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso viendo =
la=20
ayuda pens=E9 que<BR>> el evento saltaba al hacer Update() en =
la=20
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes.=20
Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la =
documentaci=F3n de los=20
datacontrols. Y all=ED comprobar=E1s la existencia de disparadores =
que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de la =
forma=20
que le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> =
pues si se hace=20
como dices da error de "requiere bloqueo".<BR>> <BR>> Si =
tengo 20=20
campos normales y 3 calculados, seg=FAn me comentas al =
hacer<BR>>=20
Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos<BR>>=20
manualmente???<BR>> <BR>> Y aparte, si estoy en un "edit()" =
al hacer=20
lo que dices estoy con el buffer<BR>> por lo que en ese momento =
no=20
quiero guardarlo en la base de datos.<BR>> <BR>> No entiendo =
muy=20
bien como trabaja, porque incluso viendo la ayuda pens=E9 =
que<BR>> el=20
evento saltaba al hacer Update() en la base.<BR>> <BR>> Un=20
Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> <BR>> =
"Ignacio Ortiz=20
de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando hagas =
algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D "lo =
que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la =
funci=F3n SaveLogo()=20
como segundo parametro dicho<BR>>> =
valor.<BR>>><BR>>>=20
Un saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez"=20
<<A =
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar por =
primera=20
vez un campo calculado, y lo lee pero no<BR>> lo<BR>>> =
>=20
graba, este es el c=F3digo, es igual que en la ayuda y nunca llega =
a<BR>>=20
grabar<BR>>> > ni<BR>>> > a mostrar el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|<BR>>> >=20
oField:oDataset:c_nomlogo } ) <-- Esto s=ED =
funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > =
oField:OnSetValue=20
:=3D {|oField, Value | SaveLogo( oField:oDataSet,<BR>>> > =
Value )=20
}<BR>>> > <--- esto no lo eval=FAa nunca<BR>>>=20
><BR>>> ><BR>>> ><BR>>> > Function =
SaveLogo(=20
oDataSet, Value )<BR>>> ><BR>>> > logdebug( =
Value )=20
<---- esto no se eval=FAa nunca<BR>>> ><BR>>> =
>=20
::oDataset:c_nomlogo :=3D Value<BR>>> ><BR>>> > =
Return=20
nil<BR>>> ><BR>>> > Un Saludo,<BR>>>=20
><BR>>> > Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>
------=_NextPart_001_00BD_01C58160.E7F65050--
------=_NextPart_000_00BC_01C58160.E7F65050
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <00b701c58150$23a9e230$[email=300aa8c0@AcerJoaquin]300aa8c0@AcerJoaquin[/email]>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_00BC_01C58160.E7F65050--
Attached files
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
No me funcionan los campos calculados
This is a multi-part message in MIME format.
------=_NextPart_000_0013_01C5816F.DA8E9EE0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0014_01C5816F.DA8E9EE0"
------=_NextPart_001_0014_01C5816F.DA8E9EE0
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaqu=EDn,=20
Siento que est=E9s harto de leer la documentaci=F3n, pero creo que es =
importante.
Yo por mi parte intento tener paciencia infinita para explicar como =
funciona Xailer y no me canso de reconocer y arreglar errores cuando los =
hay, y de intentar explicar que se est=E1 haciendo mal cuando realmente =
creo que no es un error.=20
Realmente, y has de reconocerlo, tu inter=E9s es sencillamente de que no =
te gusta como Xailer hace una determinada tarea, y te gustar=EDa que se =
hiciese de otra forma, de tu forma. Yo estoy completamente abierto a =
modificaciones cuando cualquier usuario me demuestra que estoy =
equivocado en como hace Xailer una determinadla tarea, pero creo que =
diciendo que falla el c=F3digo o falla la documentaci=F3n, sin m=E1s, no =
es el camino.
Si somos capaces de mantener una conversaci=F3n inteligente, y no =
cerrarnos cada uno en nuestras convicciones previas estar=E9 encantado =
de revisar cualquier propuesta de modificaci=F3n de Xailer que nos =
hagas.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca6748@ozsrvnegro.ozlan.local...]42ca6748@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Mira, dejo ya este tema porque leemos muy diferente, la forma en que =
funciona me parece bien como otra cualquiera, simplemente te comentaba =
que no estaba tan claro.
Estoy "harto" de leerme la documentaci=F3n, no te creas que ni la he =
visto, conozco los eventos de TDataSet y s=E9 que se podr=EDa hacer de =
esa manera o de otras 1000 diferentes, pero si estoy usando el update() =
con datacontrols quer=EDa hacerlo por ese camino.
Un Saludo y gracias por tu tiempo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca5ebc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro
=20
Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que disparar autom=E1ticamente oField:OnSetValue en cada =
llamada a Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente =
actualice el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un =
control que no se pueda salvar tal cual, le asigno el valor al campo =
calculado, y luego s=F3lo cuando haga update() ya cada campo real tiene =
su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica =
de como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| =
oField | oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | =
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y =
en vez de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que =
ser=EDa incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha =
cambiado, pues se queda igual
> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los datacontrols. Y all=ED comprobar=E1s la existencia de =
disparadores que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy =
con el buffer
> por lo que en ese momento no quiero guardarlo en la base de =
datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como =
segundo parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en =
el mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo =
lee pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y =
nunca llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0014_01C5816F.DA8E9EE0
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>Siento queÂest=E9s harto de leer la documentaci=F3n, pero creo =
que es=20
importante.</DIV>
<DIV>Â</DIV>
<DIV>Yo por mi parte intento tener paciencia infinita para explicar como =
funciona Xailer y no me canso de reconocer y arreglarÂerrores =
cuando los=20
hay, y de intentar explicar que se est=E1 haciendo mal cuando realmente =
creo=20
queÂno es un error. </DIV>
<DIV>Â</DIV>
<DIV>Realmente, y has de reconocerlo, tu inter=E9s es sencillamente de =
que no te=20
gusta como Xailer hace una determinada tarea, y te gustar=EDa que se =
hiciese de=20
otra forma, de tu forma. Yo estoy completamente abierto a modificaciones =
cuando=20
cualquier usuario me demuestra que estoy equivocado en como hace Xailer =
una=20
determinadla tarea, pero creo que diciendo que falla el c=F3digo o falla =
la=20
documentaci=F3n, sin m=E1s, no es el camino.</DIV>
<DIV>Â</DIV>
<DIV>Si somos capaces de mantener una conversaci=F3n inteligente, y no =
cerrarnos=20
cada uno en nuestras convicciones previas estar=E9 encantado de revisar =
cualquier=20
propuesta de modificaci=F3n de Xailer que nos hagas.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<DIV>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca6748@ozsrvnegro.ozlan.local">news:42ca6748@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, dejo ya este tema porque leemos =
muy=20
diferente, la forma en que funciona me parece bien como otra =
cualquiera,=20
simplemente te comentaba que no estaba tan claro.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Estoy "harto" de leerme la =
documentaci=F3n, no te=20
creas que ni la he visto, conozco los eventos de <FONT =
size=3D3>TDataSet y s=E9=20
que se podr=EDa hacer de esa manera o de otras 1000 diferentes, pero =
si estoy=20
usando el update() con datacontrols quer=EDa hacerlo por ese=20
camino.</FONT></FONT></DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial>Un Saludo y gracias por tu =
tiempo,</FONT></DIV>
<DIV><FONT face=3DArial>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca5ebc$1@ozsrvnegro.ozlan.local">news:42ca5ebc$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo cuanto antes. Muchas gracias.<BR><FONT face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, =
6, 4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-)=20
</DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que =
se ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(),=20
no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el =
valor del=20
campo con el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy=20
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo =
que tienes=20
muchas lagunas al respecto. Te aconsejo que te detengas en el evento =
OnPreSave del TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n =
para=20
corregirlo cuanto antes. Muchas gracias.<BR></FONT><FONT =
face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value |=20
Salvar( oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
=
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left( Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( =
Value, 6,=20
4 )<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( =
Value, 14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me =
da la=20
impresi=F3n de que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en=20
cada "valid" de un control que no se pueda salvar tal cual, le =
asigno el=20
valor al campo calculado, y luego s=F3lo cuando haga update() ya =
cada campo=20
real tiene su valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge =
como primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D =
::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | =
oField:oDataset:CampoReal }=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT =
face=3DArial size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio=20
| Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update()=20
y en vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque=20
el campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n =
salvar(),=20
internamente yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara=20
cada campo y el<BR>> calculado de la forma que le =
indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual
</DIV>
<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no =
est=E1n en modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField =
pero no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000e01c5815f$16feca00$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas=20
al hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por =
uno habr=EDa=20
que grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero esÂcomo lo =
llevas=20
haciendo toda tu vida. No puedo entender la =
complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso =
viendo la=20
ayuda pens=E9 que<BR>> el evento saltaba al hacer Update() en =
la=20
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto=20
antes. Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la =
documentaci=F3n de=20
los datacontrols. Y all=ED comprobar=E1s la existencia de =
disparadores que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de =
la forma=20
que le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> =
pues si se=20
hace como dices da error de "requiere bloqueo".<BR>> <BR>> =
Si=20
tengo 20 campos normales y 3 calculados, seg=FAn me comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR>> <BR>> Y aparte, si =
estoy en=20
un "edit()" al hacer lo que dices estoy con el buffer<BR>> =
por lo que=20
en ese momento no quiero guardarlo en la base de datos.<BR>> =
<BR>>=20
No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9=20
que<BR>> el evento saltaba al hacer Update() en la =
base.<BR>>=20
<BR>> Un Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> =
<BR>>=20
"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando =
hagas algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D =
"lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la =
funci=F3n=20
SaveLogo() como segundo parametro dicho<BR>>>=20
valor.<BR>>><BR>>> UnÂ=20
saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar =
por=20
primera vez un campo calculado, y lo lee pero no<BR>> =
lo<BR>>>=20
> graba, este es el c=F3digo, es igual que en la ayuda y =
nunca llega=20
a<BR>> grabar<BR>>> > ni<BR>>> > a mostrar =
el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|<BR>>>=20
> oField:oDataset:c_nomlogo } ) <-- Esto s=ED =
funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> >=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo(=20
oField:oDataSet,<BR>>> > Value ) }<BR>>> > =
<---=20
esto no lo eval=FAa nunca<BR>>> ><BR>>> =
><BR>>>=20
><BR>>> > Function SaveLogo( oDataSet, Value =
)<BR>>>=20
><BR>>> > logdebug( Value ) <---- esto no se =
eval=FAa=20
nunca<BR>>> ><BR>>> > ::oDataset:c_nomlogo =
:=3D=20
Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> =
>=20
Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY ></HTML>
------=_NextPart_001_0014_01C5816F.DA8E9EE0--
------=_NextPart_000_0013_01C5816F.DA8E9EE0
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000e01c5815f$16feca00$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0013_01C5816F.DA8E9EE0--
Attached files
------=_NextPart_000_0013_01C5816F.DA8E9EE0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0014_01C5816F.DA8E9EE0"
------=_NextPart_001_0014_01C5816F.DA8E9EE0
Content-Type: text/plain;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Joaqu=EDn,=20
Siento que est=E9s harto de leer la documentaci=F3n, pero creo que es =
importante.
Yo por mi parte intento tener paciencia infinita para explicar como =
funciona Xailer y no me canso de reconocer y arreglar errores cuando los =
hay, y de intentar explicar que se est=E1 haciendo mal cuando realmente =
creo que no es un error.=20
Realmente, y has de reconocerlo, tu inter=E9s es sencillamente de que no =
te gusta como Xailer hace una determinada tarea, y te gustar=EDa que se =
hiciese de otra forma, de tu forma. Yo estoy completamente abierto a =
modificaciones cuando cualquier usuario me demuestra que estoy =
equivocado en como hace Xailer una determinadla tarea, pero creo que =
diciendo que falla el c=F3digo o falla la documentaci=F3n, sin m=E1s, no =
es el camino.
Si somos capaces de mantener una conversaci=F3n inteligente, y no =
cerrarnos cada uno en nuestras convicciones previas estar=E9 encantado =
de revisar cualquier propuesta de modificaci=F3n de Xailer que nos =
hagas.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca6748@ozsrvnegro.ozlan.local...]42ca6748@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Mira, dejo ya este tema porque leemos muy diferente, la forma en que =
funciona me parece bien como otra cualquiera, simplemente te comentaba =
que no estaba tan claro.
Estoy "harto" de leerme la documentaci=F3n, no te creas que ni la he =
visto, conozco los eventos de TDataSet y s=E9 que se podr=EDa hacer de =
esa manera o de otras 1000 diferentes, pero si estoy usando el update() =
con datacontrols quer=EDa hacerlo por ese camino.
Un Saludo y gracias por tu tiempo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> escribi=F3 en =
el mensaje news:42ca5ebc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaquin,=20
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
Caray, pues tienes much=EDsima imaginaci=F3n te lo aseguro

Como viendo ese c=F3digo has llegado a la conclusi=F3n de que se =
ten=EDa que disparar autom=E1ticamente oField:OnSetValue en cada =
llamada a Update(), no TIENE MUCHO M=C1S SENTIDO, que Update simplemente =
actualice el valor del campo con el valor de su buffer, y punto.
Insisto, por favor lee la documentaci=F3n de los DataControls. Estoy =
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo que =
tienes muchas lagunas al respecto. Te aconsejo que te detengas en el =
evento OnPreSave del TDataSet, puede que te sea de utilidad.
Un saludo,
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42ca588e@ozsrvnegro.ozlan.local...]42ca588e@ozsrvnegro.ozlan.local...[/email]
Ignacio,
>>>> Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto antes. Muchas gracias.
oField:OnSetValue :=3D {|oField, Value | Salvar( oField, Value ) }
Function Salvar( oField, Value )
WITH OBJECT oField:oDataSet
:Banco :=3D Left( Value, 4 )
:Sucursal :=3D Substr( Value, 6, 4 )
:DigControl :=3D Substr( Value, 11, 2 )
:Cuenta :=3D Substr( Value, 14, 10 )
END WITH
RETURN NIL
---------> Aqu=ED es donde me da la impresi=F3n de que el evento =
saltar=E1 al salvar
Mira, ya he entendido tu planteamiento, en cada "valid" de un =
control que no se pueda salvar tal cual, le asigno el valor al campo =
calculado, y luego s=F3lo cuando haga update() ya cada campo real tiene =
su valor.
Y mi planteamiento que me surge como primera impresi=F3n l=F3gica =
de como lo iba a hacerlo despu=E9s de leer la ayuda era la siguiente:
oField :=3D ::oDatosemp:AddCalcField( "MiCampoFicticio", {| =
oField | oField:oDataset:CampoReal } )
oField:OnSetValue :=3D {|oField, Value_de_MiCampoFicticio | =
Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer Update() y =
en vez de hacer internamente algo como:
Replace (alias)->MiCampoFicticio WITH value ( Que =
ser=EDa incorrecto porque el campo no existe )
Har=EDa el replace que yo le indique en mi funci=F3n salvar(), =
internamente yo lo ver=EDa como:
Reclock()
Replaces autom=E1ticos por xailer
Replaces seg=FAn usuario de campos calculados
commit()
RecUnlock()
Un Saludo,
Joaqu=EDn
"Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Joaqu=EDn,=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico,
Update() graba el valor de su buffer. Si el buffer no ha =
cambiado, pues se queda igual

> pues si se hace como dices da error de "requiere bloqueo".
Si te da error de bloqueo es sencillamente porque no est=E1n en =
modo Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero =
no su valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todo VarPut().=20
No obstante, y de la documentaci=F3n:
> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero es como lo llevas haciendo =
toda tu vida. No puedo entender la complicaci=F3n.
ODATAFIELD:VALUE :=3D NUEVO VALOR
Y da igual que sea campo calculado que no.
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
Dime exactamente donde da esa impresi=F3n para corregirlo cuanto =
antes. Muchas gracias.
Te recomiendo que le eches un gran vistazo a la documentaci=F3n =
de los datacontrols. Y all=ED comprobar=E1s la existencia de =
disparadores que posiblemente puedan serte de ayuda.
Un saludo,=20
"Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en el =
mensaje news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>=20
> Yo lo que quer=EDa es que al hacer oDataset:Update(), salvara =
cada campo y el
> calculado de la forma que le indico, porque adem=E1s no tiene =
mucha l=F3gica
> pues si se hace como dices da error de "requiere bloqueo".
>=20
> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas al hacer
> Update() grabar=EDa s=F3lo 20 y luego uno por uno habr=EDa que =
grabarlos
> manualmente???
>=20
> Y aparte, si estoy en un "edit()" al hacer lo que dices estoy =
con el buffer
> por lo que en ese momento no quiero guardarlo en la base de =
datos.
>=20
> No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9 que
> el evento saltaba al hacer Update() en la base.
>=20
> Un Saludo,
> Joaqu=EDn
>=20
>=20
>=20
> "Ignacio Ortiz de Z=FA=F1iga" <InvalidAccount@ozs.com> =
escribi=F3 en el mensaje
> news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> El evento se evalua cuando hagas algo as=ED:
>>
>> oDataSet:MiCampoCalculado :=3D "lo que sea"
>>
>> Y entonces recibir=E1s en la funci=F3n SaveLogo() como =
segundo parametro dicho
>> valor.
>>
>> Un saludo,
>>
>>
>> "Joaqu=EDn Mart=EDnez" <jmartial@interbook.net> escribi=F3 en =
el mensaje
>> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > He intentado usar por primera vez un campo calculado, y lo =
lee pero no
> lo
>> > graba, este es el c=F3digo, es igual que en la ayuda y =
nunca llega a
> grabar
>> > ni
>> > a mostrar el logdebug:
>> >
>> > oField :=3D :Datosemp:AddCalcField( "MiField_c_nomlogo", {| =
oField |
>> > oField:oDataset:c_nomlogo } ) <-- Esto s=ED funciona
>> >
>> >
>> >
>> > oField:OnSetValue :=3D {|oField, Value | SaveLogo( =
oField:oDataSet,
>> > Value ) }
>> > <--- esto no lo eval=FAa nunca
>> >
>> >
>> >
>> > Function SaveLogo( oDataSet, Value )
>> >
>> > logdebug( Value ) <---- esto no se eval=FAa nunca
>> >
>> > ::oDataset:c_nomlogo :=3D Value
>> >
>> > Return nil
>> >
>> > Un Saludo,
>> >
>> > Joaqu=EDn
>> >
>> >
>>
>>
>=20
>
------=_NextPart_001_0014_01C5816F.DA8E9EE0
Content-Type: text/html;
charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1252">
<META content=3D"MSHTML 6.00.2900.2668" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>Siento queÂest=E9s harto de leer la documentaci=F3n, pero creo =
que es=20
importante.</DIV>
<DIV>Â</DIV>
<DIV>Yo por mi parte intento tener paciencia infinita para explicar como =
funciona Xailer y no me canso de reconocer y arreglarÂerrores =
cuando los=20
hay, y de intentar explicar que se est=E1 haciendo mal cuando realmente =
creo=20
queÂno es un error. </DIV>
<DIV>Â</DIV>
<DIV>Realmente, y has de reconocerlo, tu inter=E9s es sencillamente de =
que no te=20
gusta como Xailer hace una determinada tarea, y te gustar=EDa que se =
hiciese de=20
otra forma, de tu forma. Yo estoy completamente abierto a modificaciones =
cuando=20
cualquier usuario me demuestra que estoy equivocado en como hace Xailer =
una=20
determinadla tarea, pero creo que diciendo que falla el c=F3digo o falla =
la=20
documentaci=F3n, sin m=E1s, no es el camino.</DIV>
<DIV>Â</DIV>
<DIV>Si somos capaces de mantener una conversaci=F3n inteligente, y no =
cerrarnos=20
cada uno en nuestras convicciones previas estar=E9 encantado de revisar =
cualquier=20
propuesta de modificaci=F3n de Xailer que nos hagas.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<DIV>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca6748@ozsrvnegro.ozlan.local">news:42ca6748@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>Ignacio,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, dejo ya este tema porque leemos =
muy=20
diferente, la forma en que funciona me parece bien como otra =
cualquiera,=20
simplemente te comentaba que no estaba tan claro.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Estoy "harto" de leerme la =
documentaci=F3n, no te=20
creas que ni la he visto, conozco los eventos de <FONT =
size=3D3>TDataSet y s=E9=20
que se podr=EDa hacer de esa manera o de otras 1000 diferentes, pero =
si estoy=20
usando el update() con datacontrols quer=EDa hacerlo por ese=20
camino.</FONT></FONT></DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial></FONT>Â</DIV>
<DIV><FONT face=3DArial>Un Saludo y gracias por tu =
tiempo,</FONT></DIV>
<DIV><FONT face=3DArial>Joaqu=EDn</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>> =
escribi=F3=20
en el mensaje <A=20
=
href=3D"news:42ca5ebc$1@ozsrvnegro.ozlan.local">news:42ca5ebc$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaquin, </DIV>
<DIV>Â</DIV>
<DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n para =
corregirlo cuanto antes. Muchas gracias.<BR><FONT face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value | Salvar(=20
oField, Value ) }</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â =
:=3D Left(=20
Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( Value, =
6, 4=20
)<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( Value, =
14, 10=20
)<BR>ÂEND WITH</FONT></DIV></DIV>
<DIV>Â</DIV>
<DIV>Caray, puesÂtienes much=EDsima imaginaci=F3n te lo =
aseguroÂ;-)=20
</DIV>
<DIV>Â</DIV>
<DIV>Como viendo ese c=F3digo has llegado a la conclusi=F3n de que =
se ten=EDa que=20
disparar autom=E1ticamente oField:OnSetValue en cada llamada a =
Update(),=20
no TIENE MUCHO M=C1S SENTIDO, que Update simplemente actualice el =
valor del=20
campo con el valor de su buffer, y punto.</DIV>
<DIV>Â</DIV>
<DIV>Insisto, por favor lee la documentaci=F3n de los DataControls. =
Estoy=20
seguro que lo ver=E1s mucho m=E1s claro. Leyendo tus comentarios veo =
que tienes=20
muchas lagunas al respecto. Te aconsejo que te detengas en el evento =
OnPreSave del TDataSet, puede que te sea de utilidad.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo,</DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca588e@ozsrvnegro.ozlan.local">news:42ca588e@ozsrvnegro.oz=
lan.local</A>...</DIV>
<DIV><FONT face=3DArial size=3D2>
<DIV>Ignacio,</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>>>>> Dime exactamente donde da esa impresi=F3n =
para=20
corregirlo cuanto antes. Muchas gracias.<BR></FONT><FONT =
face=3DArial=20
size=3D2></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>oField:OnSetValue :=3D {|oField, =
Value |=20
Salvar( oField, Value ) }</FONT></DIV></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Function Salvar( oField, Value =
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>ÂWITH OBJECT=20
=
oField:oDataSet<BR> ÂÂ:BancoÂÂÂ& ;nbsp;Â :=3D =
Left( Value, 4 )<BR>ÂÂ:SucursalÂÂ :=3D Substr( =
Value, 6,=20
4 )<BR>ÂÂ:DigControl :=3D Substr( Value, 11, 2=20
)<BR> ÂÂ:CuentaÂÂÂ&am p;nbsp; :=3D Substr( =
Value, 14, 10=20
)<BR>ÂEND WITH</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>RETURN NIL</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>---------> Aqu=ED es donde me =
da la=20
impresi=F3n de que el evento saltar=E1 al salvar</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Mira, ya he entendido tu =
planteamiento, en=20
cada "valid" de un control que no se pueda salvar tal cual, le =
asigno el=20
valor al campo calculado, y luego s=F3lo cuando haga update() ya =
cada campo=20
real tiene su valor.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Y mi planteamiento que me surge =
como primera=20
impresi=F3n l=F3gica de como lo iba a hacerlo despu=E9s de leer la =
ayudaÂera la siguiente:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>oField :=3D =
::oDatosemp:AddCalcField(=20
"MiCampoFicticio",ÂÂ {| oField | =
oField:oDataset:CampoReal }=20
)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV><FONT =
face=3DArial size=3D2>
<DIV><FONT face=3DTahoma size=3D3></FONT><FONT face=3DTahoma=20
size=3D3></FONT><BR>oField:OnSetValue :=3D {|oField, =
Value_de_MiCampoFicticio=20
| Salvar( oField, Value ) } <---- Esto se ejecutar=EDa al hacer =
Update()=20
y en vez de hacer internamente algo como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV> ÂÂÂÂÂÂ ÂÂÂÂ =
Replace=20
(alias)->MiCampoFicticio WITH value ( Que ser=EDa =
incorrecto porque=20
el campo no existe )</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Har=EDa el replace que yo le indique en mi funci=F3n =
salvar(),=20
internamente yo lo ver=EDa como:</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Reclock()</DIV>
<DIV>Replaces autom=E1ticos por xailer</DIV>
<DIV>Replaces seg=FAn usuario de campos calculados</DIV>
<DIV>commit()</DIV>
<DIV>RecUnlock()</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Un Saludo,</DIV>
<DIV>Joaqu=EDn</DIV>
<DIV><FONT face=3DTahoma size=3D3></FONT>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV>Â</DIV>
<DIV></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<BLOCKQUOTE=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV>"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42ca3d06$1@ozsrvnegro.ozlan.local">news:42ca3d06$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...</DIV>
<DIV>Joaqu=EDn, </DIV>
<DIV>Â</DIV>
<DIV>> Yo lo que quer=EDa es que al hacer oDataset:Update(), =
salvara=20
cada campo y el<BR>> calculado de la forma que le =
indico,</DIV>
<DIV>Â</DIV>
<DIV>Update() graba el valor de su buffer. Si el buffer no ha =
cambiado,=20
puesÂse queda igual

<DIV>Â</DIV>
<DIV>> pues si se hace como dices da error de "requiere=20
bloqueo".<BR></DIV>
<DIV>Si te da error de bloqueo es sencillamente porque no =
est=E1n en modo=20
Edit() o AddNew(). Si quieres cambiar el buffer del DataField =
pero no su=20
valor en la base de datos sin estar en modo edici=F3n, tienes el =
m=E9todoÂVarPut(). </DIV>
<DIV>Â</DIV>
<DIV>No obstante, yÂde la documentaci=F3n:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0=20
src=3D"cid:000e01c5815f$16feca00$0e00000a@ozlan.local" =
align=3Dbaseline=20
border=3D0></DIV>
<DIV>Â</DIV>
<DIV>> Si tengo 20 campos normales y 3 calculados, seg=FAn me =
comentas=20
al hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por =
uno habr=EDa=20
que grabarlos<BR>> manualmente???<BR></DIV>
<DIV>Me temo que yo no he dicho eso. Tan s=F3lo digo que hay que =
asignarles el nuevo valor. Perd=F3name pero esÂcomo lo =
llevas=20
haciendo toda tu vida. No puedo entender la =
complicaci=F3n.</DIV>
<DIV>Â</DIV>
<DIV>ODATAFIELD:VALUE :=3D NUEVO VALOR</DIV>
<DIV>Â</DIV>
<DIV>Y da igual que sea campo calculado que no.</DIV>
<DIV>Â</DIV>
<DIV>> No entiendo muy bien como trabaja, porque incluso =
viendo la=20
ayuda pens=E9 que<BR>> el evento saltaba al hacer Update() en =
la=20
base.</DIV>
<DIV>Â</DIV>
<DIV>Dime exactamente donde da esa impresi=F3n para corregirlo =
cuanto=20
antes. Muchas gracias.<BR></DIV>
<DIV>Te recomiendo que le eches un gran vistazo a la =
documentaci=F3n de=20
los datacontrols. Y all=ED comprobar=E1s la existencia de =
disparadores que=20
posiblemente puedan serte de ayuda.</DIV>
<DIV>Â</DIV>
<DIV>Un saludo, </DIV>
<DIV>Â</DIV>
<DIV>"Joaqu=EDn Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje <A=20
=
href=3D"news:42c969d9@ozsrvnegro.ozlan.local">news:42c969d9@ozsrvnegro.oz=
lan.local</A>...</DIV>>=20
Ignacio,<BR>> <BR>> Yo lo que quer=EDa es que al hacer=20
oDataset:Update(), salvara cada campo y el<BR>> calculado de =
la forma=20
que le indico, porque adem=E1s no tiene mucha l=F3gica<BR>> =
pues si se=20
hace como dices da error de "requiere bloqueo".<BR>> <BR>> =
Si=20
tengo 20 campos normales y 3 calculados, seg=FAn me comentas al=20
hacer<BR>> Update() grabar=EDa s=F3lo 20 y luego uno por uno =
habr=EDa que=20
grabarlos<BR>> manualmente???<BR>> <BR>> Y aparte, si =
estoy en=20
un "edit()" al hacer lo que dices estoy con el buffer<BR>> =
por lo que=20
en ese momento no quiero guardarlo en la base de datos.<BR>> =
<BR>>=20
No entiendo muy bien como trabaja, porque incluso viendo la =
ayuda pens=E9=20
que<BR>> el evento saltaba al hacer Update() en la =
base.<BR>>=20
<BR>> Un Saludo,<BR>> Joaqu=EDn<BR>> <BR>> <BR>> =
<BR>>=20
"Ignacio Ortiz de Z=FA=F1iga" <<A=20
=
href=3D"mailto:InvalidAccount@ozs.com">InvalidAccount@ozs.com</A>>=20
escribi=F3 en el mensaje<BR>> <A=20
=
href=3D"news:42c96648$1@ozsrvnegro.ozlan.local">news:42c96648$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
Joaquin,<BR>>><BR>>> El evento se evalua cuando =
hagas algo=20
as=ED:<BR>>><BR>>> oDataSet:MiCampoCalculado :=3D =
"lo que=20
sea"<BR>>><BR>>> Y entonces recibir=E1s en la =
funci=F3n=20
SaveLogo() como segundo parametro dicho<BR>>>=20
valor.<BR>>><BR>>> UnÂ=20
saludo,<BR>>><BR>>><BR>>> "Joaqu=EDn =
Mart=EDnez" <<A=20
=
href=3D"mailto:jmartial@interbook.net">jmartial@interbook.net</A>>=20
escribi=F3 en el mensaje<BR>>> <A=20
=
href=3D"news:42c91e5d$1@ozsrvnegro.ozlan.local">news:42c91e5d$[email=1@ozsrvnegr]1@ozsrvnegr[/email]=
o.ozlan.local</A>...<BR>>>=20
> Hola,<BR>>> ><BR>>> > He intentado usar =
por=20
primera vez un campo calculado, y lo lee pero no<BR>> =
lo<BR>>>=20
> graba, este es el c=F3digo, es igual que en la ayuda y =
nunca llega=20
a<BR>> grabar<BR>>> > ni<BR>>> > a mostrar =
el=20
logdebug:<BR>>> ><BR>>> > oField :=3D=20
:Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField =
|<BR>>>=20
> oField:oDataset:c_nomlogo } ) <-- Esto s=ED =
funciona<BR>>>=20
><BR>>> ><BR>>> ><BR>>> >=20
oField:OnSetValue :=3D {|oField, Value | SaveLogo(=20
oField:oDataSet,<BR>>> > Value ) }<BR>>> > =
<---=20
esto no lo eval=FAa nunca<BR>>> ><BR>>> =
><BR>>>=20
><BR>>> > Function SaveLogo( oDataSet, Value =
)<BR>>>=20
><BR>>> > logdebug( Value ) <---- esto no se =
eval=FAa=20
nunca<BR>>> ><BR>>> > ::oDataset:c_nomlogo =
:=3D=20
Value<BR>>> ><BR>>> > Return nil<BR>>>=20
><BR>>> > Un Saludo,<BR>>> ><BR>>> =
>=20
Joaqu=EDn<BR>>> ><BR>>>=20
><BR>>><BR>>><BR>> <BR>>=20
</BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY ></HTML>
------=_NextPart_001_0014_01C5816F.DA8E9EE0--
------=_NextPart_000_0013_01C5816F.DA8E9EE0
Content-Type: image/png;
name="Image1.png"
Content-Transfer-Encoding: base64
Content-ID: <000e01c5815f$16feca00$0e00000a@ozlan.local>
iVBORw0KGgoAAAANSUhEUgAAAoQAAAG8CAMAAABwqEQgAAAAB3RJTUUH1QcF BywC2akXGQAAAAlw
SFlzAAAOwwAADsMBx2+oZAAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAA AAAA/1NTRtAAADN6
SURBVHja7V2JduSqDkTz/x/9zkvaoKVKgO3eclVnJt1m0UYZG6M4rRUKhUKh UCgUCoVCoVAgkB+4
kuaKVF0mydQ/vmY9CoUf/JBEM8VxCbRO6gIJi4OFOe4lYaGwBvGc68T7vRA/ LtCPy/S4Wv/UmpLx
/VGn6nXT3vPdrhc+BPYmsN8TKiKG/4+WTXyhZa871odSE2VBwZOw5QTUJGwJ CX0dlVMorJNQXVZb
ixVdVpGwsI30nhBOdv2LZxObEVuRsLAOTULJyHjtnrBIWOAYF1dHHLWy7U0v rI5//7/b20KhUCgU
CoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC oVAofCJE7KtpjmL9
i+r0ZYVXdd8tcC5L4oGcU6tfCYAqw6/6SyrljDN5a9kVEwZ8y+KLYyeLZVuN VgQ89X0MCyRsj1cm
Xhria4PyFBLSLqtiioQ34ckknDrxbhJeEfMuEv5clNR7ZR4j1N+venw7WvTx G+860k36S167kiHJ
ye26nKKHbePQWSde41DzaONk2dLWvXZeuQ9f4jzTZeptPMCd46V6xMqgqKn3 ipJgCrZZkIig7bBT
G2i7SQPBiIXCG9MX8BMSGiqIiqL5FspjoTlqzuMW5QpTpMwSppTYEOpb86XR d2gjNV5VQjtQUJrp
He2RhjsRe5jNVIQRM87PZAxhMGZKg6XLJGxAB9PbvF4+hsqaxvtDR+Kw4Aac Faks67vtTM8gG6mG
tFoGep0wzjhKuCIGE5k+O5NaZ2DOMhfClhbC8m0SPt7pNidhb6gD73vrV8L6 uAmbfZSUOQmNRis4
IaHoa0vsPC645nW0o2JobkirmwZN1cFEYOWUhDiY5u32KyTUYoDtngH2BgLH tQ8marxLQjgtIafC
mRJnEKceVkqqck7CWSWfCRsxJ84q2pigriUmCamaqKUkpM2iaykJtS9ZxIRE QYC2rPEJEuIbNDhj
LRGAs0/ct6jopx9S4+8HaSUl4cSqWbOjaUMdPQn9ZL2ryCoBjkzCyCcHPOZz ORMyRKU7JFQLqENW
WG0dR9bI2ASvjtWbW0VLgip/zTKXwGb62qV1FOdkNX+1kK4CrVbpolXp8eEI JHSrf+N+sMcrcoM5
nqoLCQodr4a1gRj2VbyRM1kdD2dJ5D4fsl33JY4Vvgd7JFyf4QuFZWzOhF8z wxcKhUKhUCh8JWSp
6IxYSerutnkmUtaa3WjRWjPZ6U1kmj87qIVR4TidFNj2xhvxm0h4Rb5s1sqk 54csayQcH89rzxso
9IB6vkb9IuFmbZFwx8/PIKHK2FOJPekOgs8qFFcZn/yb3YLeqZnn7K2Ffj1X r4sR1zwKGCUudw9s
woC8vcQzklMJ3IUtc8MHCYnZODbeNatAEqNMFzcwKA80G6nrJDw40joJNXP0 TlS/nTJbdgIr3ebi
cHV0alFwA4JdL9s8LZGWW++kTj1DZlF3Y8vMcGTrNDYSXRtJSJOU0EDC3Ofc muskdBFk7JDQxVVY
82wDO+njTs3rwGMSVcXYNNrTx3Xan6qLJgXFuCUeQuxlYMucqMDHRrz9qbCZ bdxnSsI7gEiIcsxA
lphKYov5daaBDL9AvqBPlMP5dkTV0AYtUyVxgFyy34pnXqsEn4S0BCa4lEUT LNTnGSQ0dIw+a6v8
nGvsu5uE8ESmgYhTHzyN1GwYz/ZF+cLkM2dy6ZnFubrYeTITUiaZCpmY3bKg aEadIOEsZkTTPbMh
+J0Qae5WB9/2uWZwVMJ9i+rUTKsW+wXLsCpM+3SkjORNz3BOuHDBmQnq1Pz9 hCJjny0SMm99l8Tn
qQcXSagWi4dIn+92HNkuMbOvDQG2gTSXS6dIGBPlehudvydRFU7IU0pEi/Sd eqGJbeIZWR37CEXB
cKVrDLckhEHHuYZuYERdJqVlRukBODpnPqfW3EDCV3R5kWWvUPkGs/48ioSb KouE96NIuKmySFgo
FAqFQuE/D9mueIdBS8aI/7bogpysW+4ii99Su/d8Om3rnZF4I3atlYXumzLv G7AXrPJkrWuR8EmO
ofZFwmf7dM7WPcXpy/l8DhveOjnevhdy3NKXCE5eZChAe3PtecJjLOz7UdGV 7HV8yiaz+aC2dHB4
QMYEMcV5qDeLWoM7Hj78fjMnq4MD3JAzMK2wURl5uuSEhGZfMP0wLXVf9SGg R1oZNs5Cz1GiGjQh
7RoyvfeBumOGoR9sV7ngD3fJm4I8RBYpwWHoggpaJ41ZyUbORaARGS78MYop CRtwETichddWxIDR
SkzChkrdvIJp17wQO28EawC7XC/nfxb3RkSg1qYbjZaAsEDB6dAsDzCJNiQh CgumxQo69U1OnLjL
nsw8dTyDyXax8vgIKYVijchJiPP1YqFEa5wlJE3O/WYC1m+9gwmMloQmgXCB hDYODdhNhsaHuxnT
WyixI6f44Ejow+J1i6xejyHJsylwdSYkhJmcL+l5hWXCeRQVMlfCkMcQ0Klr NgVyEsJ5LCEhnbwm
sxE0D8YMj2XLPmjAraUbJMxGB4+5EMPdR1pJKRe1UxKCXzUJhcCaeBRcbA03 y6SkpyowZUbCoBSS
kCnNzINjmaYVOtmrDq+RcLI6NsSASzBLp5BshysPP/E6LGg/gmVvE1DCIyiE 1uSv41M6nd1IChQx
zPQk1N3EVeqIEqUN2M3quHmLSaJsdZw6fFey4QSv0PFOyMm6d9r1STJfgq81 /KJ/Gxeal9r1aTJf
gq81/LLjL7nQvNaldxtQKBQKhULhE7B7S7B/CyHo63PuRDakSlLhzTxprHuC tm7NxkO22ZHsdCJq
SCPo2rlQyWbHvXC6ki8h4XmpodtueM8rhGSYObOg6SnnT5RRJDwpY03NO0l4 utl6k2skHOlm9PH3
ECz2Ef6jp2koPU0QbJ80sP3g+zbzh4Nfm/cWt4h4yp6KCTFMBa1HBL9ZEBpu 4+7fvZDneNJUyeh3
EgU9GmJ1qiEiAp2HKQePKOmdNRCC41toD/YXobDRjCZ1KIkuVVHZE5RHYzOL bGvaP2zrOoWAhJOo
AOcWDJ+4sRifzO80ikiEBC+gQBeeFSKq2PIway98qFxXacFvFtLm9WECC7BH 24xHjxrWEuGWOcwS
GxPsGCAhVbxFSWoVrV9oQq1gHmCCh9DPYdLaSG6eDjhLg7P5bsZSUJFlqC2R 8Cl5byHV8VUkdBdg
HEp/OV6Mj+iCtijiFAlBpsba9RiIQqb0gEObnM3ByvS8Zm6nJAQBabnUlolq xI6XkXAeFWjHYnzW
mlwlIT8jFki4cptlzGIkFGipqpgzM2RhB78ENL0r7y2JOyHhOKBRWSHh7ESF tJo4BXMg9+OyRUKQ
2LlCwrESxLl5WUaeWdG5Ze/jq5geTRcaesPExZ+JRqwRz817i7/PQFL2bEys YS4qeI0FFVM3xNuW
5HgeJb9K/Qo2iEij4CgZQjAqokA3NN8LWSh5r2HxS+GPoUhYeDs+loSHNcOc zzKsUCgUCoVCYQun
bmUEdb12UyTbFTt64b3lifu50GXW88Y7xX1R1EYR/HoEMU12fX2la6zn15Hw kukfS0IJX9dXd/y0
fO6y6z7pRcLbg3JG1LeSEDy5Z0l7SX5d3DKwz83D0/3jkTt+/wH4k8hLqY1r aYN+EwCnHDo9yy81
9C+DIPWz9MnMB7alZPejUDahppROj9Qq5IiQTjb1fw87sWKfhIovXYuuiDuM sa6FTkYo3KQcVEM9
FRGWey6ob4mHEz2ki7AoMuuBo3Brb+YD2AxUypGN6iR4bCcKUSFQgIlHasU2 CVtj4RkfzXxdCH3L
8kt6s8DroArYoYXDUQuyKAkoa7Ae6H/U2EhLV+fk0rhPfABDCDUjA/iZwZzM +OK0rOOnf7j+PD5C
0t4KCcVeTonQPsSRhEaVGSZ96dcNtQaWESnIS2I60xOPBGm0AUXWe0fxebrm AxjCLJtwRkIdVELC
BSu2SZidDmaIlkg4WvOZUA8xY4RQA3FP2641Jq/lKlM98INqTKzHAcunt2xu RHMBCNAKCbXdmIQp
Xy6QMNyJo3hPxl2cNO0pvltzAbMCIglBT3wTlZ4cjXthDQV6YiMWieyOlqij 7ix4RYdw2Lg6E5o+
gcXSoLKGtGyRECXkhdw4my1ovzlGHS/aHzpo4loDIn3+oa7wPXsEtKGhLblc Ri/AOtrpGUdkUa8d
TuqRXB/3ZR+sRmKjiamI7R5UsGlBrHvUihtwiyShBwWCipJCkfA9qCgp3BAM d3NQ4V1BRalQKBQK
hcJXQcxHC0eS93MPXq8oLfwnQbk2J6FM6qdKi4CFH1wg4XI961Ak/JvomWN+ u+S30mxqHKlmYHvB
PEUP+w5uI6BBEQ2aIUopS2srfDeOLRm1SSNm4gkVdA/V7pzO9jkFtky0jQ/9 s/AHoEa3NT3erZkx
JnwgnaAYtEWO+1JtY4+1FQn/DjQJw6Y23KZ21IGdHrvn50hotWHdRcK/BE+p pSlsNi+6RzD7M2EQ
UyT8y8D3g2HoJWFfegcYSwwJcd/JPaH9X/h+qEwzCTMMSnxTqXh2hWsv3tnq GC+wWzfjsfLQR4Cz
7k2Aha/GO8dRtisKfw7vnExS3UXC/xDe+cg3010kLBQKhUKhUCgUCoVCoVAo FAqFQqFQKBQKhUKh
UCgUCoVCoVAoFAqFQqFQKBQKhcLLQP4GuG91s9LddsK63WCYemeO+u189e15 wfE9D60XZC52fPbv
Mu7JJ8N7zshtcm01k3mTE5ok/ugxkSUZsly44OCLfg/8s36h9pNJeIOk1WlM 4reXk9CpfSo+lYTi
34zK/uJ5U3+rPL7EdfIXzr26WI+1AinwRa/WMO9H/KtxCyTEZjZjXBaKETLn NXoRz9Cs/uy6DYtT
3d9SFv+cfW5zeEOQj0xQnEQ6NN95rYIJOHz9FfiL57g0XE+cyDDQrlkikUpx klBH8MYxp5yS0MQR
GtAkd8OEzCsmb4O0LyyLYaGhhRGkNsMB98FE0kikyYAtkbD/zWgU0ZSdeSXj YgsfkJbBHCwFlhAS
BicpCfV6JPzha2jAhuJZVKYk4aGViQXoA/qig5kppuOzSUKv00ynyQta1XjZ yskbWpuS3sfZ/r1S
J3FGwvCHyJORgH8XHqmKIYp/nVWVsHDNSRjCRUhodJlhCiRkf1Hej4m5Z4CR sePRYKTdgOm/HH+a
hDRamISMZzMSzhTszYQ+bhMCOOMoCQW3pLMK8HZlJvTaJA2Ebk9nwpapZeOR DVuc+hYHbAWehDRw
nIQzSxkJ/ev+RVeEvukwzkKT8FHiD07CjEebiokpekIzH5YrOPwyscBzlV/o GhsPSUyFA7ZFQreU
lfH1+G+PUOlkdWwj4f/wyVhemRAK1v+QaxUCw2xP8DfV0cNqU+e8cQbAI8EB DMGRaEpTg0hWnS60
0l3rcfP+EivdH6JxkYnjocbM+pQN2Hfh+yx+LsR87HS5Vf8bOr8R32r3s7BJ wo2r35b+N3R+I77V
7mdhdya8++p3QdoXXocLhUKhUCgkV//stsTm3In+clH7vOCE4DvvUpCTz7gL Eve5rWx7NN54Lyfs
KCXh8aM/0X2aB9uPPN3hzYZdOkk2bcFr3nMBeUKHG3GehIN7n0fC7f6nzXky Ce8PyMfBp7W5TDj3
+Nvv/FMS4g12/zj+kTUYdgXwNoFPT7QlNAdS/Sk9v10Cc+XgFkCzeoJi9/fo V1MuURJl7ynBdDRg
DcbMRaWhLNAGDQVbXolDcBNqm4MNpbWJqZHm2WRIaO4JfWBYbzEKvBK4YeqE UfGwP/UBBkDS5lii
/rmechnbzOMumReuKRNsDMjGmLdjvU6RELILk0BsRz4TBkILrJBET9BqlUtD 9UwgNN5XZLZREury
6EB2pnBdQRG1Lh1CKhiOEBnjNLghFOfQaW3T2mCa4O+HGbE9EoZ8tBkJbcLe IdsnuGmZITcRcM1k
LFhRwDbUXKLiPg2GZL5ZyqVEswMJWQ9AQlNBSJglBoKEkDZzyPQ6T8JQYl3A p9AmCWczAItdOhXE
mTB8TZu5gWhEeQsSQQeZW6f0NNYGT7mCetBYpiRMZzgQmLbm0GkWci89CdFv RIxjQELd/vgxJhVC
NqNLaW2gOprJyR3Eg+FTYzcZfzzu0aS8LYsDVETmvZa7xwVDcpHlQZs75E6u XRaGOfj38Ncmknz2
6Cf9S7DB5Lt1pqrbJr56ll6tc9m0zF5orOI5kKKPbCbjOE18fiNI+Au5ck6+ tS541Qefr44pK4zN
0SwTREMckgUKJ18/xnmqJgrFR0Mmx3vVr7f32/UUWpHw3XoKYA+zSPghjhYK hUKhUCisQk7UzCpp
G/PAcfmWKXS542brtAzb0e+pPx5qSWx5NmCvdE+YgCff3p6k2mkSXnIsI+Gm uLtIOIrEmSfbOm4c
6iIhbfNHSXhQsUgIhaKkN1MBH6M/WocsvqaFdePwk3Ukum83pDlrffuhm+G7 II0xVRK+40Aa2xpp
sFmw1e8tjZ+MhPytFWi7xpufjB5yz/m9l00JtpWUmyd3T+zGGcwugxuKw/xm ejuZUYMRRDP5BB6Z
ERXSqB9BjchT1H8mA6QzDsWxh9ENy3C0YBibHyg6er1p5nc2KtgyOnih0zoJ g+88/LpetFHuKyZh
Fm9bAlsrx1DunrdbQK+5p9YfLANyZxK3GQnT8aBhFF6YTwKwhDfPRhWGYAur JARZdSoAJr0OZ9u5
bW+lCGXGxb5DxCBhSB60JMT5cTHhL0bQJw6Gi6sWBZIvMQn9qngcY/FuQoNB RbE9QcKtbEo6eHao
bychmhAFdWmgIThZWuyVkJBrzz749NUWPM1kNObHhITjUEwFFS+TehuqazNh Y83bxMAWDLAS51g0
8Yf0wX9zylgSyiQIk3hB7TpcTq2gIybfewpVyprVSDEajxgedTylDAsq9vQc CRWZ1w2AM4yj9QoL
aUKbyQgMSXh6tFzeX1hHiXhFoGKUSLQnrqObUauMSFa2KOPwhwQuBGGVThaJ IcFRkFc+3zKSMFkd
Nxd2cjqx0Qsl5uQLngxv0mxKOHg4WoU1VMA8KiIvR4XcoyLyclTIPSoihUKh UCgUliDJUax44S3G
OVWiEwV6mYRHDWeePMikUCad7wze1WEDaZBvvH2UtaMXkXB1SLmASMKRj+IK Lxg3sVgWOy+6ORW3
P2wyE/JSFAnPGDex+EtIaMvvGVuWT8hfP5dlknVBJLcvCN7OZjOvM3iYGzTS dLzmO2u9j22X3+9H
coFJUkC2KIm9pRhv1pLywA5F35UTOw4kMdKVQHGnh82QkAX8LAeV1HH+qw9T 35qui7uGSqKVoesl
aGTCo9Qs3ZDWa6saqmzHLWBL//uYdQH9bHJzBfTPbsACb0Ml35l2Q8aicsew eRJiZedJqELWiLtg
CKz94SN2FtQ/hgpTvzGrBGlsjccQC58RUCYRMMfSEk0uItHaYKYbFRhjGhzu 9d6wja8CXLiHhJMs
O3A1cylo5gik2IHUfJmFyl7Z6IQgwAFxpz0wYJGEx1VZxSxIF2Ntb5q60Zi1 mIShIxgyGHVhtuwN
2wtIGM+e9MwJc2MMnpUhrP90JmysQuZWA6v2STjqccwGCW11m7jREjcACaFq Ok1GXlwdtqH9OSR8
SPWnVT6ctkQPV/PiXD0UrEQxrcKswhph/4SE/Z5Q9i/Hxg1JGirDsuBjEmYe p6fmHcPWSTg73U+x
EObE/ZzcYupF9RBTIr3/QTKU26dmDSUxCteXAbBW7J3tWFiNzp1mDADX6jae 0rgFyrAkxMyTEK6O
6ZLX1is3XJzFxkhZE4bM2oXFnRo2be4gokTVd+MZMtcEy5XOhb+EImHh7SgS FgqFQqFQKPxnIHup
dK7QfV40hQg6Jf3Wm0dZKroiIHvA0R8d3efCoqxTwyFLrbyHO1lM0JebWCLL LU+JX6mT5dK9IIMe
mySUW8+rK6KWFpab5+gNJLzJl48l4T1GFQnTThupdDBfj24KxGf2/cOnG/Q4 i3myb989OCxgVlhh
y5l2or6M7L2+9cC3dWzc1QkdlLvXUHgBbg/FbP30TZNJgPEmlwhqCfqZNzPi gXWF5IUL+6/+PG4B
W/pfhT/uXdo9sFEeK/DWpmKgbmg16O2lLH9O0zlv6ewag3MU6Z/cwxasJWa2 YJz1ynWzW9mNqfeh
IXGOHsR+84FtiYarJJz/H/KBI8rINrFQfDMrTbQgLEUyK4IwNiDALude65Oi MTt6mJbMzjpGwmMq
1KScBjhWNHQEP6iBSScQNNPkHhKCVLrj/zxf8PExzaXTFSrWKH+Q9jMxlDjh pZl20fYhRHkwzaik
JJzlaiIS+qsTJyG1wuRTgDGi/ZKBtX1jxsYTSGgDBALQP2bno6toxOUhZna6 Z9cdPBNCrhjmOYar
mdAGd2NunDnMSBj+cxJOrLDf2BEloWuWaLhKwjOpdOJtVScMncPQxKUrDAmn MyFsE4Uxnjq7vPBA
yITLG+fKNgnvvCfUY+SUBudRJ1uIz+mzJBzPQw3xQCpdN5TnC6ql3+OjhYoW NCjvXFmzUiRaMdp4
Ya6/4VewawzHMLWNlllqnr0xiGZqh6EAURf93uLwxpGQBni+OjbWoT8+jVbH Sq8rDBrOk/AJ+Awr
/hLcZU9Im7Oyb5L0UfgTTnwUioQ3uFW4CLsALRIWCoVCoVB4DdzjhsUe/HCr LxIXnsv79jfcyMzu
jvRjiCV1AoS4ovF0KIhMEjtXbHcKrofn1TgeTJ0yPT6+XNQWysaRf2IJRFwP 8/ot+o4uScs4Cf1O
wQjEXEt8aveFJDzsPk3Cy70WJ4Crtk4Mv4OEef8iYQsJgt1g+a2U/q01tHWg W7dj308feYFGsZI4
S7jTmwtqZlS7Nm4HQPs0SXc83oDgShpwQ+Uk6pTHEB6ffGfflei2cUbxcKul iZ1RqrHU5WTGjaeP
gttvtJtOtiLs76q9Kc1D/6EFjvkqSrR8dttgYz/Ljhbc4Y+mG0vAhnPQaXdZ Y2cQGsEhAK4HEwZz
smwStIlvpaKhiRZ/HCJtMAlDU0rCFppM+nIdJmh9HuhT4STNpEWfmCWy0sub Fs2O/dMz0mpqUwLy
dKbGPqKev0dCPT25K4y9fuQkXEi4a0O4yvlpfecfkVDXJEl3nkg66zG6MSWh z5rkJLSaMvKBxE6c
MmGT/5Ksz4/C5Znw9xNOLPTkN0xZmBvJKOmBASQEJGGVWHVDRs9IGHxKg2Ec nM2AfiZsxDYaTB/P
T0G8k7FhmpLw9z8b2rWZMGOCHgCfaKaLmm071Pd5Z4xVMNGqdjOh65yEBmid n5GahFfekYgD7k35
0JkQ5oSNHHmJkZ6tjofryTsBo8Q04U5d+m1dujrugyw83VG18SXNuyHI2eCM rzTNgndmJhyGu/Ot
BwiGHliqXPF5gB/Hw48z6IIjmjj/Daf/CP7MeKyS8FPvi/7L+Dvjoa7ck3Z/ x+dCoVAoFAqFQqFQ
KBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAo3IPx+rGfw3+/ +P3clhUP9G/ArfyS
202/CCfg25tw1YDF/k/3c0PBti3x9yT/2R+qEOEfktWPAC1fHBg52/3t7D1r x/MMX5V8KwkVw4qE
70KRsP1coB8/Hj/Nx7hoh3erPl6TNF6aol+/clys/QtOXRv22pv4blehYqCW 8GrYUQneG+sr9Utd
JEhtpqN428ILXoHH9m06VpqWCDyOQfEWQeNba8AcJUBQSJgcH64ZCe09YSDh P/MRS/4Nxf7dquMl
RaL+mVdHhTcu2Tbx/Unwo2VioBbx3akKWkle92olE9tSq2wPEgYBhpGgJBb5 CoEG+tGby0GFKQnD
l3g5Vlz7pwsdCYNW/SXESXVi7NFCIheaaQMrQuxWedbWKqfimG3UqpYJbqyE GU4tWhEuQdbSSQtd
ukrC32XycQEeV+V/qkJZJGZ2//kQfV7H16A2V6Pt19Li5djJ9wMhccKT0FgZ bN85N68kUpXyEySM
Bk5IiN9BN7EoGh/HkJBwTY416SoJ4+VYVTQ4E8YSMxPq+IWOdF5xzqUDiadW zgMfgeVKOndm00JK
wnSKzSwXZDi1CE9W1B0XyDaX49RdIOFBwH/wa5tcjpXx4twgJBQQeaGRs20g 5SEJKc/3KiUTZw3n
ymXVG05CFrjcIiycyYlncy6HnSyUhGRh0h9W///J9S/7Hl/tIlmtju3iSZSh ygfzclLjJ7iquFe9
BjXuzapeDIidvZoag7WKNqkMr3uV4A2asMMCPr4mN3gTzXCDGwI3swga36A5 gMVhdYzk+HB9F77I
5BtMfZ+3slz4Bg/+ncDTg/OZKBK+1YOn4avm7iLhWz0oFAqFQqFwK+wWx1Hw WF/fIP5EzRuCcINJ
t/izIUTOdJRJxV23imfcPp7pWVPkBvWfRkLZKD0r+U7PVuN3SqeErysPlm/0 zsp8ULFIeIfkIuE5
Q1IS0j2FRp+1myy0QxR81p5IBnmCselGZ/EbHN58WEeFM3/8X97zOo4mfdtG uAVEFskz5Lqi/GaF
478O71IySSeXJHqJhGKOwraNKlK7Xt20UCG6TcyKy9MFowDWdKOzSw2B5oM6 Kpz5I9hIHwn9k1og
zGEQ0UQXSAq0o5vVw3jg8D6VhKbxnAZZCRcwlHABMYJUqmRG0GhP1KX9sfWN C0AmpqHEsvYiEYM+
qefMRX0vkdCvisexWz6fJiFLXDPx8KlsUde4IshG6HVFSALQpzyqWyUhzOKb kNAnEPKUxyjLRZRk
+oFxUK5BdTbS0VfbyWXAXCGhsstU4I9zM2EckJTemYD9zpocjZiP6xZJyPUk JMwtAIFj8ZMFYxcm
NRjpWdia7bSLg3DuJFPH02Bno5COP5mLrADJdeXahRlBtW+7lluv2ggygpJg g/TNaMe6zD1fuCA5
/XFCnTHXnRLbJJQ+5xISJsvQaJnPRNPSQ1YclBynC9A5K6Gd5TE8wHyYIj8R Dv3pY8hXx6oyyA0W
0NUxTOEbw+F1mdWvPi+6zaAeX47BOBsG/UFccu2T4vJKW2ShpLCOIuEtuj4p Et+HIuEtuj4pEoVC
oVAoFL4JG3cRslYma/1FZw+AxqJ+EkmfdAeE3BER/cAleHdW1VbTq0F6RZCv 6ZDJcVK5QkL76OoF
gTkvGLgzEnGwdy+w85NO05eZWSR0LhQJndt6j4KkCIasOt3G7E2YjRyThcb2 P/z2gxoKGWq7+ONK
Iqo52JaYJAbGkhN5iEu5hoOHj2oZb70YuRg6b2B5VNJXCNp8ybjzI2q7zCYE 0mzBuHkEWpIbjZSD
DaXCtV5qK/RmkmkTvumvzZdoNaaHI6Ho2j6CnoTQaG5CIyVn8hCpgHCSiG6Q /N8blaCV2IkGUkzw
9Ki2PAhWRGxpfF8lIRbgiBJa20PMVTrerIKQ8JgzNCkxCYlBrRG/gAnUjZlI 3EafS+l/PXCbcQxu
k7E04ynaBTyq7iNwIW15noQhJ03lm7Ve/wQSmqtRIKGfShZISN8cdHMe4iUS jnPLXo5no+JMceOA
8yX1tb+TRfqwUhKqSssFZuapyzFmMaywHzfPhEq3I2H4v0DCUNcacnGHhFDd JRIad/XN6sKoWAK6
mbBNvpqmcbLDIx9KUjP3SEjuPoa1VB0iYS5NuBo3amT0ZIOEM02Ua/gmZ0eA c0es+RNSZnGcWJba
aUfIkBDNhHB6EaCNzjDrLMxeMmfqW/+gJLTSUPDQCtUqfpSZa9Q4nqyOlxMD Y4kZqbgMnIs0/9Hq
2N9VDN+Vq7NRoRo7SaKdYmwdQ6bDqs9quDr2XIiaTq+O7XDeATlZt6njXqOf Y+b9RrzQshcH4T51
s6m4SHjRiCLhiqh8Kr5N06kZf136M4VfMuLvkrBQKBQKhcLbIUmFuFbTO4UL txKyVJQvS/rTnefE
BkTEqd8KyhAnC+1vv0tc7PuSu1NZr5irXlm4rsd4n4RPiRC250x4WHtIQmGt L6i86rQqvFX1BgmX
hN04WxYJF4LxbDyfhBLy+eLLEEj+2FFo+rm/ixvltmPrTfq31r+7Dtg0YxbI P3G2ZpskKBFObE5k
028sEBQH41iy6QL3IdCu1OGFxFLwZgce6ztSAvkgsD22ExxsJl+umehL88Nh OjTWzxyxpr1W/3St
uGlIgyGhTCRAB63jeisMdhBkMhGdlGcaqVVAZXQTDtuSWYuDQAZ4n4SNKVG6 mLdjmlBtxBx5bc0L
aP5FfQumwQ4/TfTCxNrSGvcRFwZ3QkSiXCaa0YdRKpLQtWlIMwydi5Tk5s4G AY4z4MIG+pmgrykx
V4IFUit2mWohMSHmKvYuyoIwvUPT9HkILsfGHK85htZkGu6T0IhfJCHxZEpC HCUWOhNBE3Fi7sIg
4HG+hYRhGLdJmE7TjQXXzITMglghSIP56gcvI6EnzB4J4UQ2IaGRBaswCaEr M/+wtMTc6SDAcb6F
hNkgCImE/ULvQVS9D0cgZD7GbOgSc4DmyQe8EtA4WPEJ2aASppiSEISVdbwh JRCfaGGcXfC3WYgu
m6Ni1LlvUfHIVJN+BNZZbcShN7JqZ6YZs0CKozNHayYZgGB17K46NCLWMdsq iZ1O61N5heqo9UCq
4YhhZbH+VXQ9JRANAhjnayS8ircpLqc+zo0i4Z0O/RGn/iMkfG5e37t8+itO vdaPPxO2QqFQKBT+
49BPIx7fplf5S7cBuPParYWAxEHacVHiadPlZCB+O/37xe/nGTH7vnJPdFjn hBAk42bz58LvJ+Gi
RDnf9X5Pzvbt/f7ZH6oQ4V8ibNuU5DyeE+L+pcgZiUXCK30BCRXDTpHwou0T Et7leJCzkT2Istlw
Rh7uaEvgI/rHezKo0OC+T270pv2+w6/FlwfaTEOul/itXIdbOM3VIYGMhD+X 5d9r8+MKrT/GRVsr
pLtLLiBkcyiwajGddE6WFQ4eEd3IHlTxYxl5pKMpWcyPi00eHj72xwR01aap D+jXRC/xW0tbTMbD
AgEJ/5mPWNI5CO3lIYeD7IOmMpUWCCFJnR2wNRIqadlgQFdVDzZmaYlYg5i0 Fpox87IhcgIl10v9
ZpGbmjAloeKi/cpJ2KA/UOn0dHPdZ4RgZ2CzXzNsZg/qxDvjmElTi4lxLFVO 9dfe62tLzHHLSBhM
AySkmYZQL/ObkpCaAHM2EQl/l8nHBXhclf+pihAZ789CduKdJAzqdKbhjIQ7 OlVFsDWekytTKGwD
p9fW8FdJuvKZ0I7JTC+0hJFwb7r/xexyrCqanQmDPfOr1tNmQqxuATCUMtWJ ToWJbysUWZOWk1Dn
QVES6vkp10vNzyKnWs0EOhIeBPwHv7b5PaFkNp8l4ZwQOESLJNzLHkSrxEdT 1YN2dCVCJaKVs8sb
FHK9QX/0180TMb0u08v8VtJM5Gz2omoyXR33h9X/f3L9y77HV7tIhqvjkN0X Qh5DAH4vQNQ1fk4I
ycmyOhP+XXxIAD7EjMJb8CGjPzfj3wm826vCGr6GhIVCoVAoFAqfClkqWuwZ yhak2yyANh5CQJ3Z
g9H9mzL9BO/xTUCbPZdMop55hhatR8mSxLB7AGXJy/5SsyyXrpNwNkACCqck TJ59xkfZJ+xOe6xx
MHVJGz9OK2z90vl0iYST6B9W+ogno3A/CS+0XCDhQhh0AD6AhGtNtkjYP4uE j8fifZgfQSGJcXGr
BOcMoqYul83tlzjpIwBy9DxKRgKX2SEB+zordqNdkU6LLI9u2yX95dHx1ylv vf4aEzCjOT6D0uVM
khIQFZC2OYLeDT7iPwZjPVGBsvBQ0R5k7D/BPmDcA4LJhmi7aLR10gVJ194f pDN/kkvPjn4YN+wG
FcBO4uueSyr/UZQjmIQkWRKZY1TANlkvJTwM+oORxtjk/1USju8nXhXo2omR p1XYLrykNXP6mXnD
FcBhTK3EJciWbHzOuhS9ms2E5BxvE6tmFqUk1GfDyv+L86Cy5Niwluby1LTD LFWuaQlaHhoxm3iw
TMJ+zVNT4yoJqd0s/26ThKsuvZOE3j9MwnA5ZsRTd0X3XI618YLCsTc3Rg99 fNKIHYwgJFSM19mp
KQmZ3dmEuDkTzl16Mwlhr0hCY8ns8vv4vMpCc65AR2aU044YErKZEMbHyOq+ mTsoG4LxxGqNhLAk
WhlOpVUSbsyE83vCKQlnVs0soiS0lqh7QskIeZWEPQ77rwp0NvflW19SwBHr SzOjyEgfJFRrydFF
WjMlfhg37B5WWluUnfbbWZf6Fcx7pK23bUN4gWFWRbSIlWyujrXRehRuuhy/ As82MZzAX+XSG6z/
L6JI+GHW/yfxdBa+fhTvZGFxsFAoFAqFwtdClorWhcgFMc9xbceOszbLtFBO CIjlWI/YhzTj0dAH
DMISTpBQspKvJuFpkxkJZdJkVisrzRTbxDn9Jb8yXCTc8Hyv4w0kXNXTOhXf ScL4R3DHh3nQbvYc
jAfSwOaC6LY99wA9vwe6Yt+mtxlaeLafvywhyuFuqR5COiEVmUTWy3rdrAy9 hzGUhNAEIxMLsdk5
CVlgQeb/BcTMivGh68QHQ5NQdRnNXVtNQL9PJcGO2HK0sTvUbnycquabwyMv Q4A7LE66Lw0U6yVC
jBcrlTrph0gSXdBsryaW8eG4j4SeViuxM62Nm7ZS+w/doiqbkUEJjMcnjR6T 0Rr1kAcIB5E6kBlm
m0oLzd0lkvoSogudGAbOSEhjczMJVUpUpLzfSfetDwnQUyTZ9tAqQ6EVsULC cSVLZ2OaIOB7CJ2i
48UOzGtKMMuCMGtUlJIJSGjNChEC6RPM7CFBXfvHsW/8RBImatK55ojMaOtI SEYvn1syc+YktAaw
XnResj02YrFYiWfCRhSTmTA1S4gRbAhFfdE/lobjHtDB/TlBkhH3AWEkxOm8 qmISVCsiqqIEGjM3
4VOQEWdCaD8/CVigpoG0NohxVc1/6gs1C8QsMxsMpWM9HaN7Sbi0Ola2uYtE byuh0gl5fBXTo+nC
qEfLPgJwaXXcqFuDtmp1bJSvrI6JA4tJmopDJsXTkFCJjL5IUAmtf3T3Q+mO +er4ThKmeJGa51r1
CieeqUPAt/8KXsj1E5Y9r/krTDop+zOH46n42KTtDyThE5XoS3WhUCgUCoXC qyEnat6NGy2T2/2c
iYP1AjIFxm9cg9aqEbup908Kb4/UfUupDyThVPG9JDyt4pwZqyRMftlc/PBD pj5+3BUsSUqKhE/R
9f0kPCo+iIQov05njNm/CgyexW+k/bmNB9jG5quZPRK7PYATAcnGxIqBcONC eS/YBiRcsEv5Xg82
fvDwoUzG6xlGrkZ8C4I4maJLfi0RE1tvjPMr3TyRIR+nhs5IeMjou0Uua0/t WjVSkgtgTaN23Saa
ZbaVSCIg1LFmIHQy36FdsNMaMNv1jqa04xawLf0HJFSmOWOYF4QWNKJefsw7 mpKQhjiUEB4ZWVxA
O84o3QtGPXZ2LsEeDTZdN9D1ENS6QRtkIWYJyVLjDz5M//vhHslYIXaOhHRU rV1u1EwYoPy7SRhT
7WzJ4fUiCVmuX5QDXJokAnYDfCLc1MBw22C91+5GUdFqmyXIQ5Ibn5LwuCob Mc7riyRUvgeHTPaj
l2+CdgsJYXPr7ZIA0fWYhNnUsnrShhlo1cDQlNbxaTLGrHlxG8anJBz1nrh3 kTC2sQ6lM2GMwlUS
LrBmmvZ3nFKtSSYO3GvZD9ijQbPXDcQ92oIN2cmSjvuC8Q92jUXJnJT3kHCw yzoNI4pJKNqLFRLG
nDSdazbJgXu0CS7Fpd5x0oZ5Ja5M3Yzfg2D1AHF8dZwbGJwU673JifRcs/df MEKSuMuNb+MpjVug
jKEY3y0ZnHbvWzjP4OpYhUFF3FZKkL+3On4eZLFsufMrDCz84q/Epkj4xfgr sYl+yLprRcL3omJT
KBQKhUKhwfs5e6TT1czzICH9p+oklGzL2Ogki4Xe7RbvbPmd7sY98NTzPVGy 2olnHUZHTrlzAVMS
7jSeBkMmClZNvkhCYMY2Cd33E8N2Jwnn7ZBDrNmrlysXSXgmJu8nIarYJKF8 FwlX57ZnkxC+1Y48
1o9JAWbzYGwauJS/SSKg79hUM/aiBNQj6A4pcVYiamf2g6LbBwn9LsaxD2Hy /JrXY2xJEh5bGw1M
HiDfDHJOhzcsgk6HP0eZNOOX35RZd+cECcMGzihwG5y6pKdwoN62iyIRLA0d u1m+SbTFVVgtocQp
Zd4ngRgkdPu5Wpb2ErsTLDcGOCracyzrqZwRH5DQyZAQ+OV3CZfdOUNCxIbU V2WMZ1AmoLFSTEL/
VRqyJZDQaQl1sSmRiHVAsqmpg44atMUHc8QBtrXnD+xJT2zXyZMQ2d9OunMC OySMSYQ7JISJgDMS
iruYhpM/pOP5VD+dEtf8oda/kBDJSWimDZ2Eh9xR4VBx0GkT0W4xQtywJ6bj ToGEIg2SUHFz2Z3n
ktD22iRhLA3NscrZTGgkpfNZ9EVmJYskBAOIRi1aR+IA7fZnNQ8WjykhIfFB VLstd55LwnwmlImA
TCyrE/EKJ/eEcVLwM8oK5WYkXMjxa7ZjsE6grxLj1ag9jTs9GwzjEPHhlDvX SGgvC249ZUvGw2p1
JQir4zB44kMgDXQ0ZonxfpREk3QHCSLE9o8k7AvjWSDUuI0vqiJfHXflwtPz mgRD3fi0rKc1IVsd
a7vNybS8Okbu/FkIPXiPOSsmOAp9O/6YO+ciQA7eY06R8D8HN+bvj8Ha/Y+6 Ar7b4Hud/hPuFAqF
QqFQ2MTiDZnJMbQdZN77sl3aCt1AmXWD8qmIr7hdumbkW1xcJeFK+SUHJD1U hfL4KqbhHU+yvoyE
slV8Vwye78k3kPCgYpHwGUY+wUWQkkb3MqSxP06kbbMpg2MrAyjoJSQvzpWA XZUorv+88Dd8d97a
mOVdIgU80I1W0FzMUNm36XzE8AsEW+jZ7DsvgELKgPMcPIzu+38SCvNqZaXL uUB9xHcV3CbrpYQH
S0R7pSlpt+gS57tR0CDzEXXn2+NRTpRBRsAbGHVMIibcSKBS/wQKMQMukXB8 VcIbOBLUKkiCgwBH
xXHDVUpS0ZglayS0JlOjZgYB3eiUcNamkYz+xf6zoYuC7dcVZ4UrpAw4jW6b SBCuU+wEnPz0cnwf
CbHeOKzxcuxXxSbnIkT1DAmhuGE0jS6SDDI3YiqFBIl46NxAhsREYKS0EHKq kDLgKgnhCZRNgfBU
v5+EsFcMhv8Q9UX/gI0vzIQ0iFl000jCCh41JpGGcjqBd6mZQsyA01A0STzJ ql3AExKm4VwYc0pC
H5MYc3U85doGCbNeNLrqEPQgAY83m/4mL4kzmgkXnE0UQgZcYCFMSYur47T6 ccSuGmJlDQneYZGs
ZGl1LM6qQMJk8RrPDG+QyRVEmXrSsIJA3enq2PrXQmDd15U3OmIjlbNaZfDN BOfW1XHhLZDtitMS
CwWMImHh7SgSFgqFQqFQ+AOQ5ChW1O1K4QmQtaMiYeF5KBIW7sR2xhtKSFNH LoctbpEUCg5gk9Fs
VsKtRrCRaY7iDultu4yFPwh78aRb9e4aG2kXPmLnImEBA2QaNJhUMcmaczl0 McetrscFBpjOk2RJ
kbmRXI77R12OCxyKJ46EyT0huEs06WYgHW7UFwoe2xlvJCFN/zZXF4cSEguF VRRfCm9HkbDwdhQJ
C4VCoVAoFP4a/gftI3XQlaYIlwAAAABJRU5ErkJggg==
------=_NextPart_000_0013_01C5816F.DA8E9EE0--
Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 203
- Registrado: Vie Abr 01, 2005 9:05 am
No me funcionan los campos calculados
Joaquin,
Eso que tu quieres hacer NO es un campo calculado. Creo que tienes un
error de concepto.
Los campos calculados son siempre cara al resultado, nunca a la base de
datos.
Es decir, puedo tener un campo calculado "importe" que resulte de la
operacion "cantidad * precio * ( 1 - descuento / 100 )". Ese campo
importe NO pertenece a la tabla y NUNCA se almacena, es calculado cada
vez que efectúas la consulta.
Un saludo,
Jose Alfonso Suárez
Joaquín Martínez escribió:
> Ignacio,
>
>
> >>>> Dime exactamente donde da esa impresión para corregirlo cuanto
> antes. Muchas gracias.
> oField:OnSetValue := {|oField, Value | Salvar( oField, Value ) }
>
> Function Salvar( oField, Value )
>
> WITH OBJECT oField:oDataSet
> :Banco := Left( Value, 4 )
> :Sucursal := Substr( Value, 6, 4 )
> :DigControl := Substr( Value, 11, 2 )
> :Cuenta := Substr( Value, 14, 10 )
> END WITH
>
> RETURN NIL
>
> ---------> Aquí es donde me da la impresión de que el evento saltará al
> salvar
>
> Mira, ya he entendido tu planteamiento, en cada "valid" de un control
> que no se pueda salvar tal cual, le asigno el valor al campo calculado,
> y luego sólo cuando haga update() ya cada campo real tiene su valor.
>
>
> Y mi planteamiento que me surge como primera impresión lógica de como lo
> iba a hacerlo después de leer la ayuda era la siguiente:
>
> oField := ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField |
> oField:oDataset:CampoReal } )
>
>
> oField:OnSetValue := {|oField, Value_de_MiCampoFicticio | Salvar(
> oField, Value ) } <---- Esto se ejecutaría al hacer Update() y en vez de
> hacer internamente algo como:
>
> Replace (alias)->MiCampoFicticio WITH value ( Que sería
> incorrecto porque el campo no existe )
>
> Haría el replace que yo le indique en mi función salvar(), internamente
> yo lo vería como:
>
> Reclock()
> Replaces automáticos por xailer
> Replaces según usuario de campos calculados
> commit()
> RecUnlock()
>
>
>
> Un Saludo,
> Joaquín
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com
> <mailto:InvalidAccount@ozs.com>> escribió en el mensaje
> news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquín,
>
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada
> campo y el
> > calculado de la forma que le indico,
>
> Update() graba el valor de su buffer. Si el buffer no ha cambiado,
> pues se queda igual
>
> > pues si se hace como dices da error de "requiere bloqueo".
> Si te da error de bloqueo es sencillamente porque no están en modo
> Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero
> no su valor en la base de datos sin estar en modo edición, tienes el
> método VarPut().
>
> No obstante, y de la documentación:
>
>
> > Si tengo 20 campos normales y 3 calculados, según me comentas al
> hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> Me temo que yo no he dicho eso. Tan sólo digo que hay que asignarles
> el nuevo valor. Perdóname pero es como lo llevas haciendo toda tu
> vida. No puedo entender la complicación.
>
> ODATAFIELD:VALUE := NUEVO VALOR
>
> Y da igual que sea campo calculado que no.
>
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda
> pensé que
> > el evento saltaba al hacer Update() en la base.
>
> Dime exactamente donde da esa impresión para corregirlo cuanto
> antes. Muchas gracias.
> Te recomiendo que le eches un gran vistazo a la documentación de los
> datacontrols. Y allí comprobarás la existencia de disparadores que
> posiblemente puedan serte de ayuda.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net
> <mailto:jmartial@interbook.net>> escribió en el mensaje
> news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada
> campo y el
> > calculado de la forma que le indico, porque además no tiene mucha
> lógica
> > pues si se hace como dices da error de "requiere bloqueo".
> >
> > Si tengo 20 campos normales y 3 calculados, según me comentas al
> hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> >
> > Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con
> el buffer
> > por lo que en ese momento no quiero guardarlo en la base de datos.
> >
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda
> pensé que
> > el evento saltaba al hacer Update() en la base.
> >
> > Un Saludo,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com
> <mailto:InvalidAccount@ozs.com>> escribió en el mensaje
> > news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> El evento se evalua cuando hagas algo así:
> >>
> >> oDataSet:MiCampoCalculado := "lo que sea"
> >>
> >> Y entonces recibirás en la función SaveLogo() como segundo
> parametro dicho
> >> valor.
> >>
> >> Un saludo,
> >>
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net
> <mailto:jmartial@interbook.net>> escribió en el mensaje
> >> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> > Hola,
> >> >
> >> > He intentado usar por primera vez un campo calculado, y lo lee
> pero no
> > lo
> >> > graba, este es el código, es igual que en la ayuda y nunca llega a
> > grabar
> >> > ni
> >> > a mostrar el logdebug:
> >> >
> >> > oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> >> > oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >> >
> >> >
> >> >
> >> > oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> >> > Value ) }
> >> > <--- esto no lo evalúa nunca
> >> >
> >> >
> >> >
> >> > Function SaveLogo( oDataSet, Value )
> >> >
> >> > logdebug( Value ) <---- esto no se evalúa nunca
> >> >
> >> > ::oDataset:c_nomlogo := Value
> >> >
> >> > Return nil
> >> >
> >> > Un Saludo,
> >> >
> >> > Joaquín
> >> >
> >> >
> >>
> >>
> >
> >
Eso que tu quieres hacer NO es un campo calculado. Creo que tienes un
error de concepto.
Los campos calculados son siempre cara al resultado, nunca a la base de
datos.
Es decir, puedo tener un campo calculado "importe" que resulte de la
operacion "cantidad * precio * ( 1 - descuento / 100 )". Ese campo
importe NO pertenece a la tabla y NUNCA se almacena, es calculado cada
vez que efectúas la consulta.
Un saludo,
Jose Alfonso Suárez
Joaquín Martínez escribió:
> Ignacio,
>
>
> >>>> Dime exactamente donde da esa impresión para corregirlo cuanto
> antes. Muchas gracias.
> oField:OnSetValue := {|oField, Value | Salvar( oField, Value ) }
>
> Function Salvar( oField, Value )
>
> WITH OBJECT oField:oDataSet
> :Banco := Left( Value, 4 )
> :Sucursal := Substr( Value, 6, 4 )
> :DigControl := Substr( Value, 11, 2 )
> :Cuenta := Substr( Value, 14, 10 )
> END WITH
>
> RETURN NIL
>
> ---------> Aquí es donde me da la impresión de que el evento saltará al
> salvar
>
> Mira, ya he entendido tu planteamiento, en cada "valid" de un control
> que no se pueda salvar tal cual, le asigno el valor al campo calculado,
> y luego sólo cuando haga update() ya cada campo real tiene su valor.
>
>
> Y mi planteamiento que me surge como primera impresión lógica de como lo
> iba a hacerlo después de leer la ayuda era la siguiente:
>
> oField := ::oDatosemp:AddCalcField( "MiCampoFicticio", {| oField |
> oField:oDataset:CampoReal } )
>
>
> oField:OnSetValue := {|oField, Value_de_MiCampoFicticio | Salvar(
> oField, Value ) } <---- Esto se ejecutaría al hacer Update() y en vez de
> hacer internamente algo como:
>
> Replace (alias)->MiCampoFicticio WITH value ( Que sería
> incorrecto porque el campo no existe )
>
> Haría el replace que yo le indique en mi función salvar(), internamente
> yo lo vería como:
>
> Reclock()
> Replaces automáticos por xailer
> Replaces según usuario de campos calculados
> commit()
> RecUnlock()
>
>
>
> Un Saludo,
> Joaquín
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com
> <mailto:InvalidAccount@ozs.com>> escribió en el mensaje
> news:42ca3d06$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquín,
>
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada
> campo y el
> > calculado de la forma que le indico,
>
> Update() graba el valor de su buffer. Si el buffer no ha cambiado,
> pues se queda igual

>
> > pues si se hace como dices da error de "requiere bloqueo".
> Si te da error de bloqueo es sencillamente porque no están en modo
> Edit() o AddNew(). Si quieres cambiar el buffer del DataField pero
> no su valor en la base de datos sin estar en modo edición, tienes el
> método VarPut().
>
> No obstante, y de la documentación:
>
>
> > Si tengo 20 campos normales y 3 calculados, según me comentas al
> hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> Me temo que yo no he dicho eso. Tan sólo digo que hay que asignarles
> el nuevo valor. Perdóname pero es como lo llevas haciendo toda tu
> vida. No puedo entender la complicación.
>
> ODATAFIELD:VALUE := NUEVO VALOR
>
> Y da igual que sea campo calculado que no.
>
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda
> pensé que
> > el evento saltaba al hacer Update() en la base.
>
> Dime exactamente donde da esa impresión para corregirlo cuanto
> antes. Muchas gracias.
> Te recomiendo que le eches un gran vistazo a la documentación de los
> datacontrols. Y allí comprobarás la existencia de disparadores que
> posiblemente puedan serte de ayuda.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net
> <mailto:jmartial@interbook.net>> escribió en el mensaje
> news:[email=42c969d9@ozsrvnegro.ozlan.local...]42c969d9@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > Yo lo que quería es que al hacer oDataset:Update(), salvara cada
> campo y el
> > calculado de la forma que le indico, porque además no tiene mucha
> lógica
> > pues si se hace como dices da error de "requiere bloqueo".
> >
> > Si tengo 20 campos normales y 3 calculados, según me comentas al
> hacer
> > Update() grabaría sólo 20 y luego uno por uno habría que grabarlos
> > manualmente???
> >
> > Y aparte, si estoy en un "edit()" al hacer lo que dices estoy con
> el buffer
> > por lo que en ese momento no quiero guardarlo en la base de datos.
> >
> > No entiendo muy bien como trabaja, porque incluso viendo la ayuda
> pensé que
> > el evento saltaba al hacer Update() en la base.
> >
> > Un Saludo,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com
> <mailto:InvalidAccount@ozs.com>> escribió en el mensaje
> > news:42c96648$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> El evento se evalua cuando hagas algo así:
> >>
> >> oDataSet:MiCampoCalculado := "lo que sea"
> >>
> >> Y entonces recibirás en la función SaveLogo() como segundo
> parametro dicho
> >> valor.
> >>
> >> Un saludo,
> >>
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net
> <mailto:jmartial@interbook.net>> escribió en el mensaje
> >> news:42c91e5d$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> > Hola,
> >> >
> >> > He intentado usar por primera vez un campo calculado, y lo lee
> pero no
> > lo
> >> > graba, este es el código, es igual que en la ayuda y nunca llega a
> > grabar
> >> > ni
> >> > a mostrar el logdebug:
> >> >
> >> > oField := :Datosemp:AddCalcField( "MiField_c_nomlogo", {| oField |
> >> > oField:oDataset:c_nomlogo } ) <-- Esto sí funciona
> >> >
> >> >
> >> >
> >> > oField:OnSetValue := {|oField, Value | SaveLogo( oField:oDataSet,
> >> > Value ) }
> >> > <--- esto no lo evalúa nunca
> >> >
> >> >
> >> >
> >> > Function SaveLogo( oDataSet, Value )
> >> >
> >> > logdebug( Value ) <---- esto no se evalúa nunca
> >> >
> >> > ::oDataset:c_nomlogo := Value
> >> >
> >> > Return nil
> >> >
> >> > Un Saludo,
> >> >
> >> > Joaquín
> >> >
> >> >
> >>
> >>
> >
> >