Page 1 of 2

Lentitud con ficheros compartidos

Posted: Thu Mar 19, 2020 10:56 am
by colthop
Hola a todos:
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

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

Re: Lentitud con ficheros compartidos

Posted: Sun Mar 22, 2020 11:25 am
by Loren
Colthop, buenos dias:
El problema lo tiene en los set filter., Q no son aconsejables hacer uso de ellos en e tornos de Red local.
Solución : reemplazamos por los dbsetfilter, pero si realmente quieres velocidad casi instantánea haz uso de los ORDSCOPE.
Busca ejemplos... Hay multitud de ellos.

Saludos
Lorenzo

Re: Lentitud con ficheros compartidos

Posted: Sun Mar 22, 2020 11:36 am
by colthop
Hola Loren:

Gracias por tu respuesta probaré.

Un saludo a todos.

Carlos

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 7:57 am
by colthop
Hola a todos:

He estado probando lo que recibí en el anterior post de Loren y no me ha solucionado el problema ya que usar el set filter o el setdbfilter es lo mismo ya que al compilar el fuente (PRG) lo convierte en un archivo intermedio (PPO) que utiliza para crear el de C (C) y en ese archivo intermedio en vez de SET FILTER esta SETDBFILTER, por esto y porque directamente he quitado todos los set filter del fuente y sigue pasando lo mismo donde hay código con XBROWSE y dependiendo del tamaño del DBF tarda mas o menos tempo en devolver el mando al usuario.

Alguien podría ayudarme. Gracias

Un saludo.

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 9:47 am
by MOISES
Hola Carlos:

xBrowse cada vez es más lento dado que tiene muchas funcionalidades, y Fivetech no ha tenido tiempo suficiente para optimizarlo.

Puedes usar twBrowse o bien abandonar los dbfs.

Un saludo

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 9:50 am
by colthop
Hola Moisés:

Gracias por la información.

Un saludo

Carlos

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 10:18 am
by José Vicente Beltrán
Hola Colthop quizas te ayude lo siguiente.
Yo utilizo DBF y NTX en redes y/o terminal server desde hace muchos años en una aplicación que por compatibilidad me impide pasar siquiera a indices CDX, la aplicación en algunos usuarios puede tener DBF de mas de 1 GB y por supuesto debe ser muy segura y robusta.
Hace tiempo tuve tus mismos problemas de lentitud en los filtros pero los solucioné usando INDICES TEMPORALES para crear esos filtros, son muy rápidos cuando hay muchos registros en la DBF e instantáneos cuando solo hay unos pocos miles. Desde entonces no he vuelto a tener problemas de lentitud ni siquiera en redes lentas con muchos terminales enganchados.
Ojalá te ayude
Saludos :shock:

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 12:33 pm
by colthop
Hola José Vicente:

Pues parece ser que son los indices los que provocan la demora. Los he quitado y he entrado sin ordenes y no tarda en entrar.

Si no te es de mucho trabajo podrías ponerme un ejemplo de como haces esos indices temporales.

Gracias.

Un saludo

Carlos

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 1:14 pm
by acuellar
Carlos

Lo mejor es usa Indices temporales SÓLO para MOSTRAR, Su desventaja es que si los registros son modificados por otro usuario no se actualizan si el browse está abierto.

Code: Select all

     INDEX ON NOMBRE TAG NOMBRE TO CDXTMP MEMORY
 

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 2:19 pm
by José Vicente Beltrán
Hola Carlos, estoy de acuerdo con Adhemar.
Yo creo un indice temporal donde antes creaba un SET FILTER con la misma condicion, naturalmente el indice se deshecha una vez cumple su funcion, exactamente igual que hacemos con el SET FILTER.
Antes: SET FILTER TO condicion_de_filtro
Ahora: INDEX ON condicion_de_orden TO nombre_indice_temporal FOR condicion_de_filtro TEMPORARY ADDITIVE

La clausula ADDITIVE te permite usar la DBF aunque este abierta con otros indices sin interferirlos
:shock:

Re: Lentitud con ficheros compartidos

Posted: Wed Mar 25, 2020 3:13 pm
by karinha
// \samples\COLTHOP.PRG

Code: Select all

FUNCTION GestAlba03()

   SELECT 1
   USE EMPRESA NEW SHARED
   OrdSetFocus ( "empre01" )
   SEEK xempr

   IF .NOT. FOUND()
   // MENSAGERIA
      RETURN NIL
   ENDIF

   SELECT 4
   use &XA NEW SHARED
   OrdSetFocus ( xaa )
   GO TOP

   SEEK str( xnumact, 6, 0 )

   // IF eof() // CAMBIADO aqui
   IF .NOT. FOUND()

      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 NEW SHARED ALIAS CODPAIS
   OrdSetFocus ( "nombre" )

   SELECT 64
   use &XY5 NEW SHARED ALIAS PROMOCION
   OrdSetFocus ( xy5a )
   GO TOP

   IF eof()
      xapliprom := 0
   ELSE
      xapliprom := 1
   ENDIF

   SELECT 67
   use &XY7 NEW SHARED ALIAS TEXTCAMP
   OrdSetFocus ( xy7a )

   SELECT 68
   use &XY8 NEW SHARED ALIAS DESCUENTO
   OrdSetFocus ( xy8a )

   SELECT 62
   use &XY3 NEW SHARED ALIAS TARIFA
   OrdSetFocus ( xy3a )

   GO TOP

   // SET FILTER TO tipo := "1"  // CAMBIADO

   nTipo := "1"
   // Mira ultima TAG de TARIFA
   INDEX ON TIPO TAG 05 TO TEMPTIPO FOR ( .NOT. EOF() ) .AND. ;
      TARIFA->TIPO >= nTipo .AND. TARIFA->TIPO <= nTipo MEMORY // TEMPORARY

   GO TOP

   SELECT 66
   use &XY2 NEW SHARED ALIAS TRANSPORTE
   OrdSetFocus ( xy2a )
   GO TOP

   SELECT 63
   use &XY4 NEW SHARED ALIAS TARIFAS
   OrdSetFocus ( xy4a )
   xtariclie := space( 9 )

   SELECT 65
   use &XY6 NEW 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 NEW SHARED
   OrdSetFocus ( xza )

   SELECT 21
   use &XR NEW SHARED
   OrdSetFocus ( xra )
   SEEK xnumser

   SELECT 23
   use &XT NEW SHARED
   OrdSetFocus ( xta )

   SELECT 5
   use &XB NEW SHARED
   OrdSetFocus ( xba )
   GO TOP

   SELECT 6
   use &XC NEW SHARED
   OrdSetFocus ( xca )
   GO TOP

   SELECT 7
   use &XD NEW SHARED ALIAS PROVEEDO
   OrdSetFocus ( xda )

   SELECT 8
   use &XE NEW SHARED
   OrdSetFocus ( xea )
   GO TOP

   SELECT 9
   use &XF NEW SHARED
   OrdSetFocus ( xfa )
   GO TOP

   SELECT 10
   use &XG NEW SHARED
   OrdSetFocus ( xga )
   GO TOP

   SELECT 46
   use &XZ6 NEW SHARED
   OrdSetFocus ( xz6a )

   SELECT 47
   use &XZ7 NEW SHARED ALIAS CABECERA
   OrdSetFocus ( xz7a )
   GO TOP

   SET FILTER TO tipo = "B" .AND. year( fecha ) = val( xejer ) .AND. xnumact = act .AND. xnumser = serie .AND. xnumcen = centro

   cTipo := "B"

   INDEX ON TIPO TAG 06 TO TEMPTIPO FOR ( .NOT. EOF() )     .AND. ;
      CABECERA->TIPO >= cTipo .AND. CABECERA->TIPO <= cTipo .AND. ;
      year( fecha ) = val( xejer ) .AND. xnumact = act      .AND. ;
      xnumser = serie .AND. xnumcen = centro MEMORY // TEMPORARY

   GO TOP

   BROWSE()

   xTiRe := TipReg
   xregi := numero
   xfech := fecha
   xclie := cliente

   SELECT 13
   use &XJ NEW SHARED ALIAS VENCIMIEN
   OrdSetFocus ( xja )
   GO TOP

   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

   // IDEM

   SELECT 12
   use &XI NEW SHARED ALIAS APUNTES
   OrdSetFocus ( xic )
   GO TOP

   SET FILTER TO year( fecalba ) = val( xejer ) .AND. xnumact = act .AND. xnumser = serie .AND. xnumcen = centro .AND. albaran = xregi

   // IDEM

   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 )
 
Saludos.

Re: Lentitud con ficheros compartidos

Posted: Thu Mar 26, 2020 11:58 am
by colthop
Hola y Gracias a todos:

Siento decir que no me vale no porque valla igual de lento sino porque como las bases se utilizan a la vez cuando doy alta en un puesto no se refleja en el otro hasta que no salgo y vuelvo a entrar.

Esto me valdría si los datos los usara un solo puesto pero lo que me pasa es que los datos los usan los dos puestos a la vez y solo es cuando lo usan a la vez cuando se relentiza ya que si solo hay uno conectado no pasa.

Gracias por vuestras aportaciones ya que por lo menos me han servido de practica de hacer mas cosas.

Un saludo

Carlos

Re: Lentitud con ficheros compartidos

Posted: Thu Mar 26, 2020 1:46 pm
by acuellar
Carlos

En todo caso para que los datos se actualicen en tiempo real. Utiliza Scope.

Re: Lentitud con ficheros compartidos

Posted: Thu Mar 26, 2020 7:27 pm
by MOISES
Carlos:

Las dbfs están muertas. Te recomiendo la clase magistral de Bingen:

https://youtu.be/At443e_FhnI

Por cierto, la organización de José Luis Sánchez fue realmente espectacular. Y su labor de divulgación con la revista es extraordinaria.

Es hora de usar alguna solución intermedia como SQLRDD, que también lo tiene Manu Expósito a medio acabar, o pasas ya a las clases nativas de FWH.

Todo lo demás son _ que no acaban de ir. Y ADS está a punto de desaparecer, además de que su precio no es barato precisamente.

Re: Lentitud con ficheros compartidos

Posted: Thu Mar 26, 2020 8:11 pm
by colthop
Hola:

Y gracias por vuestras sugerencias.

Estoy cambiando las DBF lo que quería era en este tiempo que tarde en poner el nuevo sistema que no se le relentizase a un cliente el sistema.

Un saludo.

Carlos