Código: Selecionar todos
#include 'minigui.ch'
#include 'TABELAS.ch'
#include 'TECLAS.ch'
PROCEDURE ControleTwoPlacas
Public Nuevo := .F.
Public Quant := 1
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 750 ;
HEIGHT 500 ;
TITLE 'Estoque de Placas' ;
MODAL ;
FONT 'ARIAL' SIZE 10 ;
ON INIT ( AbreTab2(), AbreTab1() ) ;
ON RELEASE CerrarTabelas()
DEFINE TAB Tab_1 ;
AT 02,05 ;
WIDTH 295 ;
HEIGHT 469 ;
VALUE 1 ;
TOOLTIP 'Tab Control'
PAGE '&Situacao > 5'
@ 80,10 BROWSE Browse_1 ;
WIDTH 270 ;
HEIGHT 360 ;
HEADERS { 'Numero', 'Tamanho', 'Aquisicao', 'Material' } ;
WIDTHS { 70,120,100,120 } ;
WORKAREA Placas ;
FIELDS { 'Placas->Numero', 'Placas->Tamanho', 'Placas->DataAqui', 'Placas->Material' } ;
ON CHANGE AtualizarBrowse_1() ;
ON DBLCLICK ( AtivarBrowse_1() , If ( ! BloquearRegistro() , DesativarBrowse_1() , Nil ) )
@ 30, 3 BUTTON PRIMEIRO_B1 ;
PICTURE 'Primeiro2' ;
ACTION ( RegBrowse_1(), dBGoTop(), Win_1.Browse_1.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Primeiro'
@ 30, 75 BUTTON ANTERIOR_B1 ;
PICTURE 'Anterior2' ;
ACTION ( RegBrowse_1(), dBSkip ( -1 ) , Win_1.Browse_1.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Anterior'
@ 30,147 BUTTON SEGUINTE_B1 ;
PICTURE 'Seguinte' ;
ACTION ( RegBrowse_1(), dBSkip (1) , if ( Eof() , DbGoBottom() , Nil ) , Win_1.Browse_1.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Seguinte'
@ 30,219 BUTTON ULTIMO_B1 ;
PICTURE 'Ultimo2' ;
ACTION ( RegBrowse_1(), dBGoBottom () , Win_1.Browse_1.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Ultimo'
@ 30,298 BUTTON BUSCAR_B1 ;
PICTURE 'Buscar2' ;
ACTION Buscar() ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Buscar'
@ 30,371 BUTTON NOVO_B1 ;
PICTURE 'Novo' ;
ACTION ( dBGoBottom () , Win_1.Browse_1.Value := RecNo(), Nuevo := .T. , Nuevo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Novo'
@ 30,444 BUTTON EDITAR_B1 ;
PICTURE 'Editar2' ;
ACTION If ( BloquearRegistro() , AtivarBrowse_1() , Nil ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Editar'
@ 30,517 BUTTON ELIMINAR_B1 ;
PICTURE 'Eliminar' ;
ACTION Eliminar() ;
WIDTH 70 HEIGHT 40 TOOLTIP 'E&liminar'
@ 30,663 BUTTON VOLTAR_B1 ;
PICTURE 'VOLTAR' ;
ACTION Win_1.release ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Voltar'
@ 80,298 FRAME FRAME_1 ;
WIDTH 435 ;
HEIGHT 300
@ 96 , 310 LABEL LABEL_b1_1 ;
VALUE 'Numero:' ;
WIDTH 80
@ 96 , 380 TEXTBOX Control_b1_1 ;
WIDTH 75 ;
NUMERIC ;
MAXLENGTH 6
@ 126, 310 LABEL LABEL_b1_2 ;
VALUE 'Quantia:' ;
WIDTH 80
@ 126, 380 SPINNER Control_b1_2 ;
RANGE 1,99 ;
VALUE 1 ;
WIDTH 80 ;
TOOLTIP 'Range 1,65000'
@ 156 , 310 LABEL LABEL_b1_3 ;
VALUE 'Aquisicao:' ;
WIDTH 80
@ 156 , 380 DATEPICKER Control_b1_3
@ 186 , 310 LABEL LABEL_b1_4 ;
VALUE 'Tamanho:' ;
WIDTH 80
@ 186 , 380 TEXTBOX Control_b1_4 ;
MAXLENGTH 15
@ 216, 310 LABEL LABEL_b1_5 ;
VALUE 'Material:' ;
WIDTH 80
@ 216, 380 TEXTBOX Control_b1_5 ;
MAXLENGTH 15
@ 216 , 510 LABEL LABEL_b1_6 ;
VALUE 'Fabricante:' ;
WIDTH 80
@ 216 , 590 TEXTBOX Control_b1_6 ;
MAXLENGTH 25
@ 246, 510 LABEL LABEL_b1_7 VALUE 'Tipo:' WIDTH 80
@ 246, 590 COMBOBOX Control_b1_7 ;
ITEMS { 'Locacao', 'Vendas'};
VALUE 1
@ 276, 510 LABEL LABEL_b1_8 VALUE 'Situacao:' WIDTH 80
@ 276, 590 COMBOBOX Control_b1_8 ;
ITEMS { 'Nova','Boa','Media','Ruim','Perda' };
VALUE 1
@ 396,350 BUTTON GRAVAR_B1 ;
CAPTION '&Gravar' ;
ACTION Acert_Ed_Browse_1()
@ 396,455 BUTTON CANCELAR_B1 ;
CAPTION 'Cancela&r' ;
ACTION Canc_Ed_Browse_1()
DesativarBrowse_1()
END PAGE
PAGE '&Situacao = 5'
@ 80,10 BROWSE Browse_2 ;
WIDTH 270 ;
HEIGHT 360 ;
HEADERS { 'Numero', 'Aquisicao', 'Tamanho', 'Material' } ;
WIDTHS { 70,100,120,120 } ;
WORKAREA Placas ;
FIELDS { 'Placas->Numero', 'Placas->DataAqui', 'Placas->Tamanho', 'Placas->Material' } ;
ON CHANGE AtualizarBrowse_2() ;
ON DBLCLICK ( AtivarBrowse_2() , If ( ! BloquearRegistro() , DesativarBrowse_2() , Nil ) )
@ 30, 3 BUTTON PRIMEIRO_B2 ;
PICTURE 'Primeiro2' ;
ACTION ( RegBrowse_2(), dBGoTop(), Win_1.Browse_2.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Primeiro'
@ 30, 75 BUTTON ANTERIOR_B2 ;
PICTURE 'Anterior2' ;
ACTION ( RegBrowse_2(), dBSkip ( -1 ) , Win_1.Browse_2.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Anterior'
@ 30,147 BUTTON SEGUINTE_B2 ;
PICTURE 'Seguinte' ;
ACTION ( RegBrowse_2(), dBSkip (1) , if ( Eof() , DbGoBottom() , Nil ) , Win_1.Browse_2.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Seguinte'
@ 30,219 BUTTON ULTIMO_B2 ;
PICTURE 'Ultimo2' ;
ACTION ( RegBrowse_2(), dBGoBottom () , Win_1.Browse_2.Value := RecNo() ) ;
WIDTH 70 HEIGHT 40 TOOLTIP '&Ultimo'
@ 80,298 FRAME FRAME_2 ;
WIDTH 435 ;
HEIGHT 300
@ 396,350 BUTTON GRAVAR_B2 ;
CAPTION '&Gravar' ;
ACTION Acert_Ed_Browse_2()
@ 396,455 BUTTON CANCELAR_B2 ;
CAPTION 'Cancela&r' ;
ACTION Canc_Ed_Browse_2()
DesativarBrowse_2()
END PAGE
END TAB
END WINDOW
CENTER WINDOW Win_1
ACTIVATE WINDOW Win_1
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE CerrarTabelas
*------------------------------------------------------------------------------*
Close Placas
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtivarBrowse_1
*------------------------------------------------------------------------------*
Win_1.Browse_1.Enabled := .F.
Win_1.Browse_2.Enabled := .T.
Win_1.Control_b1_1.Enabled := .F.
Win_1.Control_b1_2.Enabled := IIf(Nuevo == .T.,.T.,.F.)
Win_1.Control_b1_3.Enabled := .T.
Win_1.Control_b1_4.Enabled := .T.
Win_1.Control_b1_5.Enabled := .T.
Win_1.Control_b1_6.Enabled := .T.
Win_1.Control_b1_7.Enabled := .T.
Win_1.Control_b1_8.Enabled := .T.
Win_1.Gravar_b1.Enabled := .T.
Win_1.Cancelar_b1.Enabled := .T.
Win_1.Control_b1_1.SetFocus
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE DesativarBrowse_1
*------------------------------------------------------------------------------*
Win_1.Browse_1.Enabled := .T.
Win_1.Control_b1_1.Enabled := .F.
Win_1.Control_b1_2.Enabled := .F.
Win_1.Control_b1_3.Enabled := .F.
Win_1.Control_b1_4.Enabled := .F.
Win_1.Control_b1_5.Enabled := .F.
Win_1.Control_b1_6.Enabled := .F.
Win_1.Control_b1_7.Enabled := .F.
Win_1.Control_b1_8.Enabled := .F.
Win_1.Gravar_b1.Enabled := .F.
Win_1.Cancelar_b1.Enabled := .F.
Win_1.Browse_1.SetFocus
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtivarBrowse_2
*------------------------------------------------------------------------------*
Win_1.Browse_2.Enabled := .F.
Win_1.Browse_1.Enabled := .T.
Win_1.Gravar_b2.Enabled := .T.
Win_1.Cancelar_b2.Enabled := .T.
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE DesativarBrowse_2
*------------------------------------------------------------------------------*
Win_1.Browse_2.Enabled := .T.
Win_1.Gravar_b2.Enabled := .F.
Win_1.Cancelar_b2.Enabled := .F.
Win_1.Browse_2.SetFocus
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE Canc_Ed_Browse_1()
*------------------------------------------------------------------------------*
DesativarBrowse_1()
AtualizarBrowse_1()
UNLOCK
Nuevo := .F.
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE Canc_Ed_Browse_2()
*------------------------------------------------------------------------------*
DesativarBrowse_2()
AtualizarBrowse_2()
UNLOCK
Nuevo := .F.
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE Acert_Ed_Browse_1()
*------------------------------------------------------------------------------*
DesativarBrowse_1()
For i:= 1 to Quant
If Nuevo == .T.
Placas->(DbAppend())
EndIf
Placas->Numero := Win_1.Control_b1_1.Value
Quant := Win_1.Control_b1_2.Value
Placas->Dataaqui := Win_1.Control_b1_3.Value
Placas->Tamanho := Win_1.Control_b1_4.Value
Placas->Material := Win_1.Control_b1_5.Value
Placas->Fabrican := Win_1.Control_b1_6.Value
Placas->Finalida := Win_1.Control_b1_7.Value
Placas->Situacao := Win_1.Control_b1_8.Value
nNumero := Win_1.Control_b1_1.Value
nNumero += 1
Win_1.Control_b1_1.Value := nNumero
Next
Win_1.Browse_1.Refresh
If Nuevo == .T.
Win_1.Browse_1.Value := Placas->(RecNo())
Nuevo := .F.
EndIf
UNLOCK
RETURN
STATIC PROCEDURE Acert_Ed_Browse_2()
RETURN
*------------------------------------------------------------------------------*
*------------------------------------------------------------------------------*
STATIC PROCEDURE Nuevo()
*------------------------------------------------------------------------------*
nNumero := 0
nNumero := Placas->Numero +1
Win_1.Control_b1_1.Value := nNumero
Win_1.Control_b1_2.Value := 1
Win_1.Control_b1_3.Value := Date()
Win_1.Control_b1_4.Value := ''
Win_1.Control_b1_5.Value := ''
Win_1.Control_b1_6.Value := ''
Win_1.Control_b1_7.Value := 0
Win_1.Control_b1_8.Value := 0
AtivarBrowse_1()
RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtualizarBrowse_1()
*------------------------------------------------------------------------------*
RegBrowse_1()
Win_1.Control_b1_1.Value := Placas->Numero
Win_1.Control_b1_2.Value := Quant
Win_1.Control_b1_3.Value := Placas->Dataaqui
Win_1.Control_b1_4.Value := Placas->Tamanho
Win_1.Control_b1_5.Value := Placas->Material
Win_1.Control_b1_6.Value := Placas->Fabrican
Win_1.Control_b1_7.Value := Placas->Finalida
Win_1.Control_b1_8.Value := Placas->Situacao
Return
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtualizarBrowse_2()
*------------------------------------------------------------------------------*
RegBrowse_2()
Return
*------------------------------------------------------------------------------*
Static Function BloquearRegistro()
*------------------------------------------------------------------------------*
Local RetVal
If Placas->(RLock())
RetVal := .t.
Else
MsgExclamation ('El Registro Esta Siendo Editado Por Otro Usuario. Reintente Mas Tarde')
RetVal := .f.
EndIf
Return RetVal
*------------------------------------------------------------------------------*
Static Procedure Eliminar
*------------------------------------------------------------------------------*
If MsgYesNo ( 'Esta Seguro')
If BloquearRegistro()
Placas->(dbdelete())
Placas->(dBSkip(-1))
Win_1.Browse_1.Refresh
Win_1.Browse_1.Value := Placas->(RecNo())
AtualizarBrowse_1()
EndIf
EndIf
Return
*------------------------------------------------------------------------------*
Static Procedure Buscar
*------------------------------------------------------------------------------*
Local Buscar
* Buscar := Upper ( AllTrim ( InputBox( 'Coloque Numero para Buscar:' , 'Buscando' ) ) )
Buscar := VAL( AllTrim ( InputBox( 'Coloque Numero para Buscar:' , 'Buscando' ) ) )
If .Not. Empty(Buscar)
If Placas->(DbSeek(Buscar))
Win_1.Browse_1.Value := Placas->(RecNo())
Else
MsgExclamation('Registro NÆo Encontrado')
EndIf
EndIf
Return
STATIC PROCEDURE AbreTab1
IF SELECT( "PLACAS") != 0
Placas->( DBCLOSEAREA() )
ENDIF
IF SELECT( "PLACAS") = 0
IF !AbreDBf( { pTAB_PLACAS } )
DBCLOSEALL(); RETURN
ENDIF
ENDIF
SELECT Placas
DBSETFILTER( { || SITUACAO < 5 }, "SITUACAO < 5 " )
DBGOTOP()
DBSETORDER( 1 )
Win_1.Browse_1.Value := Placas->(RecNo())
RETURN
STATIC PROCEDURE AbreTab2
IF SELECT( "PLACAS") != 0
Placas->( DBCLOSEAREA() )
ENDIF
IF SELECT( "PLACAS") = 0
IF !AbreDBf( { pTAB_PLACAS } )
DBCLOSEALL(); RETURN
ENDIF
ENDIF
SELECT Placas
DBSETFILTER( { || SITUACAO = 5 }, "SITUACAO = 5 " )
DBGOTOP()
DBSETORDER( 1 )
Win_1.Browse_2.Value := Placas->(RecNo())
RETURN
*------------------------------------------------------------------------------*
Static Procedure RegBrowse_1()
*------------------------------------------------------------------------------*
Local RegBrowse1
RegBrowse1 := Placas->(RecNo())
Select Placas
DBSETFILTER( { || SITUACAO < 5 }, "SITUACAO < 5 " )
DBSETORDER( 1 )
Placas->(DbGoTo(RegBrowse1))
Return
*------------------------------------------------------------------------------*
Static Procedure RegBrowse_2()
*------------------------------------------------------------------------------*
Local RegBrowse2
RegBrowse2 := Placas->(RecNo())
Select Placas
DBSETFILTER( { || SITUACAO = 5 }, "SITUACAO = 5 " )
DBSETORDER( 1 )
Placas->(DbGoTo(RegBrowse2))
Return
Ate o momento eu consegui abrir um DBF usando o DbSetFilter() utilizando o Define Tab o problema agora é anipular o mesmo pois quando vc sai de uma pagina para outra a segunda pagina não esta atualizada.
Obs. Se vc tiver outra ideia de como manupular dois DBFs ou o memo usando o DBSetFilter() sem ter que abrir varias janelas com o Define Window, Por favor me da uma dica.