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.

Editar l

Foro público de Xailer en español
Responder
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
Estoy intentando hacer el típico mantenimiento de líneas de albarán a través de un arrayBrowse, pero no hay manera. Estoy totalmente perdido.
Os dejo hasta donde he sido capaz de llegar, a ver si alguien me ayuda a continuar y entre todos podemos hacer un ejemplo que funcione y nos sirva de referencia.
Uilizando oGridEdit:OnExit, he llegado a poder verificar si un artículo existe o no y no dejar pasar si este no existe. Pero resulta que como la edición no es modal, si pincho en otra línea del albarán, me dice que artículo no encontrado pero se sale del get en lugar de quedarse en él.
Tampoco consigo que me actualice las casillas relacionadas con el código de artículo, como la descripción o el precio.
Un saludico,
Fredy
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0515-0, 11/04/2005
Comprobado en: 12/04/2005 2:06:20
avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
http://www.avast.com

Attached files articulos.zip (2.3 KB)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Editar l

Mensaje por ignacio »

Fredy,
La edición no es modal porque entendemos que es un 'pecado' hacerla modal.
Es posible que simplifique el trabajo al programador, pero desde luego no es
muy intuitivo.
>>he llegado a poder verificar si un artículo existe o no y no dejar pasar
>>si este no existe.
Primer error en mi opinión. Si el artículo no existe vuelve a ponerlo a
blancos cuando salga del campo. No le puedes dejar al usuario dentro de un
campo del cual no puede salir de forma intuitiva. Es como si hubiese que
pulsar Escape para salir de una celda de Excel, por ejemplo.
>>si pincho en otra línea del albarán, me dice que artículo no encontrado
>>pero se sale del get en lugar de
>>quedarse en él
Cuando pincha otra linea del albarán el usuario REALMENTE ESTA VALIDANDO la
linea actual y deberías simplemente validar la linea en edición (todos sus
campos) ya que se dispara OnPostEdit perfectamente. Si lo que pretendes es
editar una linea y que el mismo tiempo se pueda navegar por el Browse ya te
digo que no es posible ni creo que lo sea.
> Tampoco consigo que me actualice las casillas relacionadas con el código
> de artículo, como la descripción o el precio.
Y porque no lo haces en el mismo oGridEdit:OnExit, digo yo.
Saludos,
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=4432632488683739883664@news.ozs.com...]4432632488683739883664@news.ozs.com...[/email]
> Hola,
>
> Estoy intentando hacer el típico mantenimiento de líneas de albarán a
> través de un arrayBrowse, pero no hay manera. Estoy totalmente perdido.
>
> Os dejo hasta donde he sido capaz de llegar, a ver si alguien me ayuda a
> continuar y entre todos podemos hacer un ejemplo que funcione y nos sirva
> de referencia.
>
> Uilizando oGridEdit:OnExit, he llegado a poder verificar si un artículo
> existe o no y no dejar pasar si este no existe. Pero resulta que como la
> edición no es modal, si pincho en otra línea del albarán, me dice que
> artículo no encontrado pero se sale del get en lugar de quedarse en él.
> Tampoco consigo que me actualice las casillas relacionadas con el código
> de artículo, como la descripción o el precio.
>
> Un saludico,
> Fredy
>
>
------------------------------------------------------------ --------------------
>
>
>
> ---
> avast! Antivirus: Saliente mensaje limpio.
> Base de datos de Virus (VPS): 0515-0, 11/04/2005
> Comprobado en: 12/04/2005 2:06:20
> avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
> http://www.avast.com
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
> La edición no es modal porque entendemos que es un 'pecado' hacerla modal.
> Es posible que simplifique el trabajo al programador, pero desde luego no es
> muy intuitivo.
Sí­, lo comprendo, la cosa está en que tengo que "cambiar el chip" para
hacerme con esa forma de edición, que aunque más avanzada también
complica más las cosas y cuesta un poco "cojerle el chiste"
Es más, creo que puedo contar con los dedos de una manos las veces que
hasta ahora he realizado una edición de un browse propiamente dicho.
Hasta ahora, con Fivewin, como la edición del grid era tan limitada,
muchos optamos por utilizarlo tan sólo para mostrar los datos y en el
momento de la edición mostrar un diálogo "encima" del browse donde
editar los datos que luego pasaban al browse.
Por eso, comprende que esta parte es totalmente nueva para mí­
> >>he llegado a poder verificar si un artí­culo existe o no y no dejar pasar
> >>si este no existe.
>
> Primer error en mi opinión. Si el artí­culo no existe vuelve a ponerlo a
> blancos cuando salga del campo. No le puedes dejar al usuario dentro de un
> campo del cual no puede salir de forma intuitiva. Es como si hubiese que
> pulsar Escape para salir de una celda de Excel, por ejemplo.
Ya, esa es la cuestión. La edición de los browse creo que está muy
pensada al estilo "excel", como una hoja de cálculo.
Cuando estamos editando una celda, no podemos dejar salir al usuario a
"cualquier precio". O introduce un valor correcto o valida la edición.
tenemos que estar guiando al usuario y comprobando lo que hace. Hay
cosas que estarán permitidas y otras que no.
>
> > Tampoco consigo que me actualice las casillas relacionadas con el código
> > de artí­culo, como la descripción o el precio.
>
> Y porque no lo haces en el mismo oGridEdit:OnExit, digo yo.
>
Sí­, lo intento, pero no sé cómo hacerlo.
La verdad es que hay muchas cosas que no sé como hacer, pero vamos
pasito a pasito, que al final aprenderé.
De momento dos cuestiones.
1 - El método ExitCodigo se ejecuta al salir de la celda de código
:oArray:aCols[1]:oGridEdit:OnExit := "ExitCodigo" y me comprueba que el
código introducido es correcto.
Ahora bien, si el usuario ha pulsado escape no hace falta que compruebe
nada. ¿Cómo sé dentro del oGridEdit si me han anulado la edición ?
El OnPostEdit de la columna sí­ lo tiene, pero se ejecuta después.
2 - Una vez validado el artí­culo, cambio los valores de las casillas
correspondientes a la descripción y al precio. Pero estos valores no se
refrescan hasta que no termino la edición de la lí­nea.
El único que he logrado refrescar es la descripción que tiene beNONE
haciendo un refresh() al array.
------------------------------------------------------------ ----
METHOD ExitCodigo( osender ) CLASS TForm1
Local Retorno := .t.
//Busco el valor introducido en el array de artí­culos
Local nPos := aScan( ::aArticulos, {|x| x[1]= oSender:Value})
IF nPos == 0
// Si no está: mensaje y nos quedamos en la misma celda
MsgInfo( "Artí­culo no encontrado" )
Retorno := .f.
ELSE
WITH OBJECT OSENDER:OPARENT
//Si lo encuentra: actualizamos descripción y precio
:aArrayData[ :nArrayAt, 2] := ::aArticulos[nPos,2]
:aArrayData[ :nArrayAt, 4] := ::aArticulos[nPos,3]
// Mostramos los datos actualizados
:Refresh() //Sólo actualiza los beNONE
:aCols[4]:oGridEdit:Refresh() //Esto no hace nada
END
ENDIF
RETURN Retorno
------------------------------------------------------------ ---
--

Attached files articulos.zip (2.3 KB)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Editar l

Mensaje por ignacio »

Fredy,
>>Ya, esa es la cuestión. La edición de los browse creo que está muy
>>pensada al estilo "excel", como una hoja de cálculo.
No te creas. Intenta editar en Excel 3 celdas a la vez ;-) Pero lo que si hace igual que Excel es pemitir al usuario moverse a cualquier celda aunque esté en edición, y creo que es lo que cualquier usuario espera que pase.
>>Cuando estamos editando una celda, no podemos dejar salir al usuario a
>>"cualquier precio". O introduce un valor correcto o valida la edición.
>>tenemos que estar guiando al usuario y comprobando lo que hace. Hay
>>cosas que estarán permitidas y otras que no.
No tienes más que borrar la linea de albarán completa si no te la ha rellenado correctamente, al menos sus campos básicos. Creo que es lo correcto.
>>1 - El método ExitCodigo se ejecuta al salir de la celda de código
>>:oArray:aCols[1]:oGridEdit:OnExit := "ExitCodigo" y me comprueba que el
>>código introducido es correcto.
>>Ahora bien, si el usuario ha pulsado escape no hace falta que compruebe
>>nada. ¿Cómo sé dentro del oGridEdit si me han anulado la edición ?
>>El OnPostEdit de la columna sí­ lo tiene, pero se ejecuta después.
Muy facil, de la documentación:
EVENT OnPostEdit( oSender, Value, lCanceled )
oSender: Referencia al objeto que genera el evento
Value: Valor actual del objeto oGridEdit
lCanceled: Si verdadero el usuario pulso la tecla Escape para abondanar la
edición. La perdidad de foco del objeto oGridEdit no se considera una
cancelación
Evento que se produce cuando se finaliza la edición
RETURN NIL
>>2 - Una vez validado el artí­culo, cambio los valores de las casillas
>>correspondientes a la descripción y al precio. Pero estos valores no se
>>refrescan hasta que no termino la edición de la lí­nea.
>>El único que he logrado refrescar es la descripción que tiene beNONE
hac>>iendo un refresh() al array.
Si no estan en modo edición las columnas de descripción y precio, por supuesto que no hace nada ya que incluso su oGridEdit esta oculto, en dicho caso lo que tienes que cambiar es directamente la matriz aArrayData como es lógico y luego refrescar el browse con un RefreshCurrent()
Por otra parte si las colummas están en modo edición no tienes más que modificar el oGridEdit:Value de la columna y automaticamente se mostrará su nuevo valor.
Para saber si una columna está en edición puedes utilizar la propiedad oGridEdit:lVisible, que si .T. está en edición.
Lo importante es tener claro que es lo que se está haciendo en cada momento.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
--
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola Ignacio,
Bueno, algo vamos avanzando,
Lo primero de todo, pedirte disculpas por tantas preguntas en tan poco tiempo, pero creo que éste es un tema en el que muchos estamos (o estarán) atascados. Sólo he sido el primero en tirar la piedra.
O a lo mejor no, tal vez es sólo cosa mía. No estaría de más que alguno de los que lo leen opinaran, por lo menos para que este hilo dejara de parecerse a un partido de tenis entre los dos :)
Veo que en las celdas que tienen edición puedo asignarles valor mediante
oBrwArray:aCols[x]:oGridEdit:SetValue()
En las celdas que tienen edición beNONE no se lo puedo hacer. Supongo que será porque ya que no se van a editar, no se crea el oGridEdit correspondiente. Para cambiar el valor de esas celdas tengo que acceder directamente a su posición en el aArrayData y después de cambiarlas hacer un Refresh, o mejor aún, un RefreshCurrent. Por cierto. ¿Si hago un RefreshCurrent y en el footer tengo la suma de toda esa columna, ¿se actualizaría?
Donde me he quedado es en lo que contaba el otro día del color de fondo de las celdas no editables cuando modificamos la línea. Me sigue de color azul oscuro.
He probado a cambiar el nMarqueeStyle, pero en todos los de tipo línea me hace lo mismo
¿Cuando se evalúan los oGridEdit:OnExit?
Si por ejemplo, le pongo nMarqueeStyle := bmSOLIDCELL y pulso enter sobre una de las líneas, se evalúan todos los onExit de atras a adelante. Esto me da un problema a la hora de insertar un nuevo dato, ya que por ejemplo, la columna de unidades no puede quedar vacía, y al evaluarme el OnExit con los datos en blanco, me saca el mensaje correspondiente
Si el MarqueeStyle es de tipo línea, al pulsar enter me evalúa todos los onExit menos el primero
Sé que la cosa está en el oSender:Edit() que pongo al pulsar el enter, porque si en lugar de pulsar enter hago doble click con el ratón actúa de forma diferente, pero no termino de entenderlo
¿Por qué si edito una celda con doble click( con bm???CELL), se sale de edición independientemente de lo que retorno OnExit?
No termino de entender por qué si edito una celda (bmHIGHLROW) y pulso con el ratón en cualquier parte de la misma línea me hace caso al retorno que le diga en OnExit pero si hago click en cualquier otra parte del browse me evalúa el OnExit pero siempre retorna .t. (o por lo menos abandona la edición de esa celda)
¿Puedo hacer que la edición se quede en una celda determinada pulse donde pulse? (salvo escape claro)
Un saludico,
Fredy
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0515-0, 11/04/2005
Comprobado en: 12/04/2005 15:20:41
avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
http://www.avast.com

Attached files articulos.zip (2.3 KB)Â
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

> No tienes más que borrar la linea de albarán completa si no te la ha rellenado correctamente, al menos sus campos básicos. Creo que es lo correcto.
Sí­, o dejarla como estaba. Pero no sé cómo hacerlo, el problema es que
al salirse ya no tengo control para hacer nada.

> >>1 - El método ExitCodigo se ejecuta al salir de la celda de código
> >>:oArray:aCols[1]:oGridEdit:OnExit := "ExitCodigo" y me comprueba que el
> >>código introducido es correcto.
> >>Ahora bien, si el usuario ha pulsado escape no hace falta que compruebe
> >>nada. ¿Cómo sé dentro del oGridEdit si me han anulado la edición ?
> >>El OnPostEdit de la columna sí­ lo tiene, pero se ejecuta después.
>
> Muy facil, de la documentación:
>
Si en el PostEdit lo he visto, ¿pero en el OnExit? Me harí­a falta una
especie de LastKey() o conocer la última tecla pulsada.
> Para saber si una columna está en edición puedes utilizar la propiedad oGridEdit:lVisible, que si .T. está en edición.
Bueno, veo que oSender:lVisible es .t. cuando validamos con enter o
seguimos en misma lí­nea y .f. cuando terminamos de editar la lí­nea con
escape o pinchamos en una lí­nea distinta, tal vez por ahí­.....
-------------------------------------
::oArrayBrowse1:aCols[1]:oGridEdit:OnExit := "ExitCodigo"
(....)
METHOD ExitCodigo( osender ) CLASS TForm1
Local Retorno := .t.
Local nPos := aScan( ::aArticulos, {|x| x[1]= oSender:Value})
Logdebug("> OnExit Codigo" , oSender:Value, osender:lvisible)
IF oSender:lVisible // si lVisible, hemos salido con enter o pinchando
una celda de la misma lí­nea
IF nPos == 0
MsgInfo( "Artí­culo no encontrado" )
Retorno := .f.
ELSE
WITH OBJECT OSENDER:OPARENT
:aArrayData[ :nArrayAt, 2] := ::aArticulos[nPos,2]
:aCols[2]:oGridEdit:SETVALUE(::aArticulos[nPos,3])
:aCols[4]:oGridEdit:SETVALUE(::aArticulos[nPos,3])
:aArrayData[ :nArrayAt, 5] := ::aArticulos[nPos,3] * :aCols
[3]:oGridEdit:Value
:RefreshCURRENT()
END
ENDIF // nPos=0
ENDIF // lVisible. Si hemos salido con escape, tan solo devolvemos .t.
RETURN Retorno
-------------------------------------------
Un saludico,
Fredy
aznar_s_a
Mensajes: 3
Registrado: Mar Mar 29, 2005 9:32 am

Editar l

Mensaje por aznar_s_a »

Pues efectivamente Fredy, quizas sea esto uno de los puntos mas
importantes en un programa de gestión, por que,¿cuales son las opciones de
un programa que mas se utilizan a diario? la opcion de albaranes-facturacion
en la parte comercial y la opcion de diario en la contabilidad, es por ello
que la flexibilidad, agilidad y control en la introduccion de datos tiene
que se total si pensamos en el usuario que pasa horas en estas opciones.
Un ejemplo a respecto abriría muchas puertas.
Saludos.
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=4439632489159886827280@news.ozs.com...]4439632489159886827280@news.ozs.com...[/email]
> Hola Ignacio,
>
> Bueno, algo vamos avanzando,
>
> Lo primero de todo, pedirte disculpas por tantas preguntas en tan poco
tiempo, pero creo que éste es un tema en el que muchos estamos (o estarán)
atascados. Sólo he sido el primero en tirar la piedra.
>
> O a lo mejor no, tal vez es sólo cosa mía. No estaría de más que alguno de
los que lo leen opinaran, por lo menos para que este hilo dejara de
parecerse a un partido de tenis entre los dos :)
>
>
> Veo que en las celdas que tienen edición puedo asignarles valor mediante
> oBrwArray:aCols[x]:oGridEdit:SetValue()
> En las celdas que tienen edición beNONE no se lo puedo hacer. Supongo que
será porque ya que no se van a editar, no se crea el oGridEdit
correspondiente. Para cambiar el valor de esas celdas tengo que acceder
directamente a su posición en el aArrayData y después de cambiarlas hacer un
Refresh, o mejor aún, un RefreshCurrent. Por cierto. ¿Si hago un
RefreshCurrent y en el footer tengo la suma de toda esa columna, ¿se
actualizaría?
>
> Donde me he quedado es en lo que contaba el otro día del color de fondo de
las celdas no editables cuando modificamos la línea. Me sigue de color azul
oscuro.
> He probado a cambiar el nMarqueeStyle, pero en todos los de tipo línea me
hace lo mismo
>
> ¿Cuando se evalúan los oGridEdit:OnExit?
>
> Si por ejemplo, le pongo nMarqueeStyle := bmSOLIDCELL y pulso enter sobre
una de las líneas, se evalúan todos los onExit de atras a adelante. Esto me
da un problema a la hora de insertar un nuevo dato, ya que por ejemplo, la
columna de unidades no puede quedar vacía, y al evaluarme el OnExit con los
datos en blanco, me saca el mensaje correspondiente
>
> Si el MarqueeStyle es de tipo línea, al pulsar enter me evalúa todos los
onExit menos el primero
>
> Sé que la cosa está en el oSender:Edit() que pongo al pulsar el enter,
porque si en lugar de pulsar enter hago doble click con el ratón actúa de
forma diferente, pero no termino de entenderlo
>
> ¿Por qué si edito una celda con doble click( con bm???CELL), se sale de
edición independientemente de lo que retorno OnExit?
>
> No termino de entender por qué si edito una celda (bmHIGHLROW) y pulso
con el ratón en cualquier parte de la misma línea me hace caso al retorno
que le diga en OnExit pero si hago click en cualquier otra parte del browse
me evalúa el OnExit pero siempre retorna .t. (o por lo menos abandona la
edición de esa celda)
> ¿Puedo hacer que la edición se quede en una celda determinada pulse donde
pulse? (salvo escape claro)
>
>
> Un saludico,
> Fredy
>
>
------------------------------------------------------------ ----------------
----
>
>
>
> ---
> avast! Antivirus: Saliente mensaje limpio.
> Base de datos de Virus (VPS): 0515-0, 11/04/2005
> Comprobado en: 12/04/2005 15:20:41
> avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
> http://www.avast.com
>
>
>
paco-ssi
Mensajes: 390
Registrado: Lun Feb 07, 2005 4:17 pm

Editar l

Mensaje por paco-ssi »

Fredy, Ignacio: Estamos muy atentos a vuestras exposiciones y soluciones.
Paco V.
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=4439632489159886827280@news.ozs.com...]4439632489159886827280@news.ozs.com...[/email]
> Hola Ignacio,
>
> Bueno, algo vamos avanzando,
>
> Lo primero de todo, pedirte disculpas por tantas preguntas en tan poco
tiempo, pero creo que éste es un tema en el que muchos estamos (o estarán)
atascados. Sólo he sido el primero en tirar la piedra.
>
> O a lo mejor no, tal vez es sólo cosa mía. No estaría de más que alguno de
los que lo leen opinaran, por lo menos para que este hilo dejara de
parecerse a un partido de tenis entre los dos :)
>
>
> Veo que en las celdas que tienen edición puedo asignarles valor mediante
> oBrwArray:aCols[x]:oGridEdit:SetValue()
> En las celdas que tienen edición beNONE no se lo puedo hacer. Supongo que
será porque ya que no se van a editar, no se crea el oGridEdit
correspondiente. Para cambiar el valor de esas celdas tengo que acceder
directamente a su posición en el aArrayData y después de cambiarlas hacer un
Refresh, o mejor aún, un RefreshCurrent. Por cierto. ¿Si hago un
RefreshCurrent y en el footer tengo la suma de toda esa columna, ¿se
actualizaría?
>
> Donde me he quedado es en lo que contaba el otro día del color de fondo de
las celdas no editables cuando modificamos la línea. Me sigue de color azul
oscuro.
> He probado a cambiar el nMarqueeStyle, pero en todos los de tipo línea me
hace lo mismo
>
> ¿Cuando se evalúan los oGridEdit:OnExit?
>
> Si por ejemplo, le pongo nMarqueeStyle := bmSOLIDCELL y pulso enter sobre
una de las líneas, se evalúan todos los onExit de atras a adelante. Esto me
da un problema a la hora de insertar un nuevo dato, ya que por ejemplo, la
columna de unidades no puede quedar vacía, y al evaluarme el OnExit con los
datos en blanco, me saca el mensaje correspondiente
>
> Si el MarqueeStyle es de tipo línea, al pulsar enter me evalúa todos los
onExit menos el primero
>
> Sé que la cosa está en el oSender:Edit() que pongo al pulsar el enter,
porque si en lugar de pulsar enter hago doble click con el ratón actúa de
forma diferente, pero no termino de entenderlo
>
> ¿Por qué si edito una celda con doble click( con bm???CELL), se sale de
edición independientemente de lo que retorno OnExit?
>
> No termino de entender por qué si edito una celda (bmHIGHLROW) y pulso
con el ratón en cualquier parte de la misma línea me hace caso al retorno
que le diga en OnExit pero si hago click en cualquier otra parte del browse
me evalúa el OnExit pero siempre retorna .t. (o por lo menos abandona la
edición de esa celda)
> ¿Puedo hacer que la edición se quede en una celda determinada pulse donde
pulse? (salvo escape claro)
>
>
> Un saludico,
> Fredy
>
>
------------------------------------------------------------ ----------------
----
>
>
>
> ---
> avast! Antivirus: Saliente mensaje limpio.
> Base de datos de Virus (VPS): 0515-0, 11/04/2005
> Comprobado en: 12/04/2005 15:20:41
> avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
> http://www.avast.com
>
>
>
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

Editar l

Mensaje por Francisco Sanchez »

Fredy tienes que controlar en la primera columna que si la funcion que
utilizas para validar te devuelva .F.y no tome el nuevo valor sino luego se
queda grabado a pesar de que no haya encontrado el nuevo valor.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

Editar l

Mensaje por Francisco Sanchez »

De todas formas solo permito que el usuario interactue con el browse en modo
edicion, nunca para añadir nuevos registros. Para ello muestro el tipico
formulario. Si te fijas herramientas como microsoft outlook te muestran un
formulario para tales cuestiones.
El que la escopeta tenga dos cañones no significa que siempre tengamos que
disparar los 2 cartuchos. Ojo es solo una opinion personal.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

Editar l

Mensaje por Francisco Sanchez »

Fredy de todas formas, yo no utilizo el arraybrowse pero utilizo dbfbrowse y
supongo que para lo que te explico ahora sera lo mismo. En dbfbrowse en el
onpostedit de cada uno de las columnas digamos, campos que estoy editando,
pongo lo que quiero, y mientras paso de uno a otro voy guardanto el valor
nuevo de cada uno en una data que es a su vez un array con tantos elementos
como datos estoy modificando - columnas del browse editables -, y en el
onpostedit de la ultima columna compruebo que no se haya cancelado la
edicion y llamo a un metodo que coge ese array y los sustituye en el
registro de la dbf. Esto para dbf, parar un arraybrowse creo que un sistema
similar te valdria.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Editar l

Mensaje por ignacio »

Fredy,
> Veo que en las celdas que tienen edición puedo asignarles valor mediante
> oBrwArray:aCols[x]:oGridEdit:SetValue()
No tiene que ver. Si quieres cambiar el valor del array sencilla y
llanamente modifica el array, y punto. Si además quieres que te muestre el
cambio el browse pues entonces lo refrescas.
Ahora bien, que ocurre si AL MISMO TIEMPO ESTAS EDITANDO JUSTO LA CELDA QUE
QUIERES ACTUALIZAR, PUES..... QUE ENTONCES EL CAMBIO DEL VALOR DEL ARRAY NO
SE MUESTRA EN EL TGRIDEDIT. POR LO TANTO ADEMAS DE CAMBIAR EL VALOR DE LA
CELDA DEL ARRAY DEBERIAS TAMBIEN ACTUALIZAR EL VALOR DE SU GRIDEDIT Y COMO
TE COMENTE EN UN EMAIL ANTERIOR SE HACE CON oGridEdit:Value := "lo que sea"
>>¿Si hago un RefreshCurrent y en el footer tengo la suma de toda esa
>>columna, ¿se actualizaría?
Pues va ser que no, ni lo puede ser ya que el footer muestra literales que
tu alimentas a mano.
> He probado a cambiar el nMarqueeStyle, pero en todos los de tipo línea me
> hace lo mismo
Pues con tu ejemplo de articulos, yo a la primera cambiando el nMarqueeStyle
a bmSOLIDCELL
> ¿Cuando se evalúan los oGridEdit:OnExit?
Cuando pierden foco
> Si por ejemplo, le pongo nMarqueeStyle := bmSOLIDCELL y pulso enter sobre
> una de las líneas, se evalúan todos los onExit de atras a adelante. Esto
> me da un problema a la hora de insertar un nuevo dato, ya que por ejemplo,
> la columna de unidades no puede quedar vacía, y al evaluarme el OnExit con
> los datos en blanco, me saca el mensaje correspondiente
Arreglado. Ya no evalua ninguno en el proceso de inicio de edición
>
> ¿Por qué si edito una celda con doble click( con bm???CELL), se sale de
> edición independientemente de lo que retorno OnExit?
>
Siempre que intentes navegar por el browse o cambiar a una columna no
editable termino la edición independientemente del cualquier OnExit.
> No termino de entender por qué si edito una celda (bmHIGHLROW) y pulso
> con el ratón en cualquier parte de la misma línea me hace caso al retorno
> que le diga en OnExit pero si hago click en cualquier otra parte del
> browse me evalúa el OnExit pero siempre retorna .t. (o por lo menos
> abandona la edición de esa celda)
Ya contestado
> ¿Puedo hacer que la edición se quede en una celda determinada pulse donde
> pulse? (salvo escape claro)
No, creo que ya esta explicado. Todas tus preguntas se dirigen a intentar
como sea hacer edición modal por lo que te recomiendo que muestres mejor un
formulario modal con la linea completa.
Un saludo,
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
>
> > Veo que en las celdas que tienen edición puedo asignarles valor mediante
> > oBrwArray:aCols[x]:oGridEdit:SetValue()
>
> No tiene que ver. Si quieres cambiar el valor del array sencilla y
> llanamente modifica el array, y punto. Si además quieres que te muestre el
> cambio el browse pues entonces lo refrescas.

> Ahora bien, que ocurre si AL MISMO TIEMPO ESTAS EDITANDO JUSTO LA CELDA QUE
> QUIERES ACTUALIZAR, PUES..... QUE ENTONCES EL CAMBIO DEL VALOR DEL ARRAY NO
> SE MUESTRA EN EL TGRIDEDIT. POR LO TANTO ADEMAS DE CAMBIAR EL VALOR DE LA
> CELDA DEL ARRAY DEBERIAS TAMBIEN ACTUALIZAR EL VALOR DE SU GRIDEDIT Y COMO
> TE COMENTE EN UN EMAIL ANTERIOR SE HACE CON oGridEdit:Value := "lo que sea"
La diferencia está en que cuando cambio el valor del array se modifica
inmediatamente y si cambio el SetValue el valor "real" del array se
modifica cuando valido, en el PostEdit.
> >>¿Si hago un RefreshCurrent y en el footer tengo la suma de toda esa
> >>columna, ¿se actualizarí­a?
>
> Pues va ser que no, ni lo puede ser ya que el footer muestra literales que
> tu alimentas a mano.
>
Vale, es verdad.. es "c"footer.
Si en el postedit pongo :oArray:cols[5]:cFooter := Sumas(::oArray)
funciona.
¿Hay algún evento como el OnInitialize del formulario pero que se pueda
aplicar al resto de los controles?
> > He probado a cambiar el nMarqueeStyle, pero en todos los de tipo lí­nea me
> > hace lo mismo
>
> Pues con tu ejemplo de articulos, yo a la primera cambiando el nMarqueeStyle
> a bmSOLIDCELL
Con los tipo CELL sí­, pero con los tipo ROW no lo puedo cambiar.
> >
> > ¿Por qué si edito una celda con doble click( con bm???CELL), se sale de
> > edición independientemente de lo que retorno OnExit?
> >
>
> Siempre que intentes navegar por el browse o cambiar a una columna no
> editable termino la edición independientemente del cualquier OnExit.
¿y puedo cazar ese evento en algún sitio?
Es que efectivamente sale de la edición, pero yo no puedo hacer nada más
que mirar como se sale.
> > ¿Puedo hacer que la edición se quede en una celda determinada pulse donde
> > pulse? (salvo escape claro)
> No, creo que ya esta explicado. Todas tus preguntas se dirigen a intentar
> como sea hacer edición modal por lo que te recomiendo que muestres mejor un
> formulario modal con la linea completa.
No, no quiero un grid modal, quiero un grid útil para mis aplicaciones y
me resisto a tener que volver a utilizar el grid sólo para visualizar
datos.
Y es que no sé en qué circunstancias puedo utilizar la edición de un
grid con estas caracterí­sticas
Sólo quiero poder introducir una lí­nea de albarán donde el artí­culo que
se ponga exista y me multiplique las unidades por el precio. Y al final
lo conseguiré, que por mis venas corre sangre baturrica. ;-)
Fí­jate en el ejemplo que mando.
Entra en la primera lí­nea y cambia el 103001 por el código 20001 que sí­
que existe. Ahora, sin pulsar enter ni nada pulsa con el ratón en la
segunda lí­nea del browse.
No está bien que permita hacer eso, resulta que tengo un artí­culo que sí­
existe, pero no me lo reconoce y encima, el precio y el importe total
está mal, cuando el código de artí­culo es el correcto. No quiero ni
pensar lo que me dirí­an mis clientes si dejo hacer esto en una factura.
Otra cosa,
Si estoy editanto por ejemplo el código de un artí­culo en el browse y
pulso el botón superior, se sale de la edición del grid, pero no evalúa
la pulsación del botón
Un saludico,
Fredy
--

Attached files
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Me dejé el ejemplo
--

Attached files articulos.zip (3.2 KB)Â
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
Sí­, pero la cuestión es la misma.
Añadir un dato no es más que insertar un registro en blanco y luego
entrar en modo de edición de ese registro.
Un saludico,
Fredy
In article <425bf7e1$1@ozsrvnegro.ozlan.local>,
francisco@softwaretotal.biz says...
> De todas formas solo permito que el usuario interactue con el browse en modo
> edicion, nunca para añadir nuevos registros. Para ello muestro el tipico
> formulario. Si te fijas herramientas como microsoft outlook te muestran un
> formulario para tales cuestiones.
>
> El que la escopeta tenga dos cañones no significa que siempre tengamos que
> disparar los 2 cartuchos. Ojo es solo una opinion personal.
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>
>
>
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Sí­, realmente es lo mismo.
He utilizado arrays para no ir con bases de datos arriba y abajo cuando
mando los ejemplos.
Un saludico,
Fredy
In article <425bf926$1@ozsrvnegro.ozlan.local>,
francisco@softwaretotal.biz says...
> Fredy de todas formas, yo no utilizo el arraybrowse pero utilizo dbfbrowse y
> supongo que para lo que te explico ahora sera lo mismo. En dbfbrowse en el
> onpostedit de cada uno de las columnas digamos, campos que estoy editando,
> pongo lo que quiero, y mientras paso de uno a otro voy guardanto el valor
> nuevo de cada uno en una data que es a su vez un array con tantos elementos
> como datos estoy modificando - columnas del browse editables -, y en el
> onpostedit de la ultima columna compruebo que no se haya cancelado la
> edicion y llamo a un metodo que coge ese array y los sustituye en el
> registro de la dbf. Esto para dbf, parar un arraybrowse creo que un sistema
> similar te valdria.
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Editar l

Mensaje por ignacio »

Fredy,
Voy a preparar un ejemplo para crear diseño de estructuas de DBFs con todas
las opciones posibles y asunto terminado. Espero.
Saludos,
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=MPG.1cc638fb7b5229cd9896f5@news.ozs.com...]MPG.1cc638fb7b5229cd9896f5@news.ozs.com...[/email]
Hola,
>
> > Veo que en las celdas que tienen edición puedo asignarles valor mediante
> > oBrwArray:aCols[x]:oGridEdit:SetValue()
>
> No tiene que ver. Si quieres cambiar el valor del array sencilla y
> llanamente modifica el array, y punto. Si además quieres que te muestre el
> cambio el browse pues entonces lo refrescas.
> Ahora bien, que ocurre si AL MISMO TIEMPO ESTAS EDITANDO JUSTO LA CELDA
> QUE
> QUIERES ACTUALIZAR, PUES..... QUE ENTONCES EL CAMBIO DEL VALOR DEL ARRAY
> NO
> SE MUESTRA EN EL TGRIDEDIT. POR LO TANTO ADEMAS DE CAMBIAR EL VALOR DE LA
> CELDA DEL ARRAY DEBERIAS TAMBIEN ACTUALIZAR EL VALOR DE SU GRIDEDIT Y COMO
> TE COMENTE EN UN EMAIL ANTERIOR SE HACE CON oGridEdit:Value := "lo que
> sea"
La diferencia está en que cuando cambio el valor del array se modifica
inmediatamente y si cambio el SetValue el valor "real" del array se
modifica cuando valido, en el PostEdit.
> >>¿Si hago un RefreshCurrent y en el footer tengo la suma de toda esa
> >>columna, ¿se actualizaría?
>
> Pues va ser que no, ni lo puede ser ya que el footer muestra literales que
> tu alimentas a mano.
>
Vale, es verdad.. es "c"footer.
Si en el postedit pongo :oArray:cols[5]:cFooter := Sumas(::oArray)
funciona.
¿Hay algún evento como el OnInitialize del formulario pero que se pueda
aplicar al resto de los controles?
> > He probado a cambiar el nMarqueeStyle, pero en todos los de tipo línea
> > me
> > hace lo mismo
>
> Pues con tu ejemplo de articulos, yo a la primera cambiando el
> nMarqueeStyle
> a bmSOLIDCELL
Con los tipo CELL sí, pero con los tipo ROW no lo puedo cambiar.
> >
> > ¿Por qué si edito una celda con doble click( con bm???CELL), se sale de
> > edición independientemente de lo que retorno OnExit?
> >
>
> Siempre que intentes navegar por el browse o cambiar a una columna no
> editable termino la edición independientemente del cualquier OnExit.
¿y puedo cazar ese evento en algún sitio?
Es que efectivamente sale de la edición, pero yo no puedo hacer nada más
que mirar como se sale.
> > ¿Puedo hacer que la edición se quede en una celda determinada pulse
> > donde
> > pulse? (salvo escape claro)
> No, creo que ya esta explicado. Todas tus preguntas se dirigen a intentar
> como sea hacer edición modal por lo que te recomiendo que muestres mejor
> un
> formulario modal con la linea completa.
No, no quiero un grid modal, quiero un grid útil para mis aplicaciones y
me resisto a tener que volver a utilizar el grid sólo para visualizar
datos.
Y es que no sé en qué circunstancias puedo utilizar la edición de un
grid con estas características
Sólo quiero poder introducir una línea de albarán donde el artículo que
se ponga exista y me multiplique las unidades por el precio. Y al final
lo conseguiré, que por mis venas corre sangre baturrica. ;-)
Fíjate en el ejemplo que mando.
Entra en la primera línea y cambia el 103001 por el código 20001 que sí
que existe. Ahora, sin pulsar enter ni nada pulsa con el ratón en la
segunda línea del browse.
No está bien que permita hacer eso, resulta que tengo un artículo que sí
existe, pero no me lo reconoce y encima, el precio y el importe total
está mal, cuando el código de artículo es el correcto. No quiero ni
pensar lo que me dirían mis clientes si dejo hacer esto en una factura.
Otra cosa,
Si estoy editanto por ejemplo el código de un artículo en el browse y
pulso el botón superior, se sale de la edición del grid, pero no evalúa
la pulsación del botón
Un saludico,
Fredy
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
> Voy a preparar un ejemplo para crear diseño de estructuas de DBFs con
> todas las opciones posibles y asunto terminado. Espero.
Gracias, a ver si así aprendo a hacerlo.
Mando un ejemplo de lo último que tengo y que se parece mucho a lo que busco en un grid con capacidades de edición de datos, aunque en el momento en que usamos el ratón deja de funcionar y hace hace lo que quiere.
¿hay alguna forma de hacer una especie de auto append a través de OnPastEof(). Me explico, puedo hacer que si pulso flecha abajo y estoy en el último me inserte un registro, pero no puedo hacer que siga insertando registros después de este. Solo me funciona para la primera vez
Fíjate en la img que mando
No sé de dónde sale el edit ese que aparece pegado a la cabecera
Luego, cuando entro en edición desaparece sin más.
Un saludico,
Fredy
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0515-1, 12/04/2005
Comprobado en: 13/04/2005 18:02:46
avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
http://www.avast.com

Attached files articulos.zip (5.4 KB)Â
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Editar l

Mensaje por fredy[1] »

Hola,
> Voy a preparar un ejemplo para crear diseño de estructuas de DBFs con
> todas las opciones posibles y asunto terminado. Espero.
Gracias, a ver si así aprendo a hacerlo.
Mando un ejemplo de lo último que tengo y que se parece mucho a lo que busco en un grid con capacidades de edición de datos, aunque en el momento en que usamos el ratón deja de funcionar y hace hace lo que quiere.
¿hay alguna forma de hacer una especie de auto append a través de OnPastEof(). Me explico, puedo hacer que si pulso flecha abajo y estoy en el último me inserte un registro, pero no puedo hacer que siga insertando registros después de este. Solo me funciona para la primera vez
Fíjate en la img que mando
No sé de dónde sale el edit ese que aparece pegado a la cabecera
Luego, cuando entro en edición desaparece sin más.
Un saludico,
Fredy
---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0515-1, 12/04/2005
Comprobado en: 13/04/2005 18:16:53
avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
http://www.avast.com

Attached files articulos.zip (5.4 KB)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9442
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Editar l

Mensaje por ignacio »

Fredy,
Espera al ejemplo. Gracias.
> ¿hay alguna forma de hacer una especie de auto append a través de
> OnPastEof().
Nadie te impide crear una nueva fila en el evento ONPOSTEDIT. OnPastEof()
como su nombre indica se produce cuando se quiere rebasar el limite del
browse y NO es tu caso.
Un saludo,
"Fredy" <fredy@airtel.net> escribió en el mensaje
news:[email=425d45ff@ozsrvnegro.ozlan.local...]425d45ff@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
>> Voy a preparar un ejemplo para crear diseño de estructuas de DBFs con
>> todas las opciones posibles y asunto terminado. Espero.
>
> Gracias, a ver si así aprendo a hacerlo.
>
> Mando un ejemplo de lo último que tengo y que se parece mucho a lo que
> busco en un grid con capacidades de edición de datos, aunque en el momento
> en que usamos el ratón deja de funcionar y hace hace lo que quiere.
>
> ¿hay alguna forma de hacer una especie de auto append a través de
> OnPastEof(). Me explico, puedo hacer que si pulso flecha abajo y estoy en
> el último me inserte un registro, pero no puedo hacer que siga insertando
> registros después de este. Solo me funciona para la primera vez
>
> Fíjate en la img que mando
> No sé de dónde sale el edit ese que aparece pegado a la cabecera
> Luego, cuando entro en edición desaparece sin más.
>
> Un saludico,
> Fredy
>
------------------------------------------------------------ --------------------
>
>
>
> ---
> avast! Antivirus: Saliente mensaje limpio.
> Base de datos de Virus (VPS): 0515-1, 12/04/2005
> Comprobado en: 13/04/2005 18:16:53
> avast! tiene los derechos reservados (c) 1988-2004 ALWIL Software.
> http://www.avast.com
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder