TxBrowse

Post Reply
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

TxBrowse

Post by Pedro »

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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TxBrowse

Post by FranciscoA »

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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: TxBrowse

Post by Pedro »

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 :

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 
*---------------------------------------------------------------------------------------------------------------------------------------------
La verdad que está muy raro
Un saludo Francisco
Pedro
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TxBrowse

Post by Francisco Horta »

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
____________________
Paco
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: TxBrowse

Post by Daniel Garcia-Gil »

Pedro.
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
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: TxBrowse

Post by Pedro »

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
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TxBrowse

Post by FranciscoA »

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
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
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: TxBrowse

Post by Pedro »

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
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TxBrowse

Post by FranciscoA »

Pedro, muy bien!
Siempre a la orden en lo que pueda colaborar.

Francisco.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Post Reply