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 :
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Ã
*--------------------------------------------------------------------------------------------------------------------------------------------
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