Siempre he preferido trabajar con BROWSE (aunque sé que recomiendan usar GRID) pero lo hago por el tema que se me hace más fácil realizar mantenimiento, ya que si un cliente me pide agregar una columna, es bien sencillo realizarlo, mientras el GRID al trabajar con matrices implica el movimiento de más código fuente.
El tema es que, ya lo había notado antes, pero no me dediqué tiempo a tratar de solucionarlo, cuando defino un BROWSE de más de 14 o 15 líneas pasa que al agregar un ítem más, al realizar el refresh, el primer item del browse se desplaza hacia arriba y se esconde, a pesar de que abajo hay mucho espacio disponible. No sé como puedo controlar o evitar esto:
Bueno, solo por si acaso coloco el código que arma el browse:
Code: Select all
*
* BOTONES DETALLES
*
@ 210 , 008 BUTTON BotAgregar ;
PICTURE 'imagen\agregar.bmp' ;
ACTION Cotiza_ItemAdd() ;
WIDTH 32 ;
HEIGHT BOT_ITEMH
@ 210+BOT_ITEMH+10 , 008 BUTTON BotEditar ;
PICTURE 'imagen\editar.bmp' ;
ACTION Cotiza_ItemEdit() ;
WIDTH 32 ;
HEIGHT BOT_ITEMH
@ 210+(BOT_ITEMH*2)+20 , 008 BUTTON BotBorrar ;
PICTURE 'imagen\borrar.bmp' ;
ACTION Cotiza_ItemDel() ;
WIDTH 32 ;
HEIGHT BOT_ITEMH
*
* BROWSE DE DETALLES
*
@ 210 , 050 BROWSE BrwArticulos ;
WIDTH nAGW ;
HEIGHT nAGH ;
FONT "Arial" SIZE 12 ;
HEADERS {'Artículo' , 'Marca' ,'Unids.' ,'Lote' ,'Vence' ,'Prec.Uni.' ,'Total' } ;
WIDTHS aAGA ;
FIELDS {'ODTMP->OD_ARTNOM','ODTMP->OD_ARTLAB','ODTMP->OD_UNIDS','ODTMP->OD_LOTE' ,'ODTMP->(STOC(OD_VENCE))' ,'ODTMP->OD_PRCUNI','ODTMP->OD_PRCVAL'} ;
JUSTIFY { BrwL , BrwL , BrwC , BrwL , BrwL , BrwR , BrwR } ;
WORKAREA ODTMP ;
BACKCOLOR Mi_Celeste_Claro ;
ON DBLCLICK Cotiza_ItemEdit()
Code: Select all
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC Cotiza_ItemAdd
LOCAL aArtiCodigo
LOCAL aArtiDatos
LOCAL aArtiNuevos
IF ! CTZ_EDIT = .T.
RETURN
ENDIF
SELE ODTMP
COUNT FOR ODTMP->(DELETED()) = .F. TO nDetalles
IF nDetalles = 20
MsgInfo('Ya no se pueden agregar más items.')
RETURN
ENDIF
aArtiCodigo := Ayuda_Arti()
IF LEN(aArtiCodigo) > 0
IF Cotiza_GetItem( 'Agregar' , aArtiCodigo[1] )
nNewRec := ODTMP->(RECNO())
Cotiza_CalculaTotal()
SELE ODTMP
DBGOTOP()
Win_Cotiza.BrwArticulos.Value := ODTMP->(RECNO())
Win_Cotiza.BrwArticulos.Refresh
Win_Cotiza.BrwArticulos.Value := nNewRec
ENDIF
ENDIF
IF IsWindowDefined( Win_Cotiza )
Win_Cotiza.BotAgregar.SetFocus
ENDIF
RETURN