FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour xBrowse
Posts: 63
Joined: Sun Apr 08, 2007 09:50 PM
xBrowse
Posted: Tue Jun 12, 2007 02:22 PM

Hola Amigos.
Estoy peleĂĄndome desde hace algĂșn tiempo con el xBrowse
Tengo un ejemplo bastante sencillo de una entrada de datos comĂșn para hacer mantenimiento a un archivo de Presupuestos mensuales con total acumulado.
Para el ejemplo, tipeo en la cuenta cualquier dĂ­gito y en la rutina de “Co130ChCta” lleno el array “tPre” con el Ășltimo dĂ­gito de la cuenta para el 1er mes y lo incremento para los sucesivos, pero ya el Refresh() de la lĂ­nea 100 no la hace. Y todo aparece en cero.

Luego digito un”2” en row 1 col 2 y entra a la rutina “Co130ChMen” de validación mensual con el “2” digitado y tampoco hace el Refresh() de la línea 121 y luego entra otra vez (solito) a la misma rutina “Co130ChMen” pero con el dato “1” original. Como que no actualiza el array tPre con lo digitado????

Y despuĂ©s de esto entra otra vez (solito) a la funciĂłn “Co130ChCta” donde carga los datos iniciales...

No sé qué me falta o lo que hago mal
Pongo la rutina por si acaso alguien me ayuda
///////////////////////////////////////////////////////////////

extern DbfCdx

include "FiveWin.ch"

include "XBrowse.ch"

Function Main() //CO130() // Mantenimiento al Maestro de Presupuestos

PROG1="CO130"

priv oDlg,oFnt
priv oCta,oSCta
priv wCta:=0
priv oBrw,oBtnEsc,oBtnF1,oBtnF2
priv tPre:={}
for x=1 to 12
aadd(tpre,{str(x,2),0,0})
next

DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 0, -12

DEFINE DIALOG oDlg TITLE "CO130 Archivo de Presupuestos" ;
FONT oFnt FROM 3,25 to 30,75

@01,02 SAY oSCta VAR "Cuenta" OF oDlg
@01.3,05 GET oCta VAR wCta OF oDlg PICTURE "@R 999-99" SIZE 22,8 ;
VALID CO130ChCta (wCta)
oCta:bGotFocus={||oCta:SelectAll()}

WITH OBJECT (oBrw := TXBrowse():New( oDlg ) )
:SetArray(tPre)

    WITH OBJECT :aCols[1]
         :cHeader:=  "Periodo"
         :nWidth:=  50
    END

    WITH OBJECT :aCols[2]
         :cHeader:="Presupuesto"
         :nHeadStrAlign:=AL_RIGHT
         :cEditPicture:="99999,999,999.99"
         :bClrEdit:=oBrw:bClrStd
         :bOnPostEdit:={|o,x| tPre[oBrw:nArrayAt,2]:=x }
         :nEditType:=EDIT_GET
         :bEditValid:={|| Co130ChMen()}
         :nWidth:=  65
         :nDataStrAlign:=AL_RIGHT
    END

    WITH OBJECT :aCols[3]
         :cHeader:="Total"
         :nHeadStrAlign:=AL_RIGHT
         :cEditPicture:="99999,999,999.99"
         :nEditType:=EDIT_NONE
         :nWidth:=  65
         :nDataStrAlign:=AL_RIGHT
    END

    :nMarqueeStyle       := MARQSTYLE_HIGHLCELL
    :nColDividerStyle    := LINESTYLE_BLACK
    :nRowDividerStyle    := LINESTYLE_BLACK
    :nTop:=55
    :nLeft:=50
    :nBottom:=175  //nWidth=150
    :nRight:=160    //nHeight=200
    :nFreeze:=1
    :lHScroll:=.f.
    :lVScroll:=.f.
    :lFastEdit:=.t.

    :CreateFromCode()

END
oDlg:oClient:=oBrw

@10,21 BUTTON oBtnF2 PROMPT "F2 - GRABAR" SIZE 40,12 OF oDlg ;
Action (CO130Bor(),oCta:setfocus())
@10,03 BUTTON oBtnEsc PROMPT "Esc - Salir" SIZE 40,12 OF oDlg ;
Action (oDlg:End())

ACTIVATE DIALOG oDlg ;
ON INIT ( Co130Bor())

oFnt:end()
return nil
//
///////////////////////////////
//
FUNCTION Co130ChCta(wCta) // validar Cuenta
?"ChCta 88"
priv res:=val(substr(str(wCTA,5),5,1)) // toma el ultimo digito de wCta
priv TotPres:=0
tPre:={}
for x=1 to 12
TOTPRES:=TOTPRES+(Resx) // ultimo digito * mes
Aadd(tPre,{str(x,2),Res
x, TotPres})
next // mes mensual acumulado
?"ChCta 96",tPre[12,1],tPre[12,2],tPre[12,3] // tPre con datos correctos

oBrw:show()
sysRefresh()
oBrw:refresh() // linea 100: no hace Refresh(), cols 2 y 3 aparecen en Cero

oBrw:goTop()
oBrw:nRowSel:=1
oBrw:nColSel:=2
oBrw:setfocus()
oCta:oJump():=oBrw
RETURN .t.
//
/////////////////
//
Function CO130ChMen() && Val Mensual - actualizar 3ra col - Acumulados
priv lin:=oBrw:nArrayAt
?"113 ChMen","Lin",oBrw:nArrayAt,"Col",tPre[oBrw:nArrayAt,2],"Dato",tPre[lin,2]
priv TotPres:= x:= 0
for x=1 to 12
TOTPRES:=TOTPRES+tPre[x,2]
tPre[x,3]:=TOTPRES
?"118",x,tpre[x,2],tPre[x,3]
next

oBrw:refresh() // Linea 121. tampoco hace este Refresh()
oBrw:goTop()
oBrw:nRowSel:=oBrw:nArrayAt+1 // ir a sgte linea
oBrw:goDown()
oBrw:nColSel:=2
?"126 ChMen","Lin",oBrw:nArrayAt,"Col",tPre[oBrw:nArrayAt,2]
oBrw:oJump:=oBrw
oBrw:setfocus()
return .t.
//
//////////////////////////////////////
//
function CO130Bor() // Borrar
wCta:=0
oCta:refresh()
*tPre:={}
oBrw:refresh()
oBrw:hide()
return .t.
*
////////////////////////////////////

o tal vez alguien tenga alguna rutina bĂĄsica similar a lo que deseo hacer

Muchas gracias de antemano
Jorge Vargas

FW-705, xHarbour 0.99.71 (SimpLex) , bcc55
Posts: 252
Joined: Tue Oct 25, 2005 02:48 PM
Re: xBrowse
Posted: Wed Jun 13, 2007 02:27 PM
Jorge, cuando cambia el array tPre no cambia el contenido del xBrowse. El buffer de array de xBrowse es oBrw:aArrayData, tienes que hacer 1 de estas 2 cosas:
- Asigne el buffer del campo editado a oBrw:aArrayData
- Atualice el contenido de oBrw:aArrayData despues de edicion de las celdas

Puedes hacer:
 :bOnPostEdit:={|o,x| oBrw:aArrayData[oBrw:nArrayAt,2]:=x }


O:
 :bOnPostEdit:={|o,x| tPre[oBrw:nArrayAt,2]:=x, oBrw:aArrayData := aClone(tPre) }


En estos ejemplos yo he passado directamente en el codeblock de bOnPostEdit, pero puedes añadir la atualizacion de oBrw:aArrayData en mejores locales de las functions Co130ChCta, Co130ChMen etc
Tal vez tenga que refrescar la celda con oBrw:Refresh() despues de la edicion...

Espero que te sirva (e compreendas mi "portuñol")

Saludos de Brasil
Maurilio
Posts: 63
Joined: Sun Apr 08, 2007 09:50 PM
xBrowse
Posted: Thu Jun 14, 2007 02:50 PM

Hola Maurilio
Muchas gracias por tu ayuda. Tu Portuñol es igualito a mi Español.
Actualicé el oBrw:aArrayData antes de hacer los Refresh() y funciona perfecto cuando hago el seguimiento.
Pero todavía tengo el problema que después de entrar a la rutina Co130ChMen por el bEditValid, entra otra vez a esta misma rutina aunque le he quitado las líneas que mueven el cursor un Row mas abajo del oBrw y después de esto (lo que es peor) hace automåticamente la rutina Co130ChCta donde carga los datos iniciales.
Gracias otra vez por tu ayuda
Jorge Vargas

FW-705, xHarbour 0.99.71 (SimpLex) , bcc55
Posts: 63
Joined: Sun Apr 08, 2007 09:50 PM
xBrowse
Posted: Mon Jun 18, 2007 04:50 PM

Hola Amigos.
nadie tiene un ejemplo sencillo de entrada de datos en xBrowse cambiando de casilla por programa?
Gracias
J. vargas

FW-705, xHarbour 0.99.71 (SimpLex) , bcc55

Continue the discussion