Hola a todos y felices fiestas
Unas cuestiones sobre TxBrowse.
1ª ¿Cómo puedo hacer que cuando el último get de un diálogo pierda su foco con enter me vaya directamente al Browse?
2ª Esta me está volviendo loco. En un ejemplo que ya comenté antes de Francisco J. Alegría, viene el Browse con la siguiente línea :
oCol:bStrData := {||(cALias)->cuenta}
con esto cuando pulsas enter editas el campo, pues en mi Browse cuando uso esa instrucción me da éste error
Application
===========
Path and name: C:\Proyectos\Gfactu\GFACTU.Exe (32 bits)
Size: 724,480 bytes
Time from start: 0 hours 0 mins 3 secs
Error occurred at: 29-12-2008, 16:09:30
Error description: Error BASE/1111 Argument error: LEN
Args:
[ 1] = N 0
Stack Calls
===========
Called from: => LEN(0)
Called from: XBROWSE.PRG => TXBRWCOLUMN:DATAWIDTH(0)
Called from: XBROWSE.PRG => TXBRWCOLUMN:ADJUST(0)
Called from: XBROWSE.PRG => TXBROWSE:ADJUST(0)
Called from: XBROWSE.PRG => TXBROWSE:INITIATE(0)
Called from: => __OBJSENDMSG(0)
Called from: HARBOUR.PRG => OSEND(0)
Called from: HARBOUR.PRG => ASEND(0)
Called from: DIALOG.PRG => TDIALOG:INITIATE(0)
Called from: DIALOG.PRG => TDIALOG:HANDLEEVENT(0)
Called from: => DIALOGBOX(0)
Called from: DIALOG.PRG => TDIALOG:ACTIVATE(0)
Called from: gesh0200.prg => ALBARANES(187)
Called from: geshinic.prg => (b)MAIN(86)
Called from: MENU.PRG => TMENU:ACTIVATE(0)
Called from: BTNBMP.PRG => TBTNBMP:SHOWPOPUP(0)
Called from: geshinic.prg => (b)MAIN(96)
Called from: BTNBMP.PRG => TBTNBMP:CLICK(0)
Called from: BTNBMP.PRG => TBTNBMP:LBUTTONUP(0)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0)
Called from: BTNBMP.PRG => TBTNBMP:HANDLEEVENT(0)
Called from: WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: WINDOW.PRG => TMDIFRAME:ACTIVATE(0)
Called from: geshinic.prg => MAIN(179)
Por el contrario si cambio la instrucción oCol:bStrData por oCol:bEditValue no da ese error, pero no edito con enter, ni me va a un registro nuevo al llegar a la última columna. Tan sólo puedo moverme con las flechas y si doy escape me da el error de que el área no está en uso ( DBCMD 2001). La edición se produce tecleando algo, pero al pulsar enter.
¿Alguna solución? Uso FWH 8.04
Lo curioso de esto es que el ejemplo de Francisco J. lo compilo con la misma versión que mi programa y ¡¡¡¡Funciona el bStrData sin errores !!!
Bueno el ladrillazo ya os lo he tirado.
Un saludo a todos
Pedro
TxBrowse
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: TxBrowse
Pedro:
Sobre No 1, prueba esto:
@7.0, 20 GET oConceptG[4] VAR aConceptG[4] OF oRect SIZE 510,18 FONT oWnd:oFont VALID (oBrw:SetFocus(),.t.)
Sobre No 2, ¿Puedes subir el codigo para ver si podemos ayudarte?
Aparentemente estas usando LEN sobre un valor numerico. Prueba asi: LEN(STR(nVal,10))
Saludos
Francisco
Sobre No 1, prueba esto:
@7.0, 20 GET oConceptG[4] VAR aConceptG[4] OF oRect SIZE 510,18 FONT oWnd:oFont VALID (oBrw:SetFocus(),.t.)
Sobre No 2, ¿Puedes subir el codigo para ver si podemos ayudarte?
Aparentemente estas usando LEN sobre un valor numerico. Prueba asi: LEN(STR(nVal,10))
Saludos
Francisco
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: TxBrowse
Hola Francisco
Bueno, tu solución no funciona, cuando el último get es pulsado con enter, va directamente al botón aceptar, y de ahi al resto de los botones,y, si pulsas flecha arriba, vuelve al último get (al Browse, que le den, hasta que no pinches con el ratón).
En cuanto a lo segundo, el código de creación del browse es este :
Como notarás está marcada como comentario la instrucción oCol:bStrData, si comento la línea siguiente y descomento esa, da el error que comenté antes,.... Len(0), en cambio con tu ejemplo por más que lo compilo y lo modifico, no da ese error.
y las columnas en tu ejemplo las defines así
*--------------------------------------------------------------------------------------------------------------------------------------------
La verdad que está muy raro
Un saludo Francisco
Pedro
Bueno, tu solución no funciona, cuando el último get es pulsado con enter, va directamente al botón aceptar, y de ahi al resto de los botones,y, si pulsas flecha arriba, vuelve al último get (al Browse, que le den, hasta que no pinches con el ratón).
En cuanto a lo segundo, el código de creación del browse es este :
Code: Select all
REDEFINE GET aCabAlb[22] ID 4008 PICTURE "@!" OF oDlgAlb UPDATE;
COLOR RGB(0,0,153),RGB(255,204,51);
VALID (oBrw:SetFocus(),.T.)
oBrw = TXBrowse():New( oDlgAlb )
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lRecordSelector := .t.
oBrw:nHeaderLines := 1
oBrw:nDataLines := 1
oBrw:nRowSel := 1
oBrw:nMarqueeStyle := 3 //Highlight row //MARQSTYLE_HIGHLCELL
oBrw:bClrSelFocus := {||{CLR_WHITE,RGB(176,196,222 )}}
oBrw:cAlias := cAlias1
oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
oBrw:bClrSel := {|| { nRGB(0,0,0), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco
oBrw:lFastEdit := .T.
oBrw:bPastEof = {|| If (Verifica(oBrw),(Dbappend(), oBrw:GoLeftMost() , oBrw:Refresh(),;
oBrw:aCols[ 1 ]:Edit() ),) } //agrega registro y "oprime" enter
oCol = oBrw:AddCol()
* oCol:bStrData := {||(cAlias1)->codigo}
oCol:bEditValue := { ||(cAlias1)->codigo }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "CODIGO"
oCol:bOnPostEdit := { | oCol, xVal, nKey | If( RecCount() == 0,( DbAppend(), oBrw:Refresh() ),) ,;
If( nKey == VK_RETURN, If(Barticulo(oBrw,xVal),oBrw:Refresh(),oBrw:GoleftMost()),),;
If( nKey == VK_ESCAPE .and. Empty((cAlias1)->codigo),( (cAlias1)->(dbDelete()),;
(cAlias1)->(__dbPack()),(cAlias1)->(dbGoBottom()),oBrw:Refresh() ), ) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||(cAlias1)->lote}
oCol:bEditValue := { ||(cAlias1)->lote }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "LOTE"
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->lote := xVal,NextColBrw(oBrw)) ,) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||(cAlias1)->articulo}
oCol:bEditValue := { ||(cAlias1)->articulo }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "ARTICULO"
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->articulo := xVal,NextColBrw(oBrw)) ,) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||Transform( (cAlias1)->kilos,"9,999.999") }
oCol:bEditValue := { ||Transform( (cAlias1)->KILOS"9,999.999") }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "KILOS"
oCol:bEditWhen := {||(cAlias1)->totbdjas = 0 }
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->kilos := xVal,NextColBrw(oBrw),;
If ( xVal <> 0, Importe(oBrw),)) ,) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||Transform( (cAlias1)->totbdjas,"99,999")}
oCol:bEditValue := { ||Trnasform( (cAlias1)->TOTBDJAS,"99,999") }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "BANDEJAS"
oCol:bEditWhen := {||(cAlias1)->kilos = 0 }
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->totbdjas := xVal,NextColBrw(oBrw),;
If ( xVal <> 0, Importe(oBrw),)) ,) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||Transform( (cAlias1)->PRECIO,"9,999.999")}
oCol:bEditValue := { ||Transform( (cAlias1)->PRECIO,"9,999.999")}
oCol:nEditType := EDIT_GET
oCol:cHEADER := "PRECIO"
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->precio := xVal,NextColBrw(oBrw),Importe(oBrw)) ,) }
oCol = oBrw:AddCol()
* oCol:bStrData := {||Transform( (cAlias1)->IMPORTE,"999,999.99") }
oCol:bEditValue := { ||Transform( (cAlias1)->IMPORTE,"999,999.99") }
oCol:nEditType := EDIT_GET
oCol:cHEADER := "IMPORTE"
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If( nKey == VK_RETURN, ((cAlias1)->importe := Importe(oBrw),NextColBrw(oBrw)) ,), ;
if ( (cAlias1)->(Recno())==(cAlias1)->(Reccount()) , (DbAppend(), oBrw:GoLeftMost(), oBrw:Refresh()),) }
oBrw:SetRdd()
oBrw:CreateFromResource(2001)
oBrw:bKeyDown :={ | nKey | Teclas(nKey, oBrw, "TEMP") }
Como notarás está marcada como comentario la instrucción oCol:bStrData, si comento la línea siguiente y descomento esa, da el error que comenté antes,.... Len(0), en cambio con tu ejemplo por más que lo compilo y lo modifico, no da ese error.
y las columnas en tu ejemplo las defines así
*--------------------------------------------------------------------------------------------------------------------------------------------
Code: Select all
oBrw:bPastEof = {|| if( lCtaOK(oBrw) .and. lDebHabOK((cAlias)->debe+(cAlias)->haber) ,;
(Dbappend(), oBrw:GoLeftMost(),;
oBrw:Refresh(),;
oBrw:aCols[ 1 ]:Edit() ),) } //agrega registro y "oprime" enter
//Aqui uso DbPack() porque es una dbf pequeña y temporal. En grandes usar function de mantenimiento.
oCol = oBrw:AddCol()
oCol:bStrData = { || (cAlias)->cuenta }
oCol:cHeader = "CUENTA"
oCol:nEditType = EDIT_GET
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),) ,;
If( nKey == VK_RETURN, iF (lCtaOk(oBrw),(cAlias)->Cuenta := xVal,oBrw:GoLeftMost()), ) ,;
If( nKey == VK_ESCAPE .and. Empty((cAlias)->Cuenta), ( (cAlias)->(dbDelete()),(cAlias)->(__dbPack()),(cAlias)->(dbGoBottom()),oBrw:Refresh() ), ) }
oCol = oBrw:AddCol()
oCol:bStrData = { || (cAlias)->NOMBRE }
oCol:cHeader = "DESCRIPCION DE LA CUENTA"
oCol:cFooter = "BALANCE ---> "
oCol:nFootStrAlign := 1
oCol:nEditType = 0 //no editable
*---------------------------------------------------------------------------------------------------------------------------------------------
Un saludo Francisco
Pedro
-
- Posts: 845
- Joined: Sun Oct 09, 2005 5:36 pm
- Location: la laguna, mexico.
Re: TxBrowse
Pedro para brincar del get al browse prueba usando oJump
oGet:oJump := oBrw
u otroa forma si lo tienes desde recurso, prueba a reordenar (por posicion y tabulador) tus controles.
salu2
paco
oGet:oJump := oBrw
u otroa forma si lo tienes desde recurso, prueba a reordenar (por posicion y tabulador) tus controles.
salu2
paco
____________________
Paco
Paco
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: TxBrowse
Pedro.
con respecto al 1er punto verifica que tengas en el recurso activado en el TXbrowse ( este debe ser custom control ) TabStop
con respecto al 1er punto verifica que tengas en el recurso activado en el TXbrowse ( este debe ser custom control ) TabStop
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: TxBrowse
Hola Paco y Daniel
Bueno ya está casi todo solucionado, para el salto no hacia falta poner nada, solo colocar el Browse en su tab correspondiente, es decir despues del ultimo get, y solucionado. Ahora va solito al Browse despues del último get.
Lo siguiente no sé como (me refiero al bStrData) tambien se ha solucionado, si os soy sincero lo único que he hecho es borrar el prg y volverlo a hacer igual que estaba el otro.
Ya salta y con intro edito, pero ......(no podía faltar el pero), ¿ por qué carallus no abre un registro nuevo?
Le doy enter y se queda en su sitio, si le doy flecha abajo, me va a la función que está en el oBrw:bPastEof, si no, no va.
Seguiré peleando esto, ya que, en cuanto funcione, y para los que como yo empiezan a poner un browse con celdas editables
para hacer un albarán o una factura, se lo enviaré a Antonio para que los demas tengan un ejemplo.
Muchas gracias a los dos.
Pedro
Bueno ya está casi todo solucionado, para el salto no hacia falta poner nada, solo colocar el Browse en su tab correspondiente, es decir despues del ultimo get, y solucionado. Ahora va solito al Browse despues del último get.
Lo siguiente no sé como (me refiero al bStrData) tambien se ha solucionado, si os soy sincero lo único que he hecho es borrar el prg y volverlo a hacer igual que estaba el otro.
Ya salta y con intro edito, pero ......(no podía faltar el pero), ¿ por qué carallus no abre un registro nuevo?
Le doy enter y se queda en su sitio, si le doy flecha abajo, me va a la función que está en el oBrw:bPastEof, si no, no va.
Seguiré peleando esto, ya que, en cuanto funcione, y para los que como yo empiezan a poner un browse con celdas editables
para hacer un albarán o una factura, se lo enviaré a Antonio para que los demas tengan un ejemplo.
Muchas gracias a los dos.
Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: TxBrowse
Pedro:Pedro wrote:Hola Paco y Daniel
Bueno ya está casi todo solucionado, para el salto no hacia falta poner nada, solo colocar el Browse en su tab correspondiente, es decir despues del ultimo get, y solucionado. Ahora va solito al Browse despues del último get.
Lo siguiente no sé como (me refiero al bStrData) tambien se ha solucionado, si os soy sincero lo único que he hecho es borrar el prg y volverlo a hacer igual que estaba el otro.
Ya salta y con intro edito, pero ......(no podía faltar el pero), ¿ por qué carallus no abre un registro nuevo?
Le doy enter y se queda en su sitio, si le doy flecha abajo, me va a la función que está en el oBrw:bPastEof, si no, no va.
Seguiré peleando esto, ya que, en cuanto funcione, y para los que como yo empiezan a poner un browse con celdas editables
para hacer un albarán o una factura, se lo enviaré a Antonio para que los demas tengan un ejemplo.
Muchas gracias a los dos.
Pedro
Este codigo funciona bien, y es identico al tuyo, con excepción de la función NextColBrw():
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
If ( nKey == VK_RETURN, (cAlias)->CONCEPTO := xVal ,) ,;
if ( (cAlias)->(Recno())==(cAlias)->(Reccount()) , (DbAppend(), oBrw:GoLeftMost(), oBrw:Refresh()),) }
Por favor muestra el codigo de NextColBrw().
Francisco
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: TxBrowse
Hola Francisco,
Ya está todo solucionado, la función NextColBrw es la misma que tú publicaste para moverse por las celdas verificando que sea editable y saltándola si no lo es, pero aqui no tenía objeto, asi que, simplemente hace un return. Ya la he quitado del programa, pues el salto lo hace bien.
El módulo está casi acabado, solo falta la grabación de los datos en la tabla maestra y la eliminación del fichero temporal donde se graban las líneas del albarán.
Ha sido para mi toda una experiencia, pero con este módulo ya tengo tambien el de facturas directas, que es idéntico, y, aunque tengo que actualizarme en los próximos días, creo que ya tengo la librería que necesitaba para cualquier programa comercial que me encarguen.
Un saludo y que pases una Feliz salida y entrada de año, para ti y para todos los compañeros del foro.
Pedro
Ya está todo solucionado, la función NextColBrw es la misma que tú publicaste para moverse por las celdas verificando que sea editable y saltándola si no lo es, pero aqui no tenía objeto, asi que, simplemente hace un return. Ya la he quitado del programa, pues el salto lo hace bien.
El módulo está casi acabado, solo falta la grabación de los datos en la tabla maestra y la eliminación del fichero temporal donde se graban las líneas del albarán.
Ha sido para mi toda una experiencia, pero con este módulo ya tengo tambien el de facturas directas, que es idéntico, y, aunque tengo que actualizarme en los próximos días, creo que ya tengo la librería que necesitaba para cualquier programa comercial que me encarguen.
Un saludo y que pases una Feliz salida y entrada de año, para ti y para todos los compañeros del foro.
Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: TxBrowse
Pedro, muy bien!
Siempre a la orden en lo que pueda colaborar.
Francisco.
Siempre a la orden en lo que pueda colaborar.
Francisco.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql