Estoy retomando un ejemplo que hice con FOLDEREX en el que uso dos bases de relacionados: PROVEEDORES Y PRODUCTOS.. Si bien está funcionando perfectamente el ejemplo, la cuestión es que me gustaría que la función de productos estuviera en otro prg y no en el mismo y sin que rompa la relación, ya que me gustaría que el desarrollo de cada pestaña estaviera en prg diferentes y sin que se rompa la relación de las bases.
En el ejemplo siguiente pretendo que al pulsar la pestaña "Proveedores" se activara esa función pero desarrollado en otro prg.
- Code: Select all Expand view RUN
- #include 'fivewin.ch'
#include 'ord.ch'
#include 'xbrowse.ch'
#include 'hbcompat.ch'
REQUEST DBFCDX
FUNCTION TELEM()
LOCAL oDlg, obrw, nWild:=2, cList, aHdrs, aFlds
SET DATE ITALIAN
SET CENTURY ON
RDDSETDEFAULT( "DBFCDX" )
USE PROVEEDOR NEW SHARED ALIAS "PROVE"
INDEX ON PROVE->CODIGO_PRO TO CODPROVE
SET INDEX TO CODPROVE
USE PRODUCTOS NEW SHARED ALIAS "PRODU"
INDEX ON PRODU->CODIGO_PRO TO CODPRODU
SET INDEX TO CODPRODU
SELE PROVE
SET RELATION TO PROVE->CODIGO_PRO INTO PRODU
cList := "NOMBRE, PROVINCIA"
aFlds := HB_ATokens( cList, ',' )
DEFINE DIALOG oDlg FROM 3, 3 TO 33, 100 TITLE "Búsqueda incremental"
@ 30,10 XBROWSE oBrw SIZE 360,150 PIXEL OF oDlg ;
COLUMNS aFlds HEADERS "Nombre", "Provincia" ;
ALIAS "PROVE" COLSIZES 200, 200 AUTOSORT CELL LINES NOBORDER
oBrw:lHScroll:= .F.
WITH OBJECT oBrw
:lIncrFilter := .t.
:lSeekWild := ( nWild == 2 )
:cFilterFld := "Nombre"
:nStretchCol := STRETCHCOL_WIDEST
END
@ 10, 10 COMBOBOX oBrw:cFilterFld ;
ITEMS { "Nombre", "Provincia" };
ON CHANGE ( oBrw:Seek( "" ), oBrw:SetFocus() ) ;
SIZE 50,400 PIXEL OF oDlg
@ 10, 70 COMBOBOX nWild ITEMS { "Empieza con", "Contiene" };
ON CHANGE ( oBrw:lSeekWild := ( nWild == 2 ), ;
oBrw:Seek( If( oBrw:lSeekWild, oBrw:cSeek, "" ) ), ;
oBrw:SetFocus() );
SIZE 70,400 PIXEL OF oDlg
@ 11,150 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 200,10 PIXEL OF oDlg COLOR CLR_BLACK,CLR_YELLOW PICTURE '@!'
oBrw:CreateFromCode()
@ 11, 10 BUTTON "Nuevo " OF oDlg ACTION oBrw:EditSource( .T. )
@ 11, 20 BUTTON "Editar " OF oDlg ACTION EditPro( oBrw )
@ 11, 30 BUTTON "Eliminar" OF oDlg ACTION oBrw:Delete()
@ 11, 40 BUTTON "&Imprimir" OF oDlg ;
ACTION oBrw:Report( "Listado de SAT", .T. ) ; // .t. --> wants preview
SIZE 40, 12
@ 11, 50 BUTTON "&Terminar" OF oDlg ACTION oDlg:End() SIZE 40, 12
ACTIVATE DIALOG oDlg CENTERED ON INIT ( oBrw:SetFocus(), .f. )
RETURN nil
//***************** EDICION CON FOLDER---------------
FUNCTION editPro( oBrw, oDlg )
LOCAL oDlg1, oFld, oLbx, Lsalir:=.f.
LOCAL nProve, oProve, cNombre, oNombre, cProvincia, oProvincia
NProve := PROVE->CODIGO_PRO
cNombre := PROVE->NOMBRE
cProvincia := PROVE->PROVINCIA
DEFINE DIALOG oDlg1 FROM 3, 3 TO 20, 70 TITLE "Mantenimiento"
@ 10, 5 FOLDEREX oFld PIXEL PROMPT "&Proveedor", "&Datos mercancías"[/color] SIZE 250, 100
@ 20, 5 SAY "Código:" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 20, 100 SAY oProve var nProve OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 5 SAY "Razón social" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 100 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 40, 5 SAY "Provincia" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 40, 100 GET oProvincia VAR cProvincia OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 60, 50 BUTTON "Grabar" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL action oDlg1:end()
@ 60, 150 BUTTON "Salir" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL ACTION (lSalir:=.t., oDlg1:End())
[color=#FF0000]
[color=#FF8000]//------------- DATOS DE MERCANCÍAS. ESTO QUIERO PONERLO EN OTRO PRG SIN QUE SE ROMPA LA RELACIÓN ----------
SELE produ
produ->( ordscope( 0, nProve ) )
produ->( ordscope( 1, nProve ) )
produ->( DBSKIP( 0 ) )
IF produ->( ordKeyCount() ) == 0
MsgInfo( "No se encontraron productos" )
ENDIF
@ 1, 1 XBROWSE oLbx SIZE 250, 65 PIXEL;
COLUMNS "CODIGO_PRO", "PRODUCTO", "PRECIO" OF oFld:aDialogs[ 2 ] ALIAS "PRODU";
HEADERS "Código proveedor", "Produto", "Precio";
COLSIZES 70, 300, 140;
JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT;
PICTURES , , "@E 9,999,999.99" LINES NOBORDER FASTEDIT
oLbx:CreateFromCode()
ACTIVATE DIALOG oDlg1 CENTERED valid lSalir
if lsalir
SELE PROVE
oBrw:Seek( "" )
oBrw:refresh()
PROVE->(DBGOTOP())
oBrw:SetFocus()
endif[/color]
RETURN nil
¿En este caso concreto cómo se llamaría a la función, por ejemplo proveedores()?
Gracias