Antonio Linares wrote:Jairo,
Muéstranos el código de cómo lo estás haciendo y lo revisamos
Gracias por tu colaboracion
//Control de entradas Serviaire
#include "FiveWin.ch"
static oWnd, oBrush
main()
//----------------------------------------------------------------------------//
function Main()
local oBrush
local oIco, oBar
*
SET DELETED ON // para que no aparezcan los registros que borras !!!
*
SET 3DLOOK ON
DEFINE BRUSH oBrush STYLE BRICKS
DEFINE ICON oIco FILE "c:\FWH\icons\car.ico"
DEFINE WINDOW oWnd FROM 1, 1 TO 22, 75 ;
TITLE "Control de servicios Serviaire Ltda" ;
MENU BuildMenu() ;
COLOR "W+/B" BRUSH oBrush ;
ICON oIco
SET MESSAGE OF oWnd ;
TO FWVERSION + ", " + FWCOPYRIGHT CENTERED KEYBOARD
ACTIVATE WINDOW oWnd
return nil
//----------------------------------------------------------------------------//
function BuildMenu()
local oMenu
MENU oMenu
MENUITEM "&Informacion"
MENU
MENUITEM "&Acerca de..." ;
ACTION MsgInfo( "Este trabajo esta escrito en FiveWin ";
+CRLF + FWCOPYRIGHT ) ;
MESSAGE "Informacion acerca de esta aplicacion"
SEPARATOR
MENUITEM "&Salir..." ;
ACTION If( MsgYesNo( "Want to end ?" ),oWnd:End(),) ;
MESSAGE "Salir de la aplicacion"
ENDMENU
MENUITEM "&Archivos"
MENU
MENUITEM "&Entradas..." ;
ACTION Entradas2() ;
MESSAGE "Control de entradas"
MENUITEM "&Buscar" ;
ACTION Busqueda() ;
MESSAGE "Busqueda por placa y por # OT"
ENDMENU
MENUITEM "&Utils"
MENU
MENUITEM "&Calculator..." ;
ACTION WinExec( "Calc" ) ;
MESSAGE "Run Windows calculator"
MENUITEM "C&alendar..." ;
ACTION WinExec( "Calendar" ) ;
MESSAGE "Run Windows calendar"
MENUITEM "&Some fun..." ;
ACTION WinExec( "Sol" ) ;
MESSAGE "Play a game..."
ENDMENU
ENDMENU
return oMenu
//----------------------------------------------------------------------------//
function Entradas2()
local oDlg
local cPlaca
local cFecha
local cEmpresa
local cNombre
local cApellido
local cTel_Fijo
local cTel_Mobil
local cMarca
local cColorr
local cLinea
local cOt
local cIngreso
cPlaca :=space(9)
cFecha :=date()
cEmpresa :=space(36)
cNombre :=space(15)
cMarca :=cApellido:=space(15)
cTel_Fijo :=space(9)
cTel_Mobil :=space(11)
cColorr :=space(10)
cLinea :=space(18)
cOt :=space(7)
cIngreso :=space(15)
cRegis :=space(15)
aItems := {" ","A/C Nuevo","Servicio","Garantia"}
if ! File( "clientes.dbf" )
DbCreate( "Clientes.dbf", { { "Placa", "C", 9, 0 },;
{ "Fecha", "D", 12, 0 },;
{ "Empresa", "C", 25, 0 },;
{ "Nombre", "C", 15, 0 },;
{ "Apellido", "C", 15, 0 },;
{ "Tel_Fijo", "C", 9, 0 },;
{ "Tel_Mobil", "C", 11, 0 },;
{ "Marca", "C", 15, 0 },;
{ "Colorr", "C", 10, 0 },;
{ "Linea", "C", 18, 0 },;
{ "Ot", "C", 7, 0 },;
{ "Ingreso", "C", 15, 0 }})
endif
USE Clientes Alias Clientes NEW// EXCLUSIVE
INDEX ON Clientes->Placa TO Clipla
SET INDEX TO Clipla
GO TOP
SET DATE FRENCH
cRegis :=Recno()
DEFINE DIALOG oDlg RESOURCE "clientes" TITLE "Entrada Servicios Serviaire"
REDEFINE GET getcregis VAR cRegis ID 390 OF oDlg
REDEFINE GET getPlaca VAR cPlaca ID 110 OF oDlg UPDATE PICTURE"!!!999";
VALID (Clientes->Placa:=cPlaca,.T.)
REDEFINE GET getFecha VAR cFecha ID 120 OF oDlg UPDATE ;
VALID (Clientes->Fecha:=cFecha,.T.)
REDEFINE GET getEmpresa VAR cEmpresa ID 130 OF oDlg UPDATE ;
VALID (Clientes->Empresa:=cEmpresa,.T.)
REDEFINE GET getNombre VAR cNombre ID 140 OF oDlg UPDATE ;
VALID (Clientes->Nombre:=cNombre,.T.)
REDEFINE GET getApellido VAR cApellido ID 150 OF oDlg UPDATE ;
VALID (Clientes->Apellido:=cApellido,.T.)
REDEFINE GEt getTel_Fijo VAR cTel_Fijo ID 160 OF oDlg UPDATE ;
VALID (Clientes->Tel_Fijo:=cTel_fijo,.T.)
REDEFINE GET getTel_Mobil VAR cTel_Mobil ID 170 OF oDlg UPDATE ;
VALID (Clientes->Tel_Mobil:=cTel_Mobil,.T.)
REDEFINE GET getmarca VAR cMarca ID 180 OF oDlg UPDATE ;
VALID (Clientes->Marca:=cMarca,.T.)
REDEFINE GET getColorr VAR cColorr ID 190 OF oDlg UPDATE ;
VALID (Clientes->Colorr:=cColorr,.T.)
REDEFINE GET getLinea VAR cLinea ID 200 OF oDlg UPDATE ;
VALID (Clientes->Linea:=cLinea,.T.)
REDEFINE GET getOt VAR cOt ID 210 OF oDlg UPDATE ;
VALID (Clientes->Ot:=cOt,.T.)
**** ojo al tratamiento de este combobox
IF EMPTY(cIngreso) .OR. ; // si el campo esta vacío o
ASCAN(aItems,cIngreso) == 0 // el contenido no consta en elArray de
cIngreso := aItems[1] // opciones
ENDIF
REDEFINE COMBOBOX getIngreso VAR cIngreso ;
ITEMS aItems ID 117 of oDlg VALID (Clientes->Ingreso:=cIngreso,.T.)
REDEFINE BUTTON oBt1 ID 112 OF oDlg ;
ACTION (IF ( !BOF(),DBGOTOP(),),; // |<--
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())
REDEFINE BUTTON oBt1 ID 113 OF oDlg ; // <--
ACTION ( DbSkip( -1 ),;
If( BoF(), MsgInfo( "Inicio del Archivo" ),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())
REDEFINE BUTTON oBt1 ID 114 OF oDlg ;//-->
ACTION ( DbSkip( 1 ),;
If( EoF(), DbSkip(1),),;
If( EoF(), MsgInfo( "Fin del Archivo" ),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh())
REDEFINE BUTTON oBt1 ID 115 OF oDlg ; //-->|
ACTION ( IF (!EOF(),DBGOBOTTOM(),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh() )
REDEFINE BUTTON oBt1 ID 223 OF oDlg ; //-->||
ACTION (DBGOBOTTOM(),;
If(!EOF(), DbSkip(1),),;
getPlaca:cText := Clientes->Placa,;
getFecha:cText := Clientes->Fecha,;
getEmpresa:cText := Clientes->Empresa,;
getNombre:cText := Clientes->Nombre,;
getApellido:cText := Clientes->Apellido,;
getTel_Fijo:cText := Clientes->Tel_Fijo,;
getTel_Mobil:cText := Clientes->Tel_Mobil,;
getMarca:cText := Clientes->Marca,;
getColorr:cText := Clientes->Colorr,;
getLinea:cText := Clientes->Linea,;
getOt:cText := Clientes->Ot,;
cIngreso :=IIF(EMPTY(Clientes->Ingreso),aItems[1],Clientes->Ingreso),;
getIngreso:refresh() )
REDEFINE BUTTON oBt1 ID 116 OF oDlg ACTION oDlg:End()
REDEFINE BUTTON oBt1 ID 118 OF oDlg ACTION AgregarNuevo(cPlaca)
REDEFINE BUTTON oBt1 ID 111 OF oDlg ACTION BorraRegistro() //Aqui puedes
//recargar las variables
ACTIVATE DIALOG oDlg on init (IgualaVariable(),BloqueaGets())
USE
return NIL
FUNCTION AgregarNuevo()
cPlaca :=Clientes->Placa
SET DELETED OFF
IF MsgYesNo("Agregar Nueva Entrada","Decida")
SELE Clientes
GO TOP
IF DBSEEK(cPlaca)
IF DELETED()
RECALL
ENDIF
ELSE
APPEND BLANK
Clientes->Placa := cPlaca
ENDIF
ActivaGets()
ENDIF
SET DELETED ON
RETURN NIL
FUNCTION BorraRegistro()
LOCAL nReg := Recno() -1
IF MsgYesNo("Borrar Registro","Confirme")
DELETE
ENDIF
DBGOTO( nReg ) // para colocarse un registro previo al que se ha borrado
// Aquí es otro lugar que puedes volver a refrescar los GET
RETURN NIL
FUNCTION BloqueaGets()
getPlaca:disable()
getFecha:disable()
getEmpresa:disable()
getNombre:disable()
getApellido:disable()
getTel_Fijo:disable()
getTel_Mobil:disable()
getmarca:disable()
getColorr:disable()
getLinea:disable()
getOt:disable()
getIngreso:disable()
RETURN NIL
FUNCTION ActivaGets()
getPlaca:enable()
getFecha:enable()
getEmpresa:enable()
getNombre:enable()
getApellido:enable()
getTel_Fijo:enable()
getTel_Mobil:enable()
getmarca:enable()
getColorr:enable()
getLinea:enable()
getOt:enable()
getIngreso:enable()
RETURN NIL
FUNCTION IgualaVariable()
cPlaca := Clientes->Placa
cFecha := Clientes->Fecha
cEmpresa := Clientes->Empresa
cNombre := Clientes->Nombre
cApellido := Clientes->Apellido
cTel_Fijo := Clientes->Tel_Fijo
cTel_Mobil:= Clientes->Tel_Mobil
cMarca := Clientes->Marca
cColorr := Clientes->Colorr
cLinea := Clientes->Linea
cOt := Clientes->Ot
cIngreso := Clientes->Ingreso
RETURN NIL
//----------------------------------------------------------------------------//
FUNCTION Busqueda()
use clientes
cPlaca := Clientes->Placa
DEFINE DIALOG oDlg RESOURCE "Busqueda" TITLE "Busqueda por Placa y OT"
IF EMPTY(cPlaca) .OR. ; // si el campo esta vacío o
ASCAN(cPlaca) == 0 // el contenido no consta en elArray de opciones
ENDIF
REDEFINE GET getPlaca VAR cPlaca ;
ID 390 of oDlg UPDATE PICTURE"!!!999" VALID( busq(cPlaca))
REDEFINE BUTTON oBt1 ID 4001 OF oDlg ACTION busq(cPlaca)
ACTIVATE DIALOG oDlg
function busq(cPlaca)
USE Clientes Alias Clientes
INDEX ON Clientes->Placa TO Clipla
SET INDEX TO Clipla
GO TOP
cPlaca :=Clientes->Placa
seek(cPlaca)
if found()
entradas2(cPlaca)
endif
return found()
La idea es que con un pequeño dialogo busque por placa o por ot y al ejecutar enter se abra el dialogo entradas2() mostrando el registro solicitado
Acepto todo tipo de criticas y sugerencias que me fortalezcan en FWH
Cordialmente
Jairo