FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Xbrowse, como hacer esto
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Xbrowse, como hacer esto
Posted: Thu Apr 13, 2023 05:12 PM
Buenas
Tengo un dialogo escrito en PHP, que cuando en una poblaci贸n escribo unos cuantos caracteres, compara con una BD de poblaciones, y si encuentra esos caracteres en el nombre de la poblacion, me ofrece todos los resultados posibles, aqui muestro el video:



Y me gustaria hacer esto en un xbrowse


hacer esa b煤squeda en la columna Poblacion.

Esto lo tengo hecho en un Dialogo:
Code (fw): Select all Collapse
Function Locmun(oDlga)
***********************************************************
local oDlg
local oSay,osay1,oboton,i
local oLbx,ogroup
local oRadmsenu
local oCurDedo
local oFont,oFont1
local cTexto:="Nombre"
local nOpcion:=1
local cTitulo
local obusco,oradmenu
local nClave
local titi:=.F.
local cBusco:=space(25)
local cindi:=munici->(Ordsetfocus())
local cSearch := ""
Publicas:Filtro:=.F.

聽 select("munici")
聽 munici->(Ordsetfocus("cnommun"))
聽 DEFINE DIALOG oDlg RESOURCE "BUSQUEDAIN" 聽BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
聽 DEFINE CURSOR oCurDedo RESOURCE "Dedo"
聽 DEFINE FONT oFont 聽NAME "Ms Serif" SIZE 0, 16
聽 DEFINE FONT oFont1 NAME "Ms Serif" SIZE 3, 20 BOLD ITALIC
聽 REDEFINE GROUP oGroup ID 300 COLOR CLR_HBLUE, CLR_GRAY OF oDlg FONT Publicas:oWPpal:oFont TRANSPARENT 
聽 REDEFINE SAY oSay VAR cTexto ID 120 OF oDlg COLOR CLR_GREEN UPDATE FONT 聽oFont1
聽 REDEFINE BUTTON oboton ID 111 OF oDlg PROMPT "Pegar" ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ACTION ( Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End() )
聽 REDEFINE BUTTON oboton ID 112 OF oDlg PROMPT "Alta" ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ACTION (oDlg:Refresh())WHEN titi=.T.
聽 REDEFINE BUTTON oboton ID 113 OF oDlg PROMPT "Zoom" ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ACTION (oDlg:Refresh())WHEN titi=.T.
聽 REDEFINE BUTTON oboton ID 114 OF oDlg PROMPT "Salir" ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽ACTION (oDlg:End())
聽 REDEFINE RADIO oRadMenu VAR nOpcion ID 117,118 OF oDlg 聽;
聽 聽 聽 聽 聽 聽ON CHANGE ( munici->(OrdSetFocus( iif(nOpcion=1,"ccodmun","cnommun"))),oLbx:Refresh(),cBusco:=iif(nOpcion=1," 聽 聽 ",space(25)),cTexto:=iif(nOpcion=1,"C贸digo","Nombre")+" Municipio",oDlg:Update(),oBusco:SetFocus() )
聽 REDEFINE LISTBOX oLbx FIELDS Munici->ccodmun,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Munici->cnommun ;
聽 聽 聽 聽 聽 HEADER "C贸digo","Nombre";
聽 聽 聽 聽 聽 聽 聽 聽 聽 ALIAS "Munici";
聽 聽 聽 聽 聽 CURSOR oCurDedo;
聽 聽 聽 聽 聽 COLOR CLR_BLACK, CLR_WHITE ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 ON LEFT DBLCLICK 聽( Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End() );
聽 聽 聽 聽 聽 FONT oFont ID 110 OF oDlg
聽 Munici->(dbGoTop())
聽 REDEFINE SAY oBusco VAR cSearch ID 119 OF oDlg COLOR CLR_RED FONT oFont
聽 oLbx:bKeyChar = { | nKey, nFlags | Search( nKey, @cSearch ), olBx:Refresh(),; 
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oBusco:Refresh() } 
聽* oLbx:bUpdateBuffer:= {|| oBusco:Refresh() }
聽* oLbx:bSeek 聽 聽 聽 聽:= {|| oLbx:DbfSeek(.T.) }
聽 oLbx:nStyle:= nOr( WS_VSCROLL, WS_HSCROLL )
聽 oLbx:nLineStyle := 1
聽 oLbx:nClrBackHead := RGB(248,191,36)
聽 oLbx:nClrPane:={||iIF((oLbx:cAlias)->(OrdKeyNo())%2==0,nRGB(245,219,175),nRGB(255,255,255))}
聽 oLbx:bKeyDown := {|nKey| iif(nKey==13, (Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End()), ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽iif(nKey<>40, ( iif(isdigit(cSearch),munici->(Ordsetfocus("ccodmun")),munici->(Ordsetfocus("cnommun"))) ), ) }
聽 ACTIVATE DIALOG oDlg CENTERED ON INIT (oLbx:SetFocus(), .f. )

聽 munici->(OrdSetFocus(cindi))

聽 RETURN NIL
Pero no me aclaro para hacerlo desde el xbrowse

Mi xbrowse es este:
Code (fw): Select all Collapse
聽 聽 @ 30, 490 xbrowse oBrw3 OF oDlg ;
聽 聽 Datasource aData3;
聽 聽 AUTOCOLS LINES CELL FOOTERS NOBORDER SIZE -5,-30 PIXEL
聽 聽 聽 聽 AEval( oBrw3:aCols, { |o| o:oDataFont := oFont2} )
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 3 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Consignatario" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽190
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 2 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Domicilio" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽180
聽 聽 聽 聽 聽 聽 聽 聽 :oFooterFont:= Publicas:frosa
聽 聽 聽 聽 聽聽 聽 聽 :bFooter 聽 聽 聽 聽:= 聽{ || "SIN CONDUCTOR: "+str(publicas:nalba) 聽}
聽 聽 聽 聽 聽 聽 聽 聽:oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 1 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Poblacion" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽150
聽 聽 聽 聽 聽 聽 聽 聽 :oFooterFont:= Publicas:frosa
聽 聽 聽 聽 聽聽 聽 聽 :bFooter 聽 聽 聽 聽:= 聽{ || "TOTAL: "+str(Manifiesto->(lastrec())) 聽}
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 聽 聽 聽聽 :nEditType = EDIT_GET
聽 聽 聽 聽 :bOnPostEdit = { | oCol, xVal, nKey | If( nKey == VK_RETURN,Refresca1(xval,oBrw3),),;
聽 聽 聽 聽 聽 聽 聽 聽 聽refrescar(aAlias),xnuconduc:=oBrw1:aCols[4]:value,aData2:=creaelarray2(xnuconduc),aData3:=creaelarray3(xnuconduc),oBrw2:aArrayData:=aData2,oBrw3:aArrayData:=aData3,oBrw1:Refresh(),oBrw2:Refresh(),oBrw3:Refresh()}
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 4 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Bultos" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽40
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 5 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Kilos" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽40
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 6 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "C" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽50
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 7 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Orden" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽60
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 8 ]
聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Albaran" 
聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽60
聽 聽 聽 聽 聽 聽 聽 聽 :oHeaderFont:=oFont1
聽 聽 聽 聽 END WITH
聽 聽 聽 聽 WITH OBJECT oBrw3
聽 聽 聽 聽 聽 聽 聽 聽 :SetGroupHeader( "Entregas de otros conductores", 聽1, 聽5, oFont)
聽 聽 聽 聽 聽 聽 聽 聽 :nColDividerStyle := LINESTYLE_BLACK
聽 聽 聽 聽 聽 聽 聽 聽 :lColDividerComplete := .T.
聽 聽 聽 聽 聽 聽 聽 聽 :l2007 := .T.
聽 聽 聽 聽 聽 聽 聽 聽 :nHeadStrAligns:= AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽:lRecordSelector := .F.
聽 聽 聽 聽 聽 聽 聽 聽:lAllowColHiding := .F.
聽 聽 聽 聽 聽 聽 聽 聽:lAllowColSwapping := .F.
聽 聽 聽 聽 聽 聽 聽 聽:nStretchCol 聽 聽 聽:= 2
聽 聽 聽 聽 聽 聽 聽 聽:bLDblClick:= 聽{|| ponentrega(oBrw3,aAlias),xnuconduc:=oBrw1:aCols[4]:value,aData2:=creaelarray2(xnuconduc),aData3:=creaelarray3(xnuconduc),oBrw2:aArrayData:=aData2,oBrw3:aArrayData:=aData3,oBrw1:Refresh(),oBrw2:Refresh(),oBrw3:Refresh()}
聽 聽 聽 聽 聽 聽 聽 聽 :bClrStd 聽 聽:= {|| If(oBrw3:aArrayData[oBrw3:nArrayAt,6]=space(5) , {CLR_BLACK,nRGB(250,219,216)}, {CLR_BLACK,If( oBrw3:KeyNo % 2 == 0, nRGB(242,247,252),nRGB(207,222,240) )}) }
聽 聽 聽 聽 聽 聽 聽 聽 :nMarqueeStyle := MARQSTYLE_HIGHLROWMS //6
聽 聽 聽 聽 聽 聽 聽 聽:MakeTotals()
聽 聽 END WITH
聽 聽 聽 聽 oBrw3:CreateFromCode()
Esta basado en un array, y la busqueda la quiero hacer sobre una DBF que tiene todas las poblaciones de Espa帽a.
--------------------------

Saludos



Jose Luis
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Xbrowse, como hacer esto
Posted: Fri Apr 14, 2023 12:20 PM
Estimado Jos茅 luis

Intenta modificando 茅ste c贸digo
Code (fw): Select all Collapse
oCol:=oBrw:AddCol()
聽 聽oCol:cEditPicture 聽 := "@!"
聽 聽oCol:bStrData 聽:= { || DETMP->CODITEM}
聽 聽oCol:nHeadStrAlign := AL_CENTER
聽 聽oCol:cHeader 聽 := "Producto"
聽 聽oCol:nWidth:=76
聽 聽oCol:AddResource('B-F2')
聽 聽oCol:nBtnBmp := 1
聽 聽oCol:nEditType := 5 
聽 聽oCol:bEditBlock 聽 聽:= { |nRow,nCol,oCol| (BuscaProd(nRow,50) ) } 
聽 聽oCol:bOnPostEdit := {|o, v, n| CODITEM:=v }
聽 聽oCol:bEditValid:={| oGet, oCol| ITEM->( dBSeek( oGet:Value() ) ), ;
聽 聽 聽 聽 聽 iif( ITEM->( Eof() ), ( MsgStop( "Item de Producto Errado.","Error" ), .f. ), (LlenaF(oGet:Value(),2),.T.) )} 

聽oBrw:bKeyDown = { | nKey | If(oBrw:nColSel=1 .and. nKey=VK_F2,oBrw:SelectedCol():RunBtnAction(oBrw:nColSel), )}

.....
Function BuscaProd(nRow,nMCol)
聽 聽Local oDlgB, oBrw3, lOk:= .F.

聽 聽 聽
聽 DEFINE DIALOG oDlgB SIZE 515,353 PIXEL ; oDlgB:lHelpIcon:=.F.
聽
聽 聽 @0,0 xBrowse oBrw3 Of oDlgB ALIAS "ITEMP" AUTOSORT 
聽 聽 oBrw3:nMarqueeStyle:=5
聽 聽 oBrw3:lHScroll:= .f.
聽 聽 oBrw3:nRowDividerStyle:= 0
聽 聽 oBrw3:lRecordSelector := .f.
聽 聽 oBrw3:lIncrFilter:= .t.
聽 聽 oBrw3:lSeekWild 聽:= .t.
聽 聽oBrw3:bLDblClick:={ || ( SysWait(.2),__KeyBoard(Chr(13)) ) }
聽 聽 聽 聽 聽 
聽 聽oCol:=oBrw3:AddCol()
聽 聽 oCol:bStrData := { || ITEMP->NOMBRE }
聽 聽 oCol:cHeader 聽:= "ITEMS"
聽 聽 oCol:cSortOrder:="NAME"
聽 聽 oCol:nWidth:=330
聽 聽 聽
聽 聽 oBrw3:CreateFromCode()
聽 聽 
聽 聽 @1.5,40 SAY oBrw3:oSeek PROMPT oBrw3:cSeek SIZE 55,8 OF oDlgB PIXEL PICTURE "@!" 
聽 聽 oBrw3:bKeyDown:= { | nKey | iif(nKey=VK_RETURN,(lOk:=.T.,oBrw3:End(),oDlgB:End()), ) }
聽 聽 聽 聽 聽
聽 聽 ACTIVATE DIALOG oDlgB ON INIT (oDlgB:Move(250,nMCol+398),oBrw3:Move(18,0,oDlgB:nWidth(),oDlgB:nHeight()-50));
聽 聽 聽 聽 聽 聽 聽 聽 VALID ( iif( lOk, (DETMP->CODITEM:=ITEMP->CODIGO), ),.T. )
聽 聽 聽oDlgB:End()
聽 聽 
Return Nil
聽 
Espero te ayude
Saludos,



Adhemar C.
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto
Posted: Fri Apr 14, 2023 05:22 PM

Adhemar

Muchas gracias, me pongo con ello y te digo algo.

--------------------------

Saludos



Jose Luis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Sat Apr 15, 2023 09:20 AM

Solucionado

Gracias a ti y a Mr. Rao.

Un saludo

--------------------------

Saludos



Jose Luis
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Mon Apr 17, 2023 03:20 PM

Jos茅 Luis:

Podr铆as compartir la soluci贸n?

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Mon Apr 17, 2023 09:53 PM

Jose Luis,

no has probado con AUTOGET ?

hace lo mismo y con menos codigo.

Saludos.

Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Tue Apr 18, 2023 07:56 AM
Armando

Te pongo el codigo completo a continuacion:
Code (fw): Select all Collapse
//------------------
Function asociar()
local oDlg,oDlg1,oBrw3,osay,oGet,seguir:=.F.
local titulo:="ASOCIAR POBLACIONES ERRONEAS"
local cAlias1:="Mani1"
local apoint,aAlias
local cini:=Date()
local ruta,nuconduc,noconduc
DEFINE DIALOG oDlg1 FROM 10, 10 TO 20, 50 
聽 聽 oDlg1:cTitle:="HOJA DE RUTA"
聽 聽 @ 15, 10 Say oSay Prompt "Fecha de los Albaranes" OF oDlg1 PIXEL SIZE 70,10
聽 聽 @ 15, 75 Get oGet VAR cini OF oDlg1 PIXEL SIZE 35,10
聽 聽 @ 50,20 BTNBMP RESOURCE 聽"Next" 聽 聽 聽 SIZE 20,20 OF oDlg1 NOBORDER TOP ACTION (seguir:=.T.,oDlg1:End())
聽 聽 @ 50,100 BTNBMP RESOURCE "salirsql" 聽 SIZE 20,20 OF oDlg1 NOBORDER TOP ACTION (oDlg1:End())
ACTIVATE DIALOG oDlg1 CENTERED

if seguir
if !file (Publicas:cUnidad+Publicas:cSubd+"\errpobla.dbf")
聽 聽 聽 聽 DbCreate(Publicas:cunidad+Publicas:cSubd+"\errpobla", ;
聽 聽 聽 聽 聽 聽 聽 聽 { { "Poblaant" ,"C", 24, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 { "Poblacion" 聽,"C", 30, 0 },;聽 聽 聽 
聽 聽 聽 聽 聽 聽 聽 聽 { "Ruta" 聽 聽 聽,"C", 聽2, 0 } } )
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\errpobla","errpobla",.T.)
聽 聽 聽 聽 index on upper(errpobla->Poblaant) tag &("Poblaant")
聽 聽 聽 聽 errpobla->(Dbclosearea())
endif
聽 聽 聽 聽 aAlias:= cargaAlias()
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+"MUNICI",aAlias[2],.T.)
聽 聽 聽 聽 (aAlias[2])->(ordSetfocus("Ruta"))
聽 聽 聽 聽 (aAlias[2])->( dbGotop() )
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Ruta",aAlias[29],.T.)
聽 聽 聽 聽 (aAlias[29])->(OrdSetFocus("Ruta"))
聽 聽 聽 聽 (aAlias[29])->( dbGotop() )
聽 聽 聽 聽
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\ALBARAN",aAlias[24],.T.)
聽 聽 聽 聽 (aAlias[24])->(OrdSetFocus("Fecha"))
聽 聽 聽 聽 (aAlias[24])->( dbGotop() )

聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\errpobla","errpobla",.T.)
聽 聽 聽 聽 errpobla->(Ordsetfocus("poblaant"))
//------------------------
聽 聽 聽 聽 DbCreate(Publicas:cunidad+Publicas:cSubd+"\Mani1", ;
聽 聽 聽 聽 聽 聽 { { "Albaran" ,"C", 聽7, 0 },;
聽 聽 聽 聽 聽 聽 { "Orden" 聽 聽 ,"N", 聽9, 0 },;聽 聽 聽 聽
聽 聽 聽 聽 聽 聽 { "Consigna" 聽,"C", 35, 0 },;
聽 聽 聽 聽 聽 聽 { "Domicilio" ,"C", 40, 0 },; 聽 
聽 聽 聽 聽 聽 聽 { "Poblacion" ,"C", 24, 0 },;
聽 聽 聽 聽 聽 聽 { "Remite" 聽 聽,"C", 35, 0 },;
聽 聽 聽 聽 聽 聽 { "Bultos" 聽 聽,"N", 聽6, 0 },;聽 聽 聽 聽 聽
聽 聽 聽 聽 聽 聽 { "Peso" 聽 聽 聽,"N", 聽6, 0 },;
聽 聽 聽 聽 聽 聽 { "Nconduc" 聽 ,"C", 聽5, 0 },;聽 聽 聽 聽 聽
聽 聽 聽 聽 聽 聽 { "Cconduc" 聽 ,"C", 35, 0 },;
聽 聽 聽 聽 聽 聽 { "Ruta" 聽 聽 聽,"C", 聽2, 0 } } )
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Mani1","Mani1",.T.)
聽 聽 聽 聽 (aAlias[24])->(Ordscope(0,dtos(cIni)))
聽 聽 聽 聽 (aAlias[24])->(Ordscope(1,dtos(cIni)))
聽 聽 聽 聽 (aAlias[24])->(Dbgotop())
聽 聽 聽 聽 Do While !(aAlias[24])->(Eof())
聽 聽 聽 聽 聽 聽 聽 聽 ruta:=(aAlias[24])->Rutac
聽 聽 聽 聽 聽 聽 聽 聽 nuconduc:=space(5)
聽 聽 聽 聽 聽 聽 聽 聽 noconduc:=space(35)
聽 聽 聽 聽 聽 聽 聽 聽 if (aAlias[29])->(Dbseek(ruta))
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 nuconduc:=(aAlias[29])->conductor
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 noconduc:=(aAlias[29])->nombre
聽 聽 聽 聽 聽 聽 聽 聽 endif
聽 聽 聽 聽 聽 聽 聽 聽 While .not. Mani1->(Rlock()); end
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->(dbAppend())
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Albaran 聽:= (aAlias[24])->Albaran
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Orden 聽 聽:= (aAlias[24])->Orden
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Consigna := iif((aAlias[24])->CR = "C",(aAlias[24])->Pro,(aAlias[24])->Prou)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Domicilio:= iif((aAlias[24])->CR = "C",Capitalize((aAlias[24])->DomiPro),Capitalize((aAlias[24])->Domicilio))
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Poblacion:= iif((aAlias[24])->CR = "C",UPPER((aAlias[24])->Pobla),UPPER((aAlias[24])->Pobla1))
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Remite 聽 := iif((aAlias[24])->CR = "C",(aAlias[24])->Prou,(aAlias[24])->Pro)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Bultos 聽 := iif((aAlias[24])->BK = "B",(aAlias[24])->kilos,(aAlias[24])->kkilos)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Peso 聽 聽 := iif((aAlias[24])->BK = "B",(aAlias[24])->kkilos,(aAlias[24])->kilos)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->nconduc 聽:= nuconduc
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Cconduc 聽:= noconduc
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Mani1->Ruta 聽 聽 := (aAlias[24])->Rutac
聽 聽 聽 聽 聽 聽 聽 聽 Mani1->( dbUnlock() )
聽 聽 聽 聽 聽 聽 聽 聽 (aAlias[24])->(Dbskip())
聽 聽 聽 聽 enddo
聽 聽 聽 聽 Mani1->(Dbclosearea())
聽 聽 聽 聽 (aAlias[24])->(Ordscope(0,nil))
聽 聽 聽 聽 (aAlias[24])->(Ordscope(1,nil))

//------------------------------
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+Publicas:cSubd+"\Mani1","Mani1",.T.)
聽 聽 聽 聽 index on Mani1->Poblacion to "TMani1" for Mani1->nconduc = space(5) .and. Mani1->poblacion <> space(24) MEMORY
聽 聽 聽 聽 Mani1->(Dbgotop())
聽 聽 聽 聽 DEFINE DIALOG oDlg FROM 1, 1 TO 50, 38; oDlg:lHelpIcon:=.F.
聽 聽 聽 聽 聽 聽 oDlg:cTitle:=titulo
聽 聽 聽 聽 聽 聽 @ 5, 5 Say oSay PROMPT "Poblaciones Para asociar (en Rojo)" OF oDlg PIXEL SIZE 600,15 COLOR nRGb( 251, 151, 聽71 ) Font Publicas:frosa 
聽 聽 聽 聽 聽 聽 聽 聽聽@ 12, 5 Say oSay PROMPT "En verde ya estan asociadas" OF oDlg PIXEL SIZE 400,15 COLOR nRGb( 251, 151, 聽71 ) Font Publicas:frosa 
聽 聽 聽 聽 聽 聽 @ 25, 10 xbrowse oBrw3 OF oDlg ;
聽 聽 聽 聽 聽 聽 ALIAS cAlias1;
聽 聽 聽 聽 聽 聽 COLUMNS "Poblacion"," ";
聽 聽 聽 聽 聽 聽 AUTOCOLS LINES CELL NOBORDER SIZE -2,-30 PIXEL
聽 聽 聽 聽 聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 1 ]
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cEditPicture 聽 := "@!"
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "Poblacion" 
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽230
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :AddResource('darrow')
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nBtnBmp := 1
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nEditType := 3
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bEditBlock 聽 聽:= { |nRow,nCol,oCol| 聽 nRow := ( oBrw3:nRowSel * oBrw3:nRowHeight ) + oBrw3:HeaderHeight( .t. ) - 1,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽aPoint := ClientToScreen( oBrw3:hWnd, { nRow, oBrw3:SelectedCol():nDisplayCol } ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽(BuscaPo(aAlias,oBrw3,nRow,nCol,apoint) )}

聽 聽 聽 聽 聽 聽 聽 聽 END WITH
聽 聽 聽 聽 聽 聽 聽 聽 WITH OBJECT oBrw3:aCols[ 2 ]
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cDataType 聽 聽 聽 := 'F'
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nDataBmpAlign 聽 := AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nWidth聽 聽 聽 聽 := 聽20
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :cHeader 聽 聽:= "A" 
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :AddBitmap("bmpcrcred")
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :AddBitmap("bmpcrcgreen")
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bBmpData := { || iif(errpobla->(Dbseek(oBrw3:aCols[1]:Value)),2,1 ) }
聽 聽 聽 聽 聽 聽 聽 聽 END WITH

聽 聽 聽 聽 聽 聽 聽 聽 WITH OBJECT oBrw3
聽 聽 聽 聽 聽 聽 聽 聽 :nColDividerStyle := LINESTYLE_BLACK
聽 聽 聽 聽 聽 聽 聽 聽 :lColDividerComplete := .T.
聽 聽 聽 聽 聽 聽 聽 聽 :l2007 := .T.
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :lHscroll:=.F.
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :nHeadStrAligns:= AL_CENTER
聽 聽 聽 聽 聽 聽 聽 聽 :lRecordSelector := .F.
聽 聽 聽 聽 聽 聽 聽 聽 :lAllowColHiding := .F.
聽 聽 聽 聽 聽 聽 聽 聽 :lAllowColSwapping := .F.
聽 聽 聽 聽 聽 聽 聽 聽 :nStretchCol 聽 聽 聽:= 1
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :bClrStd 聽 聽:= {|| {CLR_BLACK,If( oBrw3:KeyNo % 2 == 0, nRGB(242,247,252),nRGB(207,222,240) )} }
聽 聽 聽 聽 聽 聽 聽 聽 :nMarqueeStyle := MARQSTYLE_HIGHLROWMS //6
聽 聽 聽 聽 聽 聽 聽 聽 :MakeTotals()
聽 聽 聽 聽 聽 聽 END WITH
聽 聽 聽 聽 聽 聽 聽 聽 oBrw3:CreateFromCode()
聽 聽 聽 聽 聽 聽 聽 聽 @ 350,60 BTNBMP RESOURCE "salirsql" 聽 SIZE 20,20 OF oDlg NOBORDER ACTION (oDlg:End())
聽 聽 聽 聽 ACTIVATE DIALOG oDlg CENTERED ON INIT (oBrw3:Setfocus())
Dbcloseall()
ferase(Publicas:cUnidad+Publicas:cSubd+"\Mani1.dbf")
endif
return nil

//----------------------
static Function BuscaPo(aAlias,oBrw3,nRow,ncol,apoint)
Local oDlgB, oBrw, lOk:= .F.
local ocol
local cindi:=(aAlias[2])->(Ordsetfocus())
(aAlias[2])->(Ordsetfocus("cnommun"))
DEFINE DIALOG oDlgB SIZE 150,250 PIXEL ; oDlgB:lHelpIcon:=.F.
聽 聽 聽 聽 @ 10,0 xBrowse oBrw Of oDlgB ALIAS aAlias[2] AUTOSORT PIXEL
聽 聽 聽 聽 oBrw:lheader:=.f.
聽 聽 聽 聽 oBrw:nMarqueeStyle:=5
聽 聽 聽 聽 oBrw:lHScroll:= .f.
聽 聽 聽 聽 oBrw:nRowDividerStyle:= 0
聽 聽 聽 聽 oBrw:lRecordSelector := .f.
聽 聽 聽 聽 oBrw:lIncrFilter:= .t.
聽 聽 聽 聽 oBrw:lSeekWild 聽:= .t.
聽 聽 聽 聽 oBrw:bLDblClick:={ || ( SysWait(.2),__KeyBoard(Chr(13)) ) }
聽 聽 聽 聽 oCol:=oBrw:AddCol()
聽 聽 聽 聽 聽 聽 聽 聽 oCol:bStrData := { || (aAlias[2])->cnommun }
聽 聽 聽 聽 聽 聽 聽 聽 oCol:cSortOrder:="cNommun"
聽 聽 聽 聽 聽 聽 聽 聽 oCol:nWidth:=150
聽 聽 聽 聽 oBrw:CreateFromCode()
聽 聽
聽 聽 聽 聽 @ 1.5,3 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 55,8 OF oDlgB PIXEL
聽 聽 聽 聽 oBrw:bKeyDown:= { | nKey | iif(nKey=VK_RETURN,(lOk:=.T.,oBrw:End(),oDlgB:End()), ) }
聽 聽 聽 聽 聽
ACTIVATE DIALOG oDlgB centered ON INIT oDlgB:Move( aPoint[ 1 ], aPoint[ 2 ] );
聽 聽 聽 聽 VALID ( iif( lOk, (Ponciudad(aAlias,oBrw3,oBrw)), ),.T. )
oDlgB:End()
(aAlias[2])->(Ordsetfocus(cindi)) 聽
Return Nil
//-------------
Static function ponciudad(aAlias,oBrw3,oBrw)
local cruta:=(aAlias[2])->Ruta
local nombreant:=oBrw3:aCols[1]:Value
local nombrenuevo:=oBrw:aCols[1]:value
if !errpobla->(Dbseek(nombreant))
聽 聽 聽 聽 if cruta = Space(2)
聽 聽 聽 聽 聽 聽 聽 聽 msgalert("No puedo agregar una poblacion que no tiene ruta"+chr(13)+;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Antes de debes asignar una ruta a "+alltrim(nombrenuevo),"ATENCION")
聽 聽 聽 聽 else
聽 聽 聽 聽 聽 聽 聽 聽 While .not. errpobla->(Rlock()); end
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 errpobla->(Dbappend())
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 errpobla->Poblaant:=nombreant
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 errpobla->Poblacion:=nombrenuevo
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 errpobla->Ruta:=cruta
聽 聽 聽 聽 聽 聽 聽 聽 errpobla->(Dbunlock())
聽 聽 聽 聽 聽 聽 聽 聽 msginfo("Poblacion a帽adida")
聽 聽 聽 聽 endif
endif
return nil
Base de Datos Munici (Con Todas las Poblaciones de Espa帽a):
Code (fw): Select all Collapse
local aFields := { { "CCODMUN", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CNOMMUN", "C", 30, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "RUTA", "C", 2, 0 } }

DbCreate( "myfile.dbf", aFields, "DBFCDX" )

USE myfile.dbf NEW VIA "DBFCDX"

INDEX ON MUNICI->ccodmun TAG CCODMUN

INDEX ON Upper(MUNICI->cnommun) TAG CNOMMUN

INDEX ON Upper(MUNICI->ruta) TAG RUTA
Base de datos RUTA , con todas las rutas y sus correspondientes conductores
Code (fw): Select all Collapse
local aFields := { { "RUTA", "C", 2, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NRUTA", "C", 35, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CONDUCTOR", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NOMBRE", "C", 35, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "IMPORTE", "N", 10, 2 } }

DbCreate( "myfile.dbf", aFields, "DBFCDX" )

USE myfile.dbf NEW VIA "DBFCDX"

INDEX ON _Field->Ruta TAG RUTA

INDEX ON _Field->Nruta TAG NRUTA

INDEX ON _Field->Conductor TAG CONDUCTOR
Base de datos ALBARAN , con todos los albaranes del dia:
Code (fw): Select all Collapse
local aFields := { { "ALBARAN", "C", 7, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "FECHA", "D", 8, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CODPRO", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "PRO", "C", 36, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DOMIPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "POBLAPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "PROVINPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CP", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CP1", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NIFPRO", "C", 9, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TELEPRO", "C", 9, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CODART", "C", 4, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ART", "C", 30, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "PRECIO_C", "N", 10, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "KILOS", "N", 6, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "KKILOS", "N", 6, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CR", "C", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "BASEIMPO", "N", 12, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OBSE", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OBSERVACI", "M", 10, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OBSERVACI1", "M", 10, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TARIFA", "N", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "BK", "C", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "FACTURA", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ESTADO", "C", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CONDUCTOR", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NCONDUCTOR", "C", 35, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CODPROU", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "PROU", "C", 35, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DOMICILIO", "C", 35, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "POBLA", "C", 24, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "POBLA1", "C", 24, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TELEFONO", "C", 9, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NIFPROU", "C", 9, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "IVA", "N", 5, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "C_ALM", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DATOS", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DATOS1", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TREEMB", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "IREEMB", "N", 12, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "GASTOS", "N", 12, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OPERADOR", "C", 25, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ESTADIS", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "TIPO", "N", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "LIQUI", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "QUITA", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "GRUPO", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "NGRUPO", "C", 10, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "CLAVE", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "GIMPORTE", "N", 12, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "GREEMBOL", "N", 12, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "FLD2", "N", 3, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "ORDEN", "N", 9, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "IMPRESO", "C", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "VOLUMEN", "N", 5, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "EXPEDI", "C", 12, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DESC", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "RUTAR", "C", 2, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "RUTAC", "C", 2, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "PROVIN", "C", 23, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "REEXP", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "C_REEXP", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "N_REEXP", "C", 25, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "F_REEXP", "D", 8, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "F_ENTR", "D", 8, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "S", "L", 1, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SCODPRO", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SPRO", "C", 36, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SDOMIPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SPOBLAPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SPROVINPRO", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SALMACEN", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SNALMACEN", "C", 40, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SCP", "C", 5, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SEGMER", "C", 12, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "SEGURO", "N", 10, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "DESCUENTO", "N", 10, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "GRABA", "C", 18, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OTROS", "N", 10, 2 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "OTROSN", "C", 15, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "F_EGA", "D", 8, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "H_EGA", "C", 8, 0 } }

DbCreate( "myfile.dbf", aFields, "DBFCDX" )

USE myfile.dbf NEW VIA "DBFCDX"

INDEX ON _field->Albaran TAG ALBARAN

INDEX ON _field->Codpro+dtos(_field->fecha) TAG CODPRO

INDEX ON _field->Pro+dtos(_field->fecha) TAG NOMBRE

INDEX ON dtos(_field->fecha)+_field->Albaran TAG FECHA

INDEX ON dtos(_field->fecha)+_field->rutac TAG FECHARU

INDEX ON _field->Factura+_field->CR+dtos(_field->fecha) TAG FACTURA

INDEX ON _field->Factura TAG FACTURA1

INDEX ON _field->Conductor TAG CONDUCTOR

INDEX ON iif(_field->Liqui,"S","N")+STR(_field->Tipo)+_field->conductor TAG PENDIENTE

INDEX ON STR(_field->Tipo) TAG TIPO

INDEX ON STR(_field->Baseimpo) TAG BASEIMPO

INDEX ON _field->codpro+_field->c_alm TAG TEMPORAL

INDEX ON _field->Prou+dtos(_field->fecha) TAG PROU

INDEX ON STR(_field->Orden,7) TAG ORDEN

INDEX ON _field->C_reexp+dtos(_field->F_reexp) TAG REEXPEDICI

INDEX ON STR(_field->Fld2,1)+dtos(_field->Fecha) TAG BORRADO

INDEX ON _field->Spro TAG SPRO
Base de datos errpobla, con todas las poblaciones cuyos nombres erroneos, se van asociando a los nombres correctos:
Code (fw): Select all Collapse
local aFields := { { "POBLAANT", "C", 24, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "POBLACION", "C", 30, 0 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "RUTA", "C", 2, 0 } }

DbCreate( "myfile.dbf", aFields, "DBFCDX" )

USE myfile.dbf NEW VIA "DBFCDX"

INDEX ON upper(errpobla->Poblaant) TAG POBLAANT
En el campo "POBLAANT", grabo el nombre que nos envian erroneo, osea si el cliente nos envia en un fichero que se refiere a la poblacion "SANTA CURZ DE LA ZARZA" , y se refiere a ella como "STA. CRUZ DE LA ZARZA", grabo en este campo "STA. CRUZ DE LA ZARZA" y en el campo "POBLACION" grabo "SANTA CRUZ DE LA ZARZA", por lo que luego en la busqueda, todas las poblaciones que se refieran como STA. CRUZ DE LA ZARZA , las entender谩 como SANTA CRUZ DE LA ZARZA.

Lo que pasa es que tengo que hacer una apreciaci贸n, y es que la busqueda que hacemos en la funci贸n Buscapo, en red se hace muy lenta, habr铆a alguna forma de agilizar 茅ste proceso?.
--------------------------

Saludos



Jose Luis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Tue Apr 18, 2023 08:01 AM
Ariel wrote:Jose Luis,

no has probado con AUTOGET ?
hace lo mismo y con menos codigo.

Saludos.
Ariel

La verdad es que no conoc铆a el tema de AUTOGET, pero cuando me lo has dicho, he mirado en el foro y tiene buena pinta.

Voy a trastear un poco y te comento
--------------------------

Saludos



Jose Luis
Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Tue Apr 18, 2023 10:52 AM
Jose Luis,

aqui tienes un ejemplo de su uso :
Code (fw): Select all Collapse
#include "autoget.ch"
聽aTabla["nmbarea"] := SPACE(30) 聽 聽 聽 聽 聽 聽 聽
聽 聽 aAreaProtegida:= { { 1, "Area uno" },; 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽 聽 聽{ 2, "Area dos" },; 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽 聽 聽{ 3, "Area tres" },; 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽 聽 聽{ 4, "Area cuatro" },; 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽 聽 聽{ 5, "Area cinco" } }

聽 聽 REDEFINE AUTOGET o["00014003"] VAR aTabla["nmbarea"] ;
聽 聽 聽 聽 聽 聽 聽 聽DATASOURCE aAreaProtegida 聽;
聽 聽 聽 聽 聽 聽 聽 聽ID 4003 ;
聽 聽 聽 聽 聽 聽 聽 聽OF oDlg ;
聽 聽 聽 聽 聽 聽 聽 聽FILTER ListFilter3( aAreaProtegida, cData, Self ); 聽 聽 聽 聽 聽
聽 聽 聽 聽 聽 聽 聽 聽CUEBANNER "Ingrese el Area Protegida" ;
聽 聽 聽 聽 聽 聽 聽 聽COLUMN 2 ;
聽 聽 聽 聽 聽 聽 聽 聽VALID ValidaAreaProtegida( aAreaProtegida, aTabla, o["00014003"] ) ;
聽 聽 聽 聽 聽 聽 聽 聽UPDATE
...

STATIC FUNCTION ValidaAreaProtegida( aAreaProtegida, aTabla, oGet )
聽 聽Local iRet := .t.
聽 聽Local aCtrl:= Hash(), aTmp, xTmp
聽 聽Local uVar, x

聽 聽if ! EMPTY( aTabla["nmbarea"] )
聽 聽 聽 聽 聽if (x:= ASCAN( aAreaProtegida, { |o| UPPER(ALLTRIM(aTabla["nmbarea"]))==UPPER(ALLTRIM(o[02])) } ) ) == 0
聽 聽 聽 聽 聽 聽 MsgStop("Debe seleccionar un Area de la lista.", "Dato invalido." )
聽 聽 聽 聽 聽 聽 RETURN .f.
聽 聽 聽 聽 聽endif
聽 聽 聽 aTabla["idarea"] := aAreaProtegida[x,01]
聽 聽 聽 aCtrl["msg"]:= ""
聽 聽 聽 uVar 聽 聽 聽 聽:= VALE("id="+ClipValue2SQL(aAreaProtegida[ aTabla["areaid"],01 ]),"mcli","id" ) // Busco el id
聽 聽 聽 if ! Empty( uVar ) 
聽 聽 ... mi code ...
聽 聽 endif

return iRet
//----------------------------------------------------------------------------//

STATIC function ListFilter3( aList, cData, oSelf )
聽 聽local aNewList := {}
聽 聽local uItem
聽 
聽 聽for each uItem in aList 聽 聽 聽 聽 聽 聽 // oSelf:uOrgData
聽 聽 聽 if UPPER( cData ) $ UPPER( uItem[ 2 ] )
聽 聽 聽 聽 聽AAdd( aNewList, uItem )
聽 聽 聽 endif 
聽 聽next

RETURN aNewList
Espero te sirva, cualquier duda avisame.
Saludos.
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto SOLUCIONADO
Posted: Tue Apr 18, 2023 11:15 AM
Me da error al compilar
Code (fw): Select all Collapse
#include "autoget.ch"
Function asociar()
local poblac:=space(20)
local cAlias2,oDlg,oSay,oGet1
聽 聽 聽 聽 dbUseArea(.T.,,Publicas:cUnidad+"MUNICI",aAlias[2],.T.)
聽 聽 聽 聽 (aAlias[2])->(ordSetfocus("cnonmun"))
聽 聽 聽 聽 (aAlias[2])->( dbGotop() )
聽 聽 聽 聽 cAlias2:=alias()
聽 聽 聽 聽 DEFINE DIALOG oDlg FROM 1, 1 TO 50, 50; oDlg:lHelpIcon:=.F.
聽 聽 聽 聽 聽 聽 聽 聽 oDlg:cTitle:=titulo
聽 聽 聽 聽 聽 聽 聽 聽 @ 聽5,5 Say oSay PROMPT "Poblaciones Para asociar (en Rojo)" OF oDlg PIXEL SIZE 600,15 COLOR nRGb( 251, 151, 聽71 ) Font Publicas:frosa 
聽 聽 聽 聽 聽 聽 聽 聽聽@ 12,5 Say oSay PROMPT "En verde ya estan asociadas" OF oDlg PIXEL SIZE 400,15 COLOR nRGb( 251, 151, 聽71 ) Font Publicas:frosa 
聽 聽 聽 聽 聽 聽 聽 聽 @ 25,5 AUTOGET oget1 Var poblac OF oDlg PIXEL SIZE 200,12 ALIAS cAlias2
聽 聽 聽 聽 聽 聽 聽 聽 @ 50,10 xbrowse oBrw3 OF oDlg ;


c:\compilapx\fivedit\prg\Funciones.prg(3626) Error E0030 Syntax error: "syntax error at '@'"

la linea 3626 es la del autoget
--------------------------

Saludos



Jose Luis
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Xbrowse, como hacer esto
Posted: Tue Apr 18, 2023 03:48 PM

Ariel, Jos茅 Luis, Ariel:

Muchas gracias por el c贸digo.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto
Posted: Tue Apr 18, 2023 05:59 PM

La funci贸n Buscapo, que he puesto anteriormente es lent铆sima en red.

Imaginate que para cada letra que tecleemos, tarda como 10 segundos en dejarte escribir la siguiente.

Voy a ver si soy capaz de depurar un poco el c贸digo

--------------------------

Saludos



Jose Luis
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Xbrowse, como hacer esto
Posted: Tue Apr 18, 2023 06:28 PM

Jose Luis

Lo que debes hacer es copiar a base al equipo local y abrir desde ah铆, luego de obtener el registro cerrarla.

Saludos,



Adhemar C.
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto
Posted: Tue Apr 18, 2023 06:49 PM

Voy a probar a ver

--------------------------

Saludos



Jose Luis
Posts: 428
Joined: Thu Oct 19, 2006 12:28 PM
Re: Xbrowse, como hacer esto
Posted: Wed Apr 19, 2023 01:32 PM

Vale, perfecto.

Muchas gracias

--------------------------

Saludos



Jose Luis

Continue the discussion