Xbrowse, como hacer esto

Xbrowse, como hacer esto

Postby JoseLuis » Thu Apr 13, 2023 5: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:

Image

Y me gustaria hacer esto en un xbrowse
Image

hacer esa búsqueda en la columna Poblacion.

Esto lo tengo hecho en un Dialogo:
Code: Select all  Expand view

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: Select all  Expand view

    @ 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.
Last edited by JoseLuis on Tue Apr 18, 2023 12:04 pm, edited 2 times in total.
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto

Postby acuellar » Fri Apr 14, 2023 12:20 pm

Estimado José luis

Intenta modificando éste código
Code: Select all  Expand view

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.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Xbrowse, como hacer esto

Postby JoseLuis » Fri Apr 14, 2023 5:22 pm

Adhemar

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

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby JoseLuis » Sat Apr 15, 2023 9:20 am

Solucionado

Gracias a ti y a Mr. Rao.

Un saludo
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby Armando » Mon Apr 17, 2023 3: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
User avatar
Armando
 
Posts: 3227
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby Ariel » Mon Apr 17, 2023 9:53 pm

Jose Luis,

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

Saludos.
Ariel
 
Posts: 376
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby JoseLuis » Tue Apr 18, 2023 7:56 am

Armando

Te pongo el codigo completo a continuacion:

Code: Select all  Expand view

//------------------
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: Select all  Expand view

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: Select all  Expand view

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: Select all  Expand view

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: Select all  Expand view

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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby JoseLuis » Tue Apr 18, 2023 8: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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby Ariel » Tue Apr 18, 2023 10:52 am

Jose Luis,

aqui tienes un ejemplo de su uso :

Code: Select all  Expand view

#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.
Ariel
 
Posts: 376
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Re: Xbrowse, como hacer esto SOLUCIONADO

Postby JoseLuis » Tue Apr 18, 2023 11:15 am

Me da error al compilar
Code: Select all  Expand view


#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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto

Postby Armando » Tue Apr 18, 2023 3: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
User avatar
Armando
 
Posts: 3227
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Xbrowse, como hacer esto

Postby JoseLuis » Tue Apr 18, 2023 5: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
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto

Postby acuellar » Tue Apr 18, 2023 6: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.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Xbrowse, como hacer esto

Postby JoseLuis » Tue Apr 18, 2023 6:49 pm

Voy a probar a ver
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo

Re: Xbrowse, como hacer esto

Postby JoseLuis » Wed Apr 19, 2023 1:32 pm

Vale, perfecto.
Muchas gracias
--------------------------
Saludos

Jose Luis
JoseLuis
 
Posts: 426
Joined: Thu Oct 19, 2006 12:28 pm
Location: Toledo


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests