Page 1 of 2

Re: Llenar GETS desde xbrowse (SOLUCIONADO)

Posted: Sun Feb 13, 2011 7:05 pm
by Compuin
Buenas tardes amigos,

Tengo un browse que me permite incluir registros en un DBF. Al hacer Doble Click me deberia mostrar los datos del registro en un dialogo llenando los Gets del mismo. Solo me presenta el Get vacio.

Agradezco cualquier aporte ya que no veo el error que este comentiendo

Gracias de antemano

Aca el codigo que uso

#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA
STATIC lAceptar := .F.

FUNCTION MAIN()
LOCAL oWnd, oBar, oBrw, oDlg, oMeter, oText
CODBCO := SPACE(12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)

lMkDir("DATA")

IF .NOT. FILE ("DATA\BANCO.DBF")
DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
{ "BCO_DESCRI", "C", 30, 0 },;
{ "BCO_CUENTA", "C", 20, 0 } } )
ENDIF

USE DATA\BANCO ALIAS BCO NEW

DEFINE WINDOW oWnd

DEFINE BUTTONBAR oBar OF oWnd

DEFINE BUTTON OF oBar ACTION CBANCO()

oBrw := TXBrowse():New( oWnd )
oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(oBrw, .T.)}
oBrw:bKeyDown := { | nKey, nFlags | CBANCO(oBrw)}

oBrw:SetRDD()
oBrw:CreateFromCode()
oWnd:oClient := oBrw

ACTIVATE WINDOW oWnd ;
ON INIT oBrw:SetFocus()

RETURN NIL

FUNCTION CBANCO(TNUEVO)
STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

SET _3DLOOK ON

SetGetColorFocus() // change GET colors when focused

DEFINE DIALOG oDlg ;

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
@ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10
@ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
ACTION GRABA(.T., TNUEVO)

@ 3.3,8 BUTTON oBtn PROMPT "&Modificar" OF oDlg ;
ACTION GRABA(.F., TNUEVO)

ACTIVATE DIALOG oDlg CENTERED

RETURN (lAceptar)

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF

IF !TNUEVO

BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())
ENDIF

msginfo("Mi Mensaje...!")

RETURN (.T.)

STATIC FUNCTION GRABA(TNUEVO)

BCO->(DBAPPEND())
BCO->(RLOCK())
BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())

msginfo("Mi Mensaje...!")

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 7:30 pm
by Bayron
Debes asignar el valor de:

CODBCO := BCO->BCO_CODIGO
...etc

Antes de pintar el Get.

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 7:39 pm
by Compuin
Esta parte del codigo tiene lo sugerido por ti

STATIC FUNCTION BCONUEVO(TNUEVO)

IF !TNUEVO

CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF

IF TNUEVO

BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())
ENDIF

msginfo("Mi Mensaje...!")

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 7:40 pm
by Pedro
Hola compuin
Veamos
1.- a la función CBANCO, tú envías dos parámetros, el browse y una variable lógica, pero solo recibes uno en ella, debes poner los dos parámetros el browse y la variable lógica que te indicará si es nuevo o modificar.
2.- en esa función los campos están vacíos y no llamas desde ningún sitio a la función BCONUEVO para rellenarlos
3.- en la función BCONUEVO, si es modificación, estas asignando a la tabla valores vacíos ya que las variables que usas están vacías. Se supone que aquí debes rellenar las variables con los valores de la tabla si es modificación y con valores vacíos si es un alta nueva.

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO -----------> si es nuevo
BCO->(dbAppend()) -------------> registro nuevo
CODBCO := BCO->BCO_CODIGO------>valores vacíos
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF
IF !TNUEVO-----------> si no es nuevo

CODBCO := BCO->BCO_CODIGO --------> tomamos los valores del campo
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA

ENDIF

4.- en la función graba tu haces un registro nuevo sí o sí, ya que haces el dbappend sin más, no haces modificación del registro que modificas, si no que grabas uno nuevo.

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 7:51 pm
by Bayron
Compuin wrote:Esta parte del codigo tiene lo sugerido por ti


Correcto, pero esa funcion BCONUEVO(TNUEVO) no es leida sino hasta que presionas el BOTON Modificar

En todo caso, deberias de llamar la funcion al activar el Dialogo

Code: Select all | Expand

ACTIVATE DIALOG oDlg CENTERED;
     ON INIT ( BCONUEVO(TNUEVO) )


Si eso no funciona, hazlo asi:

Code: Select all | Expand

ACTIVATE DIALOG oDlg CENTERED;
     ON INIT ( BCONUEVO(TNUEVO), oCodigo:Refresh(), oNombre:Refresh(), oNumero:Refresh() )


Recuerda que la variable CODBCO no tiene nada que ver con el campo COD->CODBCO

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 8:07 pm
by Compuin
Gracias por sus aportes,

Lo que busco es lo siguiente:

1.- En la Barra de Botones al presionar el Boton, me debe llamar el dialogo para agregar un nuevo registro. Hasta alli lo hace todo OK.

2.- La idea es que al hacer Doble Click en el browser, dicho registro se muestre en el dialogo para ser modificado cargado los campos en los Get, luego el boton del dialogo permitira grabarlo

Atento a sus comentarios

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 8:24 pm
by Compuin
Hice modificaciones pero al ejecutar Doble click en el registro del browse que quiero modificar, no ocurre absolutamente nada, es decir, no muestra el dialogo que permita modificar

Aca el codigo:

#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA
STATIC TNUEVO := .F.

FUNCTION MAIN()
LOCAL oWnd, oBar, oBrw, oDlg, oMeter, oText
CODBCO := SPACE(12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)

lMkDir("DATA")

IF .NOT. FILE ("DATA\BANCO.DBF")
DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
{ "BCO_DESCRI", "C", 30, 0 },;
{ "BCO_CUENTA", "C", 20, 0 } } )
ENDIF

USE DATA\BANCO ALIAS BCO NEW

DEFINE WINDOW oWnd

DEFINE BUTTONBAR oBar OF oWnd

DEFINE BUTTON OF oBar ACTION CBANCO(oBrw, TNUEVO)

oBrw := TXBrowse():New( oWnd )
oBrw:blDblClick := { | nRow, nCol, nKey | BCONUEVO(TNUEVO)}
oBrw:bKeyDown := { | nKey, nFlags | CBANCO(oBrw)}

oBrw:SetRDD()
oBrw:CreateFromCode()
oWnd:oClient := oBrw

ACTIVATE WINDOW oWnd ;
ON INIT oBrw:SetFocus()

RETURN (.T.)

FUNCTION CBANCO(oBrw, TNUEVO)
STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

SET _3DLOOK ON

SetGetColorFocus() // change GET colors when focused

DEFINE DIALOG oDlg ;

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
@ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10
@ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
ACTION GRABA(.T., TNUEVO)

@ 3.3,10 BUTTON oBtn PROMPT "&Salir" OF oDlg ;
ACTION oDlg:END()

ACTIVATE DIALOG oDlg CENTERED

RETURN (TNUEVO)

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
//BCO->(DBAPPEND())
CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF

IF !TNUEVO

CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA

ENDIF

msginfo("Mi Mensaje...!")

RETURN (.T.)

STATIC FUNCTION GRABA(TNUEVO)

BCO->(DBAPPEND())
BCO->(RLOCK())
BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())

msginfo("Mi Mensaje...!")


Atento a sus comentarios

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 9:40 pm
by Compuin
Amigos,

Ya pudimos avanzar con el llamado y llenado de los Gets desde el browser. Ahora, una vez cambiado los campos del registro, como actualizo el mismo, ya que la funcion DBAppend() siempre me va a agregar el mismo como un registro nuevo???

Adicionalmente, cuando le doy al boton incluir en el ButtonBar, me trae los valores del registro en el cual estoy posicionado, cuando deberia estar todos los Gets en blanco.

Atento a sus comentarios, aca les dejo el codigo

#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA
STATIC TNUEVO := .F.

FUNCTION MAIN()
LOCAL oWnd, oBar, oBrw, oDlg, oMeter, oText

lMkDir("DATA")

IF .NOT. FILE ("DATA\BANCO.DBF")
DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
{ "BCO_DESCRI", "C", 30, 0 },;
{ "BCO_CUENTA", "C", 20, 0 } } )
ENDIF

USE DATA\BANCO ALIAS BCO NEW

DEFINE WINDOW oWnd

DEFINE BUTTONBAR oBar OF oWnd

DEFINE BUTTON OF oBar ACTION CBANCO(TNUEVO)

oBrw := TXBrowse():New( oWnd )
oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(TNUEVO, oBrw )}
oBrw:bKeyDown := { | nKey, nFlags | CBANCO(TNUEVO, oBrw)}

oBrw:SetRDD()
oBrw:CreateFromCode()
oWnd:oClient := oBrw

ACTIVATE WINDOW oWnd ;
ON INIT oBrw:SetFocus()

RETURN (.T.)

FUNCTION CBANCO(TNUEVO)
STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

SET _3DLOOK ON

SetGetColorFocus() // change GET colors when focused

IIF(TNUEVO, BCONUEVO(.T.), BCONUEVO(.F.))

DEFINE DIALOG oDlg ;

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
@ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10


@ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
ACTION GRABA(.T., TNUEVO)

@ 3.3,10 BUTTON oBtn PROMPT "&Salir" OF oDlg ;
ACTION oDlg:END()

ACTIVATE DIALOG oDlg CENTERED

RETURN (TNUEVO)


STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO

CODBCO := SPACE(12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)

ENDIF

IF !TNUEVO

CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA

ENDIF

RETURN (.T.)

STATIC FUNCTION GRABA(TNUEVO)

BCO->(DBAPPEND())
BCO->(RLOCK())
BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())

msginfo("Mi Mensaje...!")

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 9:59 pm
by artu01
compuin no lo he probado pero intenta hacerlo asi



DEFINE WINDOW oWnd

DEFINE BUTTONBAR oBar OF oWnd

DEFINE BUTTON OF oBar ACTION CBANCO(.t.)

oBrw := TXBrowse():New( oWnd )
oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(.f.)}
oBrw:bKeyDown := { | nKey, nFlags | CBANCO(.t.)}

oBrw:SetRDD()
oBrw:CreateFromCode()
oWnd:oClient := oBrw

ACTIVATE WINDOW oWnd ;
ON INIT oBrw:SetFocus()

RETURN NIL

FUNCTION CBANCO(TNUEVO)
STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

SET _3DLOOK ON

SetGetColorFocus() // change GET colors when focused
IIF(TNUEVO, BCONUEVO(tnuevo), BCONUEVO(tnuevo))


DEFINE DIALOG oDlg ;

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
@ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10
@ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
ACTION GRABA(TNUEVO)

@ 3.3,8 BUTTON oBtn PROMPT "&Modificar" OF oDlg ;
ACTION GRABA(.F., TNUEVO)

ACTIVATE DIALOG oDlg CENTERED

RETURN (lAceptar)

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO

CODBCO := SPACE(12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)

ENDIF

IF !TNUEVO

CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA

ENDIF

RETURN (.T.)

STATIC FUNCTION GRABA(TNUEVO)
if tnuevo
BCO->(DBAPPEND())
else
BCO->(RLOCK())
endif
BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())

msginfo("Mi Mensaje...!")

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 10:09 pm
by Compuin
artu01 wrote:compuin no lo he probado pero intenta hacerlo asi


Artu01:

Sigue agregando un registro mas. No logra modificar el registro seleccionado

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 11:03 pm
by Daniel Garcia-Gil
Compuin

Compuin wrote:Sigue agregando un registro mas. No logra modificar el registro seleccionado

si te esta agregando un registro mas es porque estas haciendo un Append Blank (dbappend)... lo que significa que debes revisar tu codigo pues el problema esta en la logica, todos los ejemplo aca mostrados funcionan bien, verifica el proceso cuando modificas o agregas un registro

si la accion es un registro nuevo.. haces el append blank
si la accion es modificar NO HACES el append blank

mira el ejemplo que te pode Pedro y el Ejmeplo que te pone Artu01

mientras tu en la funcion grabar SIEMPRE agregas un registro en blanco (DBAPPEND)

PEDRO
Pedro wrote:IF TNUEVO -----------> si es nuevo
BCO->(dbAppend()) -------------> registro nuevo
CODBCO := BCO->BCO_CODIGO------>valores vacíos
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF
IF !TNUEVO-----------> si no es nuevo

CODBCO := BCO->BCO_CODIGO --------> tomamos los valores del campo
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA

ENDIF


ARTU01
artu01 wrote:if tnuevo
BCO->(DBAPPEND())
else
BCO->(RLOCK())
endif

Re: Llenar GETS desde xbrowse

Posted: Sun Feb 13, 2011 11:55 pm
by Compuin
Pues no logro hacer que grabe un registro modificado, siempre toma los valores de uno pero lo agrega como nuevo. Lo he condicionado a leer si es un registro nuevo o no y aun asi no logro verlo.

Aca el codigo completo con las modificaciones sugeridas

#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA, NREG, oDlg, oBrw
STATIC TNUEVO := .T.

FUNCTION MAIN()
LOCAL oWnd, oBar, oMeter, oText

SET Deleted On
SET _3DLOOK ON

lMkDir("DATA")

IF .NOT. FILE ("DATA\BANCO.DBF")
DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
{ "BCO_DESCRI", "C", 30, 0 },;
{ "BCO_CUENTA", "C", 20, 0 } } )
ENDIF

USE DATA\BANCO ALIAS BCO NEW

DEFINE WINDOW oWnd

DEFINE BUTTONBAR oBar OF oWnd

DEFINE BUTTON OF oBar ACTION CBANCO(.T.)
DEFINE BUTTON OF oBar ACTION CBANCO(.F.)

oBrw := TXBrowse():New( oWnd )
oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(.F., oBrw )}
oBrw:bKeyDown := { | nKey, nFlags | CBANCO( .F., oBrw )}

oBrw:SetRDD()
oBrw:CreateFromCode()
oWnd:oClient := oBrw

ACTIVATE WINDOW oWnd ;
ON INIT oBrw:SetFocus()

RETURN (.T.)

FUNCTION CBANCO(TNUEVO)
STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

SetGetColorFocus() // change GET colors when focused

SET 3DLook OFF

IIF(TNUEVO, BCONUEVO(.T.), BCONUEVO(.F.))

DEFINE DIALOG oDlg ;
TITLE IF(TNUEVO, "Incluir Cuenta Bancaria","Modificar Cuenta Bancaria")

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
@ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
@ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10

@ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
ACTION (GRABA(.T., TNUEVO), oDlg:END(), oBrw:Refresh())

@ 3.3,10 BUTTON oBtn PROMPT "&Salir" OF oDlg ;
ACTION oDlg:END()

ACTIVATE DIALOG oDlg CENTERED

RETURN (TNUEVO)

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
NREG:=BCO->(RECNO())
CODBCO := SPACE(12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)
ENDIF

IF !TNUEVO
NREG:=BCO->(RECNO())
CODBCO := BCO->BCO_CODIGO
NOMBCO := BCO->BCO_DESCRI
CTABCO := BCO->BCO_CUENTA
ENDIF

RETURN (.T.)

STATIC FUNCTION GRABA(GRA, TNUEVO)

IF GRA
IF !TNUEVO
BCO->(DBGOTO(NREG))
ENDIF

BCO->(DBAPPEND())
BCO->(RLOCK())
BCO->BCO_CODIGO := CODBCO
BCO->BCO_DESCRI := NOMBCO
BCO->BCO_CUENTA := CTABCO
BCO->(DBUNLOCK())

ENDIF

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Mon Feb 14, 2011 12:17 am
by Bayron
De esta manera funciona para mi....

Code: Select all | Expand

#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA, NREG, oDlg, oBrw
STATIC TNUEVO := .T.

FUNCTION MAIN()
    LOCAL oWnd, oBar, oMeter, oText

    SET Deleted On
    SET _3DLOOK ON

    lMkDir("DATA")

    IF .NOT. FILE ("DATA\BANCO.DBF")
        DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
            { "BCO_DESCRI", "C", 30, 0 },;
            { "BCO_CUENTA", "C", 20, 0 } } )

    ENDIF

    USE DATA\BANCO ALIAS BCO NEW

    DEFINE WINDOW oWnd

        DEFINE BUTTONBAR oBar OF oWnd

        DEFINE BUTTON OF oBar ACTION CBANCO(.T.)
        DEFINE BUTTON OF oBar ACTION CBANCO(.F.)

        oBrw := TXBrowse():New( oWnd )
        oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(.F., oBrw )}
        oBrw:bKeyDown := { | nKey, nFlags | CBANCO( .F., oBrw )}

        oBrw:SetRDD()
        oBrw:CreateFromCode()
        oWnd:oClient := oBrw

    ACTIVATE WINDOW oWnd ;
        ON INIT oBrw:SetFocus()

RETURN (.T.)

FUNCTION CBANCO(TNUEVO)
    STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

    SetGetColorFocus() // change GET colors when focused

    SET 3DLook OFF

    BCONUEVO(TNUEVO)

    DEFINE DIALOG oDlg ;
        TITLE IF(TNUEVO, "Incluir Cuenta Bancaria","Modificar Cuenta Bancaria")

        @ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
        @ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
        @ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10

        @ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
            ACTION (GRABA(.T., TNUEVO), oDlg:END(), oBrw:Refresh())

        @ 3.3,10 BUTTON oBtn PROMPT "&Salir" OF oDlg ;
            ACTION oDlg:END()

    ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

STATIC FUNCTION BCONUEVO(TNUEVO)

    IF TNUEVO
        NREG:=BCO->(RECNO())
        CODBCO := SPACE(12)
        NOMBCO := SPACE(30)
        CTABCO := SPACE(30)

    ELSE
   
        NREG:=BCO->(RECNO())
        CODBCO := BCO->BCO_CODIGO
        NOMBCO := BCO->BCO_DESCRI
        CTABCO := BCO->BCO_CUENTA
    ENDIF

RETURN (.T.)

STATIC FUNCTION GRABA(GRA, TNUEVO)

    IF GRA
        IF !TNUEVO
            BCO->(DBGOTO(NREG))
        ENDIF

        BCO->(DBAPPEND())
        BCO->(RLOCK())
        BCO->BCO_CODIGO := CODBCO
        BCO->BCO_DESCRI := NOMBCO
        BCO->BCO_CUENTA := CTABCO
        BCO->(DBUNLOCK())

    ENDIF

RETURN (.T.)

Re: Llenar GETS desde xbrowse

Posted: Mon Feb 14, 2011 12:22 am
by Compuin
Bayron wrote:De esta manera funciona para mi....

Code: Select all | Expand



#include "FiveWin.ch"
#include "XBrowse.ch"

STATIC CODBCO, NOMBCO, CTABCO, CTACTA, GRA, NREG, oDlg, oBrw
STATIC TNUEVO := .T.

FUNCTION MAIN()
    LOCAL oWnd, oBar, oMeter, oText

    SET Deleted On
    SET _3DLOOK ON

    lMkDir("DATA")

    IF .NOT. FILE ("DATA\BANCO.DBF")
        DbCreate( "DATA\BANCO", { { "BCO_CODIGO", "C", 12, 0 },;
            { "BCO_DESCRI", "C", 30, 0 },;
            { "BCO_CUENTA", "C", 20, 0 } } )

    ENDIF

    USE DATA\BANCO ALIAS BCO NEW

    DEFINE WINDOW oWnd

        DEFINE BUTTONBAR oBar OF oWnd

        DEFINE BUTTON OF oBar ACTION CBANCO(.T.)
        DEFINE BUTTON OF oBar ACTION CBANCO(.F.)

        oBrw := TXBrowse():New( oWnd )
        oBrw:blDblClick := { | nRow, nCol, nKey | CBANCO(.F., oBrw )}
        oBrw:bKeyDown := { | nKey, nFlags | CBANCO( .F., oBrw )}

        oBrw:SetRDD()
        oBrw:CreateFromCode()
        oWnd:oClient := oBrw

    ACTIVATE WINDOW oWnd ;
        ON INIT oBrw:SetFocus()

RETURN (.T.)

FUNCTION CBANCO(TNUEVO)
    STATIC oDlg, oGet, oCodigo, oNombre, oNumero, oCuenta, oBtn

    SetGetColorFocus() // change GET colors when focused

    SET 3DLook OFF

    BCONUEVO(TNUEVO)

    DEFINE DIALOG oDlg ;
        TITLE IF(TNUEVO, "Incluir Cuenta Bancaria","Modificar Cuenta Bancaria")

        @ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10
        @ 2,1 GET oNombre VAR NOMBCO OF oDlg SIZE 40, 10
        @ 3,1 GET oNumero VAR CTABCO OF oDlg SIZE 40, 10

        @ 3.3,1 BUTTON oBtn PROMPT "&Grabar" OF oDlg ;
            ACTION (GRABA(.T., TNUEVO), oDlg:END(), oBrw:Refresh())

        @ 3.3,10 BUTTON oBtn PROMPT "&Salir" OF oDlg ;
            ACTION oDlg:END()

    ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

STATIC FUNCTION BCONUEVO(TNUEVO)

    IF TNUEVO
        NREG:=BCO->(RECNO())
        CODBCO := SPACE(12)
        NOMBCO := SPACE(30)
        CTABCO := SPACE(30)

    ELSE
   
        NREG:=BCO->(RECNO())
        CODBCO := BCO->BCO_CODIGO
        NOMBCO := BCO->BCO_DESCRI
        CTABCO := BCO->BCO_CUENTA
    ENDIF

RETURN (.T.)

STATIC FUNCTION GRABA(GRA, TNUEVO)

    IF GRA
        IF !TNUEVO
            BCO->(DBGOTO(NREG))
        ENDIF

        BCO->(DBAPPEND())
        BCO->(RLOCK())
        BCO->BCO_CODIGO := CODBCO
        BCO->BCO_DESCRI := NOMBCO
        BCO->BCO_CUENTA := CTABCO
        BCO->(DBUNLOCK())

    ENDIF

RETURN (.T.)


Corri el ejemplo que me enviates,

Pero me genera el registro nuevamente....anexo imagen

Image

Uploaded with ImageShack.us

Re: Llenar GETS desde xbrowse

Posted: Mon Feb 14, 2011 12:26 am
by Bayron
Sip, estoy verificando...