FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Llamar un Browser y tomar el valor de un registro
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Llamar un Browser y tomar el valor de un registro
Posted: Wed Feb 16, 2011 07:22 PM

Apreciados amigos,

Cual seria la forma mas optima de llamar a un browser desde un get y luego llenar el mismo con el valor retornado de un registro seleccionado del mismo browser.

Atento a sus comentarios

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Wed Feb 16, 2011 07:36 PM

Hola Compuin

Espero que esto te ayude
1.- SI LO HACES DESDE RECURSO, REDEFINES UN GET Y LE ASIGNAS UN BOTON

REDEFINE GET aGet[1] VAR aVar[1] ID 101 OF oDlg PICTURE "@!" UPDATE ;
BITMAP ( GETRESOURCES(), Busca ) ;
ACTION( aVar[1] := VerInMuebles(), aGet[1]:Refresh(), cCuenta := ALLTRIM( ( aFilesAdt[3] )->Propietar ),;
oSay:SetText( cCuenta), ( aFilesAdt[3] )->( ORDSETFOCUS(1) ), aGet[2]:SetFocus(), oDlg:Refresh() );
VALID IIF( ( aFilesAdt[3] )->( DBSEEK(aVar[1] ) ), ( cCuenta := ALLTRIM( ( aFilesAdt[3] )->Propietar ),;
oSay:SetText( cCuenta), ( aFilesAdt[3] )->( ORDSETFOCUS(1) ), aGet[2]:SetFocus(), oDlg:Refresh(), .T.), .F. )

EN EL ACTION LLAMAS A LA RUTINA DONDE TENGAS EL BROWSE Y LE ASIGNAS A LA VARIABLE DEL GET EL VALOR DE RETORNO

--
Function VerInmuebles( cArg )
--
Local oDlg, oBtn
Local oBrow, oCol
Local cApto := Space(10)
Local cArea := Select()
--
DbSelectArea( aFilesAdt[3] )
( aFilesAdt[3] )->( ORDSETFOCUS(1) )
( aFilesAdt[3] )->( DBGOTOP() )
--
IF cArg != NIL
( aFilesAdt[3] )->( DBSeek( cArg ) )
ENDIF
--
Define Dialog oDlg Resource "Unidades" ;
Title "Inmuebles"
--
oBrow := TXBrowse():New( oDlg )
*--
WITH OBJECT oBrow

:nMarqueeStyle := MARQSTYLE_HIGHLCELL
:nColDividerStyle := LINESTYLE_BLACK
:nStretchCol := STRETCHCOL_LAST
:lColDividerComplete := .T.
:l2007 := .T.
:lFooTer := .T.
:bSeek := {|c| DbSeek( c ) }
:bKeyDown := { |nKey| IF( nKey == VK_RETURN, oDlg:End() , ) }

END
--
oCol := oBrow:AddCol()
oCol:cHeader := " Edificio "
oCol:bStrData := {|| ( aFilesAdt[3] )->Edificio }
oCol:nHeadStrAlign := AL_CENTER
oCol:nDataStrAlign := AL_CENTER
oCol:bLClickHeader := { || ( aFilesAdt[3] )->( ORDSETFOCUS(1) ),oBrow:GoTop(), oBrow:Refresh() }
--
oCol := oBrow:AddCol()
oCol:cHeader := " Inmueble "
oCol:bStrData := {|| ( aFilesAdt[3] )->Apto }
oCol:nHeadStrAlign := AL_CENTER
oCol:nDataStrAlign := AL_CENTER
oCol:bLClickHeader := { || ( aFilesAdt[3] )->( ORDSETFOCUS(1) ),oBrow:GoTop(), oBrow:Refresh() }
--
oCol := oBrow:AddCol()
oCol:cHeader := " Nombre 贸 Raz贸n Social "
oCol:bStrData := {|| ( aFilesAdt[3] )->Propietar }
oCol:nHeadStrAlign := AL_LEFT
oCol:nDataStrAlign := AL_LEFT
oCol:bLClickHeader := { || ( aFilesAdt[ 3 ] )->( ORDSETFOCUS(2) ),oBrow:GoTop(), oBrow:Refresh() }
--
oCol := oBrow:AddCol()
oCol:cHeader := " Alicuota "
oCol:bStrData := {|| STR( ( aFilesAdt[3] )->Alicuota ) }
oCol:nHeadStrAlign := AL_CENTER
oCol:nDataStrAlign := AL_CENTER
--
oBrow:SetRDD()
oBrow:CreateFromResource(101)
--
Redefine Button oBtn ID 102 oF oDlg ACTION oDlg:End()
Activate Dialog oDlg Center;
ON INIT oBrow:SetFocus()
Return( ( aFilesAdt[3] )->Edificio + ( aFilesAdt[3] )->Apto )
*--

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Wed Feb 16, 2011 07:43 PM

Gracias Compubrion,

Lo que quiero es llamar la rutina donde va a estar el browse con el Enter sobre el Get vacio. Luego que traiga el browse, seleccionar un registro y, finalmente con Enter sobre ese registro llenar el Get. Te pongo un ejemplo: Un dialogo que me permite cargar informacion de Bancos (Codigo, Banco, Neo. de Cuenta y Cuenta Contable), en este caso, al llegar a Cuenta Contable, presionar Enter en el Get vacio y llamar un browse que muestre el Plan de Cuentas, y desde alli seleccionar la cuenta Contable que asignare y presionar Enter para que la llene en el Get origen.

Es posible hacer todo esto??

Atento a sus comentarios

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Wed Feb 16, 2011 09:48 PM

Compubrion,

Estoy probando tu codigo, pero creo que me falta el DBf o al menos la estructura

Podrias ayudarme con ello?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 111
Joined: Thu Jan 19, 2006 11:47 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Wed Feb 16, 2011 09:52 PM
Si es posible:

En el primer procedimiento esta el Get vacio con la variable Codigo, llamo una rutina que validad unas opciones llamada PASOCUEN, dependiendo de las validaciones que hace llama al plan de cuentas con el procedimiento CAPTMOSTRAR , se escoge la cuenta y al presionar enter la variable Codigo toma los datos y se llena el Get original donde se llamo...

Estan las imagenes para comprender mejor la primera el get vacio, la segunda llamando el plan de cuentas, la tercera llenando el get y mostrando la informacion que trajo del plan de cuenta.

http://www.hymplus.com/imagenes/Imagen%201.JPG

http://www.hymplus.com/imagenes/Imagen%202.JPG

http://www.hymplus.com/imagenes/Imagen%203.JPG

Y ahora parte del codigo.

Code (fw): Select all Collapse
**************************************************
PROC AGREGA01

DEFINE DIALOG PANTACAP RESOURCE "OBCAPZ01" OF Ventana ICON Pub:DWICO

REDEFINE GET OCodigo 聽VAR Codigo 聽 ID 701 OF PANTACAP UPDATE;
聽 聽 聽 聽 聽COLOR Pub:CNEGR,Pub:CGETS PICTURE "!!!!!!!!!!";
聽 聽 聽 聽 聽VALID (( 聽PASOCUEN() ,(Costos:=SPAC(4),PANTACAP:UPDATE()),MOSTRAR()),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 IF(Ctosn="S",(OSCosto:enable,Ocosto:enable()),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 (OSCosto:disable,Ocosto:disable())),PasoCta)

REDEFINE GET OTercero VAR Tercero 聽ID 702 OF PANTACAP UPDATE;
聽 聽 聽 聽 聽COLOR Pub:CNEGR,Pub:CGETS PICTURE "999999999999999";
聽 聽 聽 聽 聽VALID ((PASOTERC(),PANTACAP:UPDATE(),MOSTRAR()),PasoTer)

REDEFINE SAY OSCosto 聽 聽 聽 聽 聽 聽 聽 ID 703 OF PANTACAP UPDATE

REDEFINE GET OCosto 聽 VAR Costos 聽 ID 704 OF PANTACAP UPDATE;
聽 聽 聽 聽 聽COLOR Pub:CNEGR,Pub:CGETS PICTURE "!!!!" VALID ((PASOCOST(),MOSTRAR()),PasoCos)
REDEFINE GET ODetalle VAR Detalle 聽ID 708 OF PANTACAP UPDATE;
聽 聽 聽 聽 聽COLOR Pub:CNEGR,Pub:CGETS
REDEFINE GET OValor 聽 VAR Valor 聽 聽ID 709 OF PANTACAP UPDATE ;
聽 聽 聽 聽 聽COLOR Pub:CNEGR,Pub:CGETS PICTURE "99,999,999,999.99"

REDEFINE BUTTON OBdebi ID 711 OF PANTACAP ;
聽 聽 聽 聽 聽ACTION ((GRABA((Gdebi:=.T.,Gcred:=.F.)),MOSTRAR()),PANTACAP:End())
REDEFINE BUTTON OBcred ID 712 OF PANTACAP ;
聽 聽 聽 聽 聽ACTION ((GRABA((Gdebi:=.F.,Gcred:=.T.)),MOSTRAR()),PANTACAP:End())

ACTIVATE DIALOG 聽PANTACAP


************************************************
PROC PASOCUEN 聽 //Hace parte del proceso AGREGA

PasoCta:=.F.

SELE HMAE
HMAE->(DBSETFILTER ( { || HMAE->HMCLASES="SU" .OR. HMAE->HMCLASES="AA";
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 .OR. HMAE->HMCLASES="AB" }))
HMAE->(DBGOTOP())
SEEK Codigo
IF !EOF()
聽 Oclase:=HMCLASES
聽 IF HMCLASES="SU" .AND. HMN="N"
聽 聽 PasoCta:=.T.
聽 聽ELSEIF HMCLASES="AA" .AND. HMX="N"
聽 聽 PasoCta:=.T.
聽 聽ELSEIF HMCLASES="AB" .AND. HMX="N"
聽 聽 PasoCta:=.T.
聽 ENDIF

聽 IF PasoCta=.F.
聽 聽 DBGOTOP()
聽 聽 CAPTMOSTRAR()
聽 聽 OCodigo:refresh()
聽 聽 PasoCta:=.T.
聽 ENDIF

聽ELSE
聽 PasoCta:=.F.
聽 DBGOTOP()
聽 SELE HMAE
聽 CAPTMOSTRAR()
聽 OCodigo:refresh()
ENDIF


*****************************************************
PROC CAPTMOSTRAR 聽//Hace parte del proceso PASOCUEN

cla:=""
dwcolo:="N"

cSearch:=Spac(20)
DEFINE DIALOG OBCAPT04 RESOURCE "OBCAPT04" OF PANTACAP ICON Pub:DWICO

HMAEVER()

REDEFINE BUTTON OBcrea ID 50 聽OF OBCAPT04 MESSAGE Pub:Vcrea ;
聽 聽 聽 聽 聽 聽 聽 聽 ACTION (CrePla(),OBcrea:setfocus())
REDEFINE BUTTON OBsali ID 51 聽OF OBCAPT04 MESSAGE Pub:Vsali ;
聽 聽 聽 聽 聽 聽 聽 聽ACTION (OBCAPT04:End(),OBcrea:setfocus())

REDEFINE LISTBOX lisbas VAR LisPla1;
聽 FIELDS IF(HMAE->HMCLASES="CL".OR.HMAE->HMCLASES="GR";
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽.OR.HMAE->HMCLASES="CU".OR.HMAE->HMCLASES="SU",;
聽 SUBS(HMAE->HMCODIGO,1,6),;
聽 IF(HMAE->HMCLASES="TS",SUBS(HMAE->HMCODIGO,1,6)+"........",;
聽 IF(HMAE->HMCLASES="AA",SUBS(HMAE->HMCODIGO,1,6)+"-"+SUBS(HMAE->HMCODIGO,7,2),;
聽 IF(HMAE->HMCLASES="TA",SUBS(HMAE->HMCODIGO,1,6)+"-"+SUBS(HMAE->HMCODIGO,7,2)+"....",;
聽 IF(HMAE->HMCLASES="AB",SUBS(HMAE->HMCODIGO,1,6)+"-"+SUBS(HMAE->HMCODIGO,7,4),;
聽 IF(HMAE->HMCLASES="TB",SUBS(HMAE->HMCODIGO,1,6)+"-"+SUBS(HMAE->HMCODIGO,7,4)+"..","")))))),;
聽 HMAE->HMCUENTA,;
聽 IF(HMAE->HMCLASES="TS".OR.HMAE->HMCLASES="TA".OR.HMAE->HMCLASES="TB".OR.HMAE->HMCLASES#"T",;
聽 SUBS(HMAE->HMCODIGO,11,15),"")),;
聽 IF(HMAE->HMC="S"," 聽Si ",""),; 聽//Ver Costos
聽 IF(HMAE->HMI="S"," Si ",""); 聽 聽//Ver Nivel Auxiliar
聽 FIELDSIZES 80,320,80,48,48 ID 110 OF OBCAPT04 HEADERS "C贸digo","Cuenta","Nit/C茅dula",;
聽 聽 "C.CTOS","A x I" 聽ON CHANGE (Versdo(),cla:=hmclases,OBCAPT04:update())

REDEFINE GET oSearch VAR cSearch ID 115 OF OBCAPT04 COLOR Pub:CNEGR,Pub:CGETS
oSearch:bPostKey={||Search(oSearch:oGet:buffer),Lisbas:refresh()}


Lisbas:bKeyDown={|Enter|IIF(Enter==13,;
((IF(HMAE->HMCLASES="SU" .AND. HMAE->HMN="N",;
聽(Codigo:=SUBS(HMAE->HMCODIGO,1,10),Oclase:=HMAE->hmclases,OBCAPT04:END()),;
聽IF(HMAE->HMCLASES="AA" .AND. HMAE->HMX="N",(Codigo:=SUBS(HMAE->HMCODIGO,1,10),;
聽 聽Oclase:=HMAE->hmclases,OBCAPT04:END()),;
聽IF(HMAE->HMCLASES="AB" .AND. HMAE->HMX="N",(Codigo:=SUBS(HMAE->HMCODIGO,1,10),;
聽 聽Oclase:=HMAE->hmclases,OBCAPT04:END()),"")))),PasoCta:=.T.),( " " 聽))}

IF(dwcolo="S",(lisbas:NCLRPANE:={||IIF((HMAE->HMCLASES)=="TS" .OR. (HMAE->HMCLASES)=="TA";
聽 聽.OR. (HMAE->HMCLASES)=="TB",CLR_1,CLR_2)}),;
聽 ((lisbas:nClrText:={||IIF((HMAE->HMCLASES)=="TS" ;
聽 聽 .OR. (HMAE->HMCLASES)=="TA",(RGB(0,0,191)),(" "))}),;
聽 (lisbas:NCLRPANE:={|| IIF( 聽(ORDKEYNO() )%2==0,Pub:CLR_1,Pub:CLR_2 聽 )})))

Lisbas:refresh()
Ventana:UPDATE()

ACTIVATE DIALOG OBCAPT04 ON INIT (lisbas:gotfocus(),lisbas:gotop()) CENTERED


Espero te Sirva.
Edgar Mauricio Ar茅valo Mogoll贸n.
Bogot谩 DC. Colombia
FWH FTDN, xHarbour 1.2.1, Pelles C, Fivedit, Visual Studio Code, Borland 7.30, Mysql, Dbfs
http://www.hymplus.com http://www.hymlyma.com
Tratando de retomar la programaci贸n....
Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 04:07 AM

Compuin

En el valid del get

REDEFINE GET oGet VAR oVar ID 100 OF oDlg ;
VALID( IIF( EMPTY( oVar ), ( oVar := TUFUNCION DE MOSTRAR EL BROWSE CON LOS DATOS, .T.), .F. )

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 01:44 PM

Compubrion,

Hice los cambios sugeridos por ti, pero no funciona.

Aca el codigo del GET para ingresar Cuenta Contable

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( oNumero ), ( oNumero := CtaContab(CTABCO), .T.), .F. )

y Aca la funcion que invoca el Get para seleccionar una Cuenta Contable del Browse y luego tomarla con Enter y llenar el Get

FUNCTION CtaContab( ONUMBCO)
LOCAL oDlg, oBtn
LOCAL oBrw, oCol
LOCAL oCodigo := Space(10)
LOCAL cCuenta := Select()

DBSELECTAREA( "CTA" )
( "CTA" )->( ORDSETFOCUS(1) )
( "CTA" )->( DBGOTOP() )

IF ONUMBCO != NIL
( "CTA" )->( DBSeek( NUMBCO ) )
ENDIF

DEFINE DIALOG oDlg ;
TITLE "Cuenta Contable"

oBrw := TXBrowse():New( oDlg )

WITH OBJECT oBrw

:nMarqueeStyle := MARQSTYLE_HIGHLCELL
:nColDividerStyle := LINESTYLE_BLACK
:lColDividerComplete := .T.
:l2007 := .T.
:lFooTer := .T.
:bSeek := {|c| DbSeek( c ) }
:bKeyDown := { |nKey| IF( nKey == VK_RETURN, oDlg:END() , ) }

END

oCol := oBrw:AddCol()
oCol:cHeader := " Codigo "
oCol:bStrData := { ||CTA->CTA_CODIGO }
oCol:nHeadStrAlign := AL_CENTER
oCol:nDataStrAlign := AL_CENTER

oCol := oBrw:AddCol()
oCol:cHeader := " Cuenta Contable "
oCol:bStrData := {|| CTA->CTA_DESCRI }
oCol:nHeadStrAlign := AL_CENTER
oCol:nDataStrAlign := AL_CENTER

oBrw:SetRDD()
oBrw:CreateFromCode()

@ 3, 14 BUTTON oBtn PROMPT "&Salir" OF oDlg SIZE 45, 15 ;
ACTION oDlg:END()

ACTIVATE DIALOG oDlg CENTER;
ON INIT oBrw:SetFocus()

RETURN( CTA->CTA_CODIGO )

Atento a sus comentario

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:40 PM

Hice los cambios sugeridos por ti, pero no funciona.

Aca el codigo del GET para ingresar Cuenta Contable

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( oNumero ), ( oNumero := CtaContab(CTABCO), .T.), .F. )

cambia por esto

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( oNumero ), ( CTABCO := CtaContab(CTABCO), .T.), .F. )

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:42 PM

Me dio error de sintaxis en esa linea....pero no veo por que???

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:49 PM

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), oNumero:Refresh(), .T.), .F. )

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:50 PM

Es la variable la que debes validar, no el objeto...

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), .T.), .F. )

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:52 PM
Compuin wrote:Me dio error de sintaxis en esa linea....pero no veo por que???

Como sabemos cual es la linea donde te da el error, por favor colocala.... para poder ayudarte...
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:54 PM

Aca el error, es al momento de compilar:

prueba.prg(81) ERROR E0030 Syntax error: 'Parse error at '}'"

La linea 81 es donde esta el Valid, aca

VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), .T.), .F. )

Los 3 no podemos estar cometiendo el mismo error.....

Igual no compilo

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 132
Joined: Thu Mar 08, 2007 06:12 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 05:59 PM

te falta un parentesis el valid

VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), oNumero:Refresh(), .T.), .F. )

aca

VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), oNumero:Refresh(), .T.), .F. ) )

Harbour / Bcc / MinGW / Fwh 13.9
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Llamar un Browser y tomar el valor de un registro
Posted: Thu Feb 17, 2011 06:10 PM

Estimados,

Logro funcionar. Gracias a todos por sus aportes.

Saludos

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity