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+(Res*x) // 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