Espero que sigáis todos bien y que perdure.
Tengo un problema con una empresa y supongo que con mi programa.
Uso ficheros DBF para bases de datos, indices CDX y están filtrados con "SET FILTER".
El programa esta funcionando en una red local con unidades compartidas. Y todo funciona bien y va rápido dependiendo del sistema operativo y las características del PC.
Para presentar tablas de registros uso la clase XBROWSE.
Y cuando se trata de ficheros que no están en ese momento compartidos va rápido, pero si en dos puestos se conectan a las mismas bases de datos el tiempo se eterniza de dos segundos pueden pasar a 2 minutos en presentar la ventana de entrada y dar el control al usuario.
Por ejemplo en el siguiente codigo:
- Code: Select all Expand view RUN
- FUNCTION GestAlba03()
SELECT 1
use EMPRESA SHARED
OrdSetFocus ("empre01")
seek xempr
SELECT 4
use &XA SHARED
OrdSetFocus (xaa)
go top
seek str(xnumact,6,0)
if eof()
store 0.00 to tiva1,tiva2,tiva3,tiva4,tiva5,tiva6,tiva7
store 0.00 to trec1,trec2,trec3,trec4,trec5,trec6,trec7
store 0.00 to tret1,tret2,tret3
else
tiva1 = iva1
tiva2 = iva2
tiva3 = iva3
tiva4 = iva4
tiva5 = iva5
tiva6 = iva6
tiva7 = iva7
trec1 = rec1
trec2 = rec2
trec3 = rec3
trec4 = rec4
trec5 = rec5
trec6 = rec6
trec7 = rec7
tret1 = ret1
tret2 = ret2
tret3 = ret3
endif
store fechadia to xfechadia
store cuencomi to xcomision
store multiple to multilin
SELECT 70
use CODIPAIS SHARED ALIAS CODPAIS
OrdSetFocus ("nombre")
SELECT 64
use &XY5 SHARED ALIAS PROMOCION
OrdSetFocus (xy5a)
go top
if eof()
xapliprom = 0
else
xapliprom = 1
endif
SELECT 67
use &XY7 SHARED ALIAS TEXTCAMP
OrdSetFocus (xy7a)
SELECT 68
use &XY8 SHARED ALIAS DESCUENTO
OrdSetFocus (xy8a)
SELECT 62
use &XY3 SHARED ALIAS TARIFA
OrdSetFocus (xy3a)
set filter to tipo = "1"
go top
SELECT 66
use &XY2 SHARED ALIAS TRANSPORTE
OrdSetFocus (xy2a)
go top
SELECT 63
use &XY4 SHARED ALIAS TARIFAS
OrdSetFocus (xy4a)
xtariclie = space(9)
SELECT 65
use &XY6 SHARED
OrdSetFocus (xy6a)
seek "02" // albaranes ingresos
yfecha = fecha
yorden = orden
yrecibo = recibo
ydescuento = descuento
yrecargo = recargo
yretencion = retencion
yotrimpd = otrimpd
ynumero = numero
ycambio = cambio
yempleado = empleado
yelemento = elemento
ylote = lote
ycoste = coste
ytalla = talla
ytallas = tallas
yvisusn = visusn
yfactor = factor
ymerma = merma
ymultiline = multiline
ycomision = comision
ynumant = numant
ynumdes = numdes
ydirenv = direnv
ycobpag = cobpag
ydesgen = desgen
ycamli1 = camli1
ycamli2 = camli2
ycamli3 = camli3
ycamli4 = camli4
ydescu1 = descu1
ydescu2 = descu2
ydescu3 = descu3
ydescu4 = descu4
ytarifa = tarifa
yportes = portes
ycompra = compra
ycomcom = comcom
yviscsn = viscsn
ynotasc = notasc
SELECT 40
use &XZ SHARED
OrdSetFocus (xza)
SELECT 21
use &XR SHARED
OrdSetFocus (xra)
seek xnumser
SELECT 23
use &XT SHARED
OrdSetFocus (xta)
SELECT 5
use &XB SHARED
OrdSetFocus (xba)
go top
SELECT 6
use &XC SHARED
OrdSetFocus (xca)
go top
SELECT 7
use &XD SHARED ALIAS PROVEEDO
OrdSetFocus (xda)
SELECT 8
use &XE SHARED
OrdSetFocus (xea)
go top
SELECT 9
use &XF SHARED
OrdSetFocus (xfa)
go top
SELECT 10
use &XG SHARED
OrdSetFocus (xga)
go top
SELECT 46
use &XZ6 SHARED
OrdSetFocus (xz6a)
SELECT 47
use &XZ7 SHARED ALIAS CABECERA
OrdSetFocus (xz7a)
set filter to tipo = "B" .AND. year(fecha)=val(xejer) .AND. xnumact = act .AND. xnumser = serie .AND. xnumcen = centro
go top
xTiRe = TipReg
xregi = numero
xfech = fecha
xclie = cliente
SELECT 13
use &XJ SHARED ALIAS VENCIMIEN
OrdSetFocus (xja)
set filter to act = xnumact .AND. serie = xnumser .AND. centro = xnumcen .AND. albaran = str(xregi,6,0) .AND. fecalba = xfech .AND. tipo = "C" .AND. cliente = xclie
go top
SELECT 12
use &XI SHARED ALIAS APUNTES
OrdSetFocus (xic)
set filter to year(fecalba)=val(xejer) .AND. xnumact = act .AND. xnumser = serie .AND. xnumcen = centro .AND. albaran = xregi
go top
SELECT 47
mTexto01 = mTexto01 + " -- " + LocaText( 1, 1, 32) + ": " + str(xnumact,6,0) + " - " + LocaText( 1, 1,753) + ": " + xnumser + " - " + LocaText( 1, 1,126) + ": " + xnumcen
xMenu01:Refresh()
CreaVent(600,1060,"wGestAlba","oVentPrinc",Locatext( 1, 1,348),"MenuAlba()")
va080 = space(9) // comprador para busqueda de descuentos no falle
vd001 = space(6)
vd002 = space(9)
@ 10*ProporV,600*ProporH SAY dDlg007 VAR LocaText( 1, 1,232) OF wGestAlba PIXEL COLOR escri1, fondo1 FONT xFont SIZE 400*ProporH,xProPorV*ProPorV
@ 10*ProporV, 10*ProporH SAY dDlg004 VAR LocaText( 1, 1, 87) OF wGestAlba PIXEL COLOR escri1, fondo1 FONT xFont SIZE 130*ProporH,xProPorV*ProPorV
@ 10*ProporV, 70*ProporH SAY dDlg005 VAR LocaText( 1, 1, 40) OF wGestAlba PIXEL COLOR escri1, fondo1 FONT xFont SIZE 130*ProporH,xProPorV*ProPorV
@ 10*ProporV,200*ProporH SAY dDlg006 VAR LocaText( 1, 1,136) OF wGestAlba PIXEL COLOR escri1, fondo1 FONT xFont SIZE 130*ProporH,xProPorV*ProPorV
@ 10*ProporV,130*ProPorH GET dDlg001 VAR vd001 OF wGestAlba PIXEL COLOR escri2, fondo2 FONT xFont SIZE 54*ProPorH,xProPorV*ProPorV PICTURE "######" ON CHANGE GestAlba2(1)
@ 10*ProporV,250*ProPorH GET dDlg002 VAR vd002 OF wGestAlba PIXEL COLOR escri2, fondo2 FONT xFont SIZE 78*ProPorH,xProPorV*ProPorV PICTURE "!!!!!!!!!" ON CHANGE GestAlba2(2)
dBrw := TxBrowse():New(wGestAlba)
dBrw:nHeaderLines := 1
dBrw:lAllowColSwapping := .f.
dBrw:nRowHeight := 18*ProPorV
dBrw:nMarqueeStyle := 5
dBrw:nColDividerStyle := 1
dBrw:lColDividerComplete := .t.
dBrw:lHScroll := .t.
dBrw:lFooter := .f.
dBrw:bChange := { || CaDiAlba() }
dBrw:bLDblClick := { || VisuAlba(1) }
dBrw:bKeyDown := { | nKey | if (nKey == 13, VisuAlba(1),) }
dBrw:nTop := 36*ProPorV
dBrw:nLeft := 5*ProPorH
dBrw:nBottom := 393*ProPorV
dBrw:nRight := 1050*ProPorH
dBrw:nClrPane := { || IIF( ( dBrw:cAlias)->( OrdKeyNo()) %2 == 1, fondo2,escri2)}
dBrw:bClrStd := { ||{escri1, IIF( ( dBrw:cAlias )->( OrdKeyNo() ) %2 == 0,fondo2,fondo1 ) }}
dBrw:bClrSelFocus := { || { fondo3, escri3 } }
dBrw:bClrSel := { || { fondo3, escri2 } }
dCol := dBrw:AddCol() // linea 1
dCol:cHeader := LocaText( 1, 1,586)
dCol:bStrData := { || str(cabecera->numero,6,0) }
dCol:nWidth := 52*ProPorH
dCol:nDataStrAlign := 1
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 2
dCol:cHeader := LocaText( 1, 1,288)
dCol:bStrData := { || dtoc(cabecera->fecha) }
dCol:nWidth := 82*ProPorH
dCol:nDataStrAlign := 2
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 3
dCol:cHeader := LocaText( 1, 1,136)
dCol:bStrData := { || cabecera->cliente }
dCol:nWidth := 74*ProPorH
dCol:nDataStrAlign := 0
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 4
dCol:cHeader := LocaText( 1, 1,565)
dCol:bStrData := { || cabecera->nomcli }
dCol:nWidth := 263*ProPorH
dCol:nDataStrAlign := 0
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.T.
dCol := dBrw:AddCol() // linea 5
dCol:cHeader := LocaText( 1, 1, 81)
dCol:bStrData := { || str(cabecera->cambasto,17,2) }
dCol:nWidth := 134*ProPorH
dCol:nDataStrAlign := 1
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 6
dCol:cHeader := LocaText( 1, 1,400)
dCol:bStrData := { || str(cabecera->camivato+cabecera->camrecto,17,2) }
dCol:nWidth := 134*ProPorH
dCol:nDataStrAlign := 1
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 7
dCol:cHeader := LocaText( 1, 1,716)
dCol:bStrData := { || str(cabecera->camretto,17,2) }
dCol:nWidth := 134*ProPorH
dCol:nDataStrAlign := 1
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dCol := dBrw:AddCol() // linea 8
dCol:cHeader := LocaText( 1, 1,802)
dCol:bStrData := { || str(cabecera->camtotto,17,2) }
dCol:nWidth := 134*ProPorH
dCol:nDataStrAlign := 1
dCol:nHeadStrAlign := 2
dCol:lAllowSizing :=.F.
dBrw:SetRdd()
dBrw:CreateFromCode ()
SELECT 12
go top
dBrw1 := TxBrowse():New(wGestAlba)
dBrw1:nHeaderLines := 1
dBrw1:lAllowColSwapping := .f.
dBrw1:nRowHeight := 18*ProPorV
dBrw1:nMarqueeStyle := 5
dBrw1:nColDividerStyle := 1
dBrw1:lColDividerComplete := .t.
dBrw1:lHScroll := .t.
dBrw1:lFooter := .f.
dBrw1:bLDblClick := { || VisuAlba(1) }
dBrw1:bKeyDown := { | nKey | if (nKey == 13, VisuAlba(1),) }
dBrw1:nTop := 396*ProPorV
dBrw1:nLeft := 5*ProPorH
dBrw1:nBottom := 520*ProPorV
dBrw1:nRight := 1050*ProPorH
dBrw1:nClrPane := { || IIF( ( dBrw1:cAlias)->( OrdKeyNo()) %2 == 1, fondo2,escri2)}
dBrw1:bClrStd := { ||{escri1, IIF( ( dBrw1:cAlias )->( OrdKeyNo() ) %2 == 0,fondo2,fondo1 ) }}
dBrw1:bClrSelFocus := { || { fondo3, escri3 } }
dBrw1:bClrSel := { || { fondo3, escri2 } }
dCol2 := dBrw1:AddCol() // linea 1
dCol2:cHeader := LocaText( 1, 1,519)
dCol2:bStrData := { || str(apuntes->npedido,3,0) }
dCol2:nWidth := 23*ProPorH
dCol2:nDataStrAlign := 1
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 2
dCol1:cHeader := LocaText( 1, 1,605)
dCol1:bStrData := { || apuntes->ordalba }
dCol1:nWidth := 35*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 3
dCol1:cHeader := LocaText( 1, 1,288)
dCol1:bStrData := { || dtoc(apuntes->fecha) }
dCol1:nWidth := 65*ProPorH
dCol1:nDataStrAlign := 2
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 4
dCol1:cHeader := LocaText( 1, 1,157)
dCol1:bStrData := { || apuntes->concepto }
dCol1:nWidth := 95*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
if xAgeBie = "G"
dCol1 := dBrw1:AddCol() // linea 5
dCol1:cHeader := LocaText( 1, 1,207)
dCol1:bStrData := { || apuntes->descripcio }
dCol1:nWidth := 353*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 6
dCol1:cHeader := LocaText( 1, 1,122)
dCol1:bStrData := { || str((apuntes->cantidad * apuntes->factmult) - apuntes->merma,10,val(xpicca)) }
dCol1:nWidth := 65*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 7
dCol1:cHeader := LocaText( 1, 1,384)
dCol1:bStrData := { || str(apuntes->importe,17,val(xpicpr)) }
dCol1:nWidth := 107*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 7
dCol1:cHeader := LocaText( 1, 2,299)
dCol1:bStrData := { || str(apuntes->totlinea,17,val(xpicpr)) }
dCol1:nWidth := 107*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
else
dCol1 := dBrw1:AddCol() // linea 5
dCol1:cHeader := LocaText( 1, 1,207)
dCol1:bStrData := { || apuntes->descripcio }
dCol1:nWidth := 285*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 6
dCol1:cHeader := LocaText( 1, 1,122)
dCol1:bStrData := { || str((apuntes->cantidad * apuntes->factmult) - apuntes->merma,10,val(xpicca)) }
dCol1:nWidth := 65*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 7
dCol1:cHeader := LocaText( 1, 1,384)
dCol1:bStrData := { || str(apuntes->importe,17,val(xpicpr)) }
dCol1:nWidth := 90*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 7
dCol1:cHeader := LocaText( 1, 1,851)
dCol1:bStrData := { || str(apuntes->coste,17,val(xpicpr)) }
dCol1:nWidth := 90*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 7
dCol1:cHeader := LocaText( 1, 2,299)
dCol1:bStrData := { || str(apuntes->totlinea,17,val(xpicpr)) }
dCol1:nWidth := 107*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
endif
dCol1 := dBrw1:AddCol() // linea 8
dCol1:cHeader := LocaText( 1, 1,211)
dCol1:bStrData := { || str(apuntes->descuento,17,val(xpicpr)) }
dCol1:nWidth := 70*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 9
dCol1:cHeader := LocaText( 1, 1, 7)
dCol1:bStrData := { || str(apuntes->iva,5,2) }
dCol1:nWidth := 35*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 10
dCol1:cHeader := LocaText( 1, 1, 11)
dCol1:bStrData := { || str(apuntes->retencion,5,2) }
dCol1:nWidth := 35*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.T.
dCol1 := dBrw1:AddCol() // linea 11
dCol1:cHeader := LocaText( 1, 1,276)
dCol1:bStrData := { || str(apuntes->factura,6,0) }
dCol1:nWidth := 65*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.F.
dCol1 := dBrw1:AddCol() // linea 12
dCol1:cHeader := LocaText( 1, 1,176)
dCol1:bStrData := { || apuntes->barras }
dCol1:nWidth := 157*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.F.
dCol1 := dBrw1:AddCol() // linea 13
dCol1:cHeader := LocaText( 1, 1,506)
dCol1:bStrData := { || apuntes->lote }
dCol1:nWidth := 171*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.F.
dCol1 := dBrw1:AddCol() // linea 14
dCol1:cHeader := LocaText( 1, 1,254)
dCol1:bStrData := { || apuntes->elemento }
dCol1:nWidth := 119*ProPorH
dCol1:nDataStrAlign := 0
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.F.
dCol1 := dBrw1:AddCol() // linea 15
dCol1:cHeader := LocaText( 1, 2,158)
dCol1:bStrData := { || str(apuntes->factmult,10,val(xpicca)) }
dCol1:nWidth := 110*ProPorH
dCol1:nDataStrAlign := 1
dCol1:nHeadStrAlign := 2
dCol1:lAllowSizing :=.F.
dBrw1:SetRdd()
dBrw1:CreateFromCode ()
SELECT 13
go top
dBrw2 := TxBrowse():New(wGestAlba)
dBrw2:nHeaderLines := 1
dBrw2:lAllowColSwapping := .f.
dBrw2:nRowHeight := 18*ProPorV
dBrw2:nMarqueeStyle := 5
dBrw2:nColDividerStyle := 1
dBrw2:lColDividerComplete := .t.
dBrw2:lHScroll := .f.
dBrw2:lFooter := .f.
dBrw2:bLDblClick := { || VencAlba() }
dBrw2:bKeyDown := { | nKey | if (nKey == 13, VencAlba(),) }
dBrw2:nTop := 525*ProPorV
dBrw2:nLeft := 5*ProPorH
dBrw2:nBottom := 610*ProPorV
dBrw2:nRight := 1050*ProPorH
dBrw2:nClrPane := { || IIF( ( dBrw2:cAlias)->( OrdKeyNo()) %2 == 1, fondo2,escri2)}
dBrw2:bClrStd := { ||{escri1, IIF( ( dBrw2:cAlias )->( OrdKeyNo() ) %2 == 0,fondo2,fondo1 ) }}
dBrw2:bClrSelFocus := { || { fondo3, escri3 } }
dBrw2:bClrSel := { || { fondo3, escri2 } }
dCol2:= dBrw2:AddCol() // linea 1
dCol2:cHeader := LocaText( 1, 1,288)
dCol2:bStrData := { || dtoc(vencimien->fecha) }
dCol2:nWidth := 82*ProPorH
dCol2:nDataStrAlign := 2
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dCol2:= dBrw2:AddCol() // linea 2
dCol2:cHeader := LocaText( 1, 1,271)
dCol2:bStrData := { || tipovenc(vencimien->estado) }
dCol2:nWidth := 97*ProPorH
dCol2:nDataStrAlign := 2
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dCol2:= dBrw2:AddCol() // linea 3
dCol2:cHeader := LocaText( 1, 1,205)
dCol2:bStrData := { || vencimien->numero }
dCol2:nWidth := 208*ProPorH
dCol2:nDataStrAlign := 2
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dCol2:= dBrw2:AddCol() // linea 4
dCol2:cHeader := LocaText( 1, 1,141)
dCol2:bStrData := { || vencimien->banco }
dCol2:nWidth := 97*ProPorH
dCol2:nDataStrAlign := 1
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dCol2:= dBrw2:AddCol() // linea 5
dCol2:cHeader := LocaText( 1, 1,384)
dCol2:bStrData := { || str(vencimien->importe,12,2) }
dCol2:nWidth := 97*ProPorH
dCol2:nDataStrAlign := 1
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dCol2:= dBrw2:AddCol() // linea 6
dCol2:cHeader := LocaText( 1, 2, 93)
dCol2:bStrData := { || str(vencimien->billetes,3,0) }
dCol2:nWidth := 100*ProPorH
dCol2:nDataStrAlign := 1
dCol2:nHeadStrAlign := 2
dCol2:lAllowSizing :=.F.
dBrw2:SetRdd()
dBrw2:CreateFromCode ()
SELECT 47
go bottom
dBrw:gobottom()
dDlg001:SetFocus()
RETURN (NIL)
Se presentan en una ventana el menú, dos gets y tres XBROWSE, cuando no están compartidas pasa todo en unos dos segundos dependiendo de las bases de datos, pero si se conectan dos puestos a las mismas bases de datos hace lo mismo pero desde la última línea "dDlg001:SetFocus()" hasta que retoma el control el usuario pasan un par de minutos si lo anterior son unos dos segundos.
Pasa con la clase XBROWSE ya que en ventanas que hay esta clase no hay la demora
A alguien le ha pasado algo parecido y ha podido resolverlo o puede orientarme de donde mirar ya que no se que puede pasar.
He comprobado que pasa en W10 y en W7.
En espera de vuestros comentarios.
Un saludo
Carlos