Llamar un Browser y tomar el valor de un registro

Llamar un Browser y tomar el valor de un registro

Postby Compuin » Wed Feb 16, 2011 7: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
Last edited by Compuin on Thu Feb 17, 2011 7:01 pm, edited 2 times in total.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby compubrion » Wed Feb 16, 2011 7: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
User avatar
compubrion
 
Posts: 130
Joined: Thu Mar 08, 2007 6:12 pm
Location: Miranda - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Wed Feb 16, 2011 7: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Wed Feb 16, 2011 9:48 pm

Compubrion,

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

Podrias ayudarme con ello?
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby MauroArevalo » Wed Feb 16, 2011 9: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: Select all  Expand view  RUN

**************************************************
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....
User avatar
MauroArevalo
 
Posts: 107
Joined: Thu Jan 19, 2006 11:47 pm
Location: Bogota DC. Colombia

Re: Llamar un Browser y tomar el valor de un registro

Postby compubrion » Thu Feb 17, 2011 4: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
User avatar
compubrion
 
Posts: 130
Joined: Thu Mar 08, 2007 6:12 pm
Location: Miranda - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Thu Feb 17, 2011 1: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby compubrion » Thu Feb 17, 2011 5: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
User avatar
compubrion
 
Posts: 130
Joined: Thu Mar 08, 2007 6:12 pm
Location: Miranda - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Thu Feb 17, 2011 5:42 pm

Me dio error de sintaxis en esa linea....pero no veo por que???
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby compubrion » Thu Feb 17, 2011 5:49 pm

@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 60, 10 ;
VALID( IIF( EMPTY( CTABCO ), ( CTABCO := CtaContab(CTABCO), oNumero:Refresh(), .T.), .F. )
Last edited by compubrion on Thu Feb 17, 2011 5:53 pm, edited 1 time in total.
Harbour / Bcc / MinGW / Fwh 13.9
User avatar
compubrion
 
Posts: 130
Joined: Thu Mar 08, 2007 6:12 pm
Location: Miranda - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby joseluisysturiz » Thu Feb 17, 2011 5: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby joseluisysturiz » Thu Feb 17, 2011 5: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Thu Feb 17, 2011 5: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Llamar un Browser y tomar el valor de un registro

Postby compubrion » Thu Feb 17, 2011 5: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
User avatar
compubrion
 
Posts: 130
Joined: Thu Mar 08, 2007 6:12 pm
Location: Miranda - Venezuela

Re: Llamar un Browser y tomar el valor de un registro

Postby Compuin » Thu Feb 17, 2011 6:10 pm

Estimados,

Logro funcionar. Gracias a todos por sus aportes.

Saludos
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests