TxBrowse

TxBrowse

Postby Pedro » Mon Dec 29, 2008 4:08 pm

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

Re: TxBrowse

Postby FranciscoA » Tue Dec 30, 2008 2:33 pm

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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TxBrowse

Postby Pedro » Tue Dec 30, 2008 4:21 pm

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  Expand view
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  Expand view

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

Re: TxBrowse

Postby Francisco Horta » Tue Dec 30, 2008 4:27 pm

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
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: TxBrowse

Postby Daniel Garcia-Gil » Tue Dec 30, 2008 4:28 pm

Pedro.
con respecto al 1er punto verifica que tengas en el recurso activado en el TXbrowse ( este debe ser custom control ) TabStop
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: TxBrowse

Postby Pedro » Tue Dec 30, 2008 5:51 pm

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

Re: TxBrowse

Postby FranciscoA » Tue Dec 30, 2008 7:45 pm

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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: TxBrowse

Postby Pedro » Tue Dec 30, 2008 9:02 pm

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

Re: TxBrowse

Postby FranciscoA » Tue Dec 30, 2008 9:09 pm

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

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

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 57 guests