domingo, 30 de junio de 2019

Control de Clientes en Visual Foxpro


Control de Clientes 

En este sistema veremos una gran variedad de instrucciones totalmente nuevas para algunos de los programadores y para otros les estaremos refrescando la memoria de cómo realizar ciertas operaciones.


Acá mostraremos unas series de módulos de mucho interés para la realización de un sistema. Aprenderemos a como insertar, eliminar, modificar, grabar e imprimir los registros. Además de ello veremos el funcionamiento de ANCHOR , como crear un directorio, la utilización de Fontmetric el cual nos permite re-ajustar las variables de textos y las etiquetas una vez que utilizamos ANCHOR y el WindowState, este último dependiendo su valor nos dará el tamaño de la variable Fontmetric.

Al mismo tiempo les revelaremos como usar el comando Directory el cual comparará si el directorio existe o no para poder crearlo.

Lograrán ver la creación de métodos (apagar, Limpiar, Prender el cual nos ahorrará tiempo y espacio en nuestro programa. En el método apagar aprenderán a como inhabilitar  cada uno de los respectivos botones de Text y al mismo tiempo como darle color de fondo una vez que están inhabilitados.

Verán la manera de crear una table free en el evento Load del formulario y a como utilizar el comando index. Cuando se crea una table de modo free en el evento Load , no será necesario crearle el alias al  archivo.

El programa también les muestra cómo usar la aplicación Foxypreviewer  y poder generar reportes más llamativos a la hora de imprimir.  A como generar reportes PDF y a la creación de archivos de Textos.

Paso 1: En el Evento Load del formulario.

Set Safety Off
Set Talk Off
Set Scor Off
SET HELP off
SET DELETED on
SET CONFIRM on
Clear
If !File("cliente.dbf")
Create Table cliente Free(codigo Int (4) Autoinc,nombre c(30),direccion c(40),telefono c(25),ciudad c(15))
Index On codigo Tag codigo Of cliente
Else
Select cliente
SET INDEX TO cliente ORDER codigo
GO top
Endif

Observemos que cuando comparamos si el archivo cliente no existe, el programa logra crear archivo de manera libre, en el creamos el campo código de modo Int y que se auto-incremente mediante la instrucción Autoinc. 

En el evento Init del formulario.

PUBLIC sw,xcodigo,verdad,xfotprd,activo,xdir_pdf,tamano
activo=.f.
xfotprd=""
verdad=0
xcodigo=""
sw=0
thisform.apagar 
xdir_pdf=Sys(5)+Sys(2003)+"\pdf1"
IF DIRECTORY(xdir_pdf) 
  thisform.refresh
ELSE
   WAIT WINDOW  "Creando directorio..." AT 23,60 TIMEOUT 2
   mi=ALLTRIM(xdir_pdf)
   MKDIR &mi
endif 
IF thisform.WindowState =0
   tamano=FONTMETRIC(1,"ARIAL",6,"N")
ELSE
   tamano=FONTMETRIC(1,"ARIAL",8,"N")
endif   
thisform.text1.FontSize = tamano
thisform.text2.FontSize = tamano
thisform.text3.FontSize = tamano
thisform.text4.FontSize = tamano
thisform.text5.FontSize = tamano
thisform.label1.FontSize = tamano 
thisform.label2.FontSize = tamano 
thisform.label3.FontSize = tamano 
thisform.label4.FontSize = tamano 
thisform.label5.FontSize = tamano 

Crearemos los métodos apagar,prender,limpiar utilizando  las herramientas de Visual Foxpro en la parte superior en Form y presionando New Method, nos pedirá el nombre del método a crear. 

Una vez que hayamos creado el método los seleccionamos y colocamos el procedimiento a ejecutar.

Método Apagar.

thisform.text1.Enabled =.f.
thisform.text2.Enabled =.f.
thisform.text3.Enabled =.f.
thisform.text4.Enabled =.f.
thisform.text5.Enabled =.f.
thisform.text1.DisabledBackColor =RGB(255,128,0)
thisform.text2.DisabledBackColor =RGB(255,128,0)
thisform.text3.DisabledBackColor =RGB(255,128,0)
thisform.text4.DisabledBackColor =RGB(255,128,0)
thisform.text5.DisabledBackColor =RGB(255,128,0)
thisform.text1.DisabledForeColor =RGB(0,0,0)
thisform.text2.DisabledForeColor =RGB(0,0,0)
thisform.text3.DisabledForeColor =RGB(0,0,0)
thisform.text4.DisabledForeColor =RGB(0,0,0)
thisform.text5.DisabledForeColor =RGB(0,0,0)

Método Prender.

thisform.text1.Enabled =.t.
thisform.text2.Enabled =.t.
thisform.text3.Enabled =.t.
thisform.text4.Enabled =.t.
thisform.text5.Enabled =.t.

Método Limpiar.

STORE "" TO thisform.text1.Value,thisform.text2.Value,thisform.text3.Value,thisform.text4.Value,thisform.text5.Value
xcodigo=""

Crear el Container1 y agregar los Command que aparecen dentro del mismo.

Botón Agregar(Command1).

En el evento MouseLeave le agregaremos lo siguiente:
thisform.container1.command1.FontSize=8
thisform.container1.command1.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command1.FontSize=11
thisform.container1.command1.MousePointer = 15

En el evento Click.

sw=1
thisform.prender 
thisform.limpiar 
thisform.text1.SetFocus

Botón Eliminar(Command2).

En el evento MouseLeave le colocaremos lo siguiente:
thisform.container1.command2.FontSize=8
thisform.container1.command2.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command2.FontSize=11
thisform.container1.command2.MousePointer = 15

En el evento Click.

If !Empty(xcodigo)
If sw=3
mensa="Estas seguro de Eliminar Este Registro..."
op=4
op=Messagebox(mensa,op+32,"Alerta")
Do Case
Case op=6
Delete From cliente Where codigo=xcodigo
sw=0
Messagebox("Registro Eliminado")
Thisform.limpiar
Thisform.apagar
Thisform.container1.command1.SetFocus
Case op=7
Thisform.Refresh
Endcase
Endif
Endif

Botón Modificar(Command3).

En el evento MouseLeave le agregaremos lo siguiente:
thisform.container1.command3.FontSize=8
thisform.container1.command3.MousePointer = 1



En el evento MouseEnter.

thisform.container1.command3.FontSize=11
thisform.container1.command3.MousePointer = 15

En el evento Click.

If !Empty(xcodigo)
sw=2
Thisform.prender
Thisform.text1.SetFocus
Endif

Botón Grabar(Command3).

En el evento MouseLeave le agregaremos lo siguiente:

thisform.container1.command4.FontSize=8
thisform.container1.command4.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command4.FontSize=11
thisform.container1.command4.MousePointer = 15

En el evento Click.

If !Empty(Thisform.text1.Value) And !Empty(Thisform.text2.Value)
If sw=1
Wait Window "Grabando..." At 21,70 Timeout 1
sw=0
xcli=Alltrim(Thisform.text1.Value)
xdir=Alltrim(Thisform.text2.Value)
xtel=Alltrim(Thisform.text3.Value)
xciu=Alltrim(Thisform.text4.Value)
xcorreo=Alltrim(Thisform.text5.Value)
Insert Into cliente(nombre,direccion,telefono,ciudad,correo) Values(xcli,xdir,xtel,xciu,xcorreo)
xcodigo=codigo
Thisform.apagar
Thisform.container1.command1.SetFocus
Endif
If sw=2
If !Empty(xcodigo)
Wait Window "Grabando..." At 21,70 Timeout 1
sw=0
xcli=Alltrim(Thisform.text1.Value)
xdir=Alltrim(Thisform.text2.Value)
xtel=Alltrim(Thisform.text3.Value)
xciu=Alltrim(Thisform.text4.Value)
xcorreo=Alltrim(Thisform.text5.Value)
Update cliente Set nombre=xcli,direccion=xdir,telefono=xtel,ciudad=xciu,correo=xcorreo Where codigo=xcodigo
Thisform.apagar
Thisform.container1.command1.SetFocus
Endif
Endif
Endif

Botón Reporte(Command5).

En el evento MouseLeave le agregaremos lo siguiente:

thisform.container1.command5.FontSize=8
thisform.container1.command5.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command5.FontSize=11
thisform.container1.command5.MousePointer = 15

En el evento Click.

Do form rcliente

Botón Buscar(Command6).

En el evento MouseLeave le agregaremos lo siguiente:

thisform.container1.command6.FontSize=8
thisform.container1.command6.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command6.FontSize=11
thisform.container1.command6.MousePointer = 15

En el evento Click.

verdad=0
Do Form mostrar_cli
If verdad=1
verdad=0
Select cliente
Set Index To cliente Order codigo
If Seek(xcodigo)
Thisform.text1.Value =nombre
Thisform.text2.Value =direccion
Thisform.text3.Value =telefono
Thisform.text4.Value =ciudad
Thisform.text5.Value =correo
xfoto=foto
If !Empty(xfoto)
Thisform.image1.Picture =foto
Else
Thisform.image1.Picture= 'C:\USERS\FAMVAS2\DESKTOP\CLIENTE\CLIENTES_1.PNG'
Endif
sw=3
Thisform.Refresh
Endif
Endif

Botón Salir(Command7).

En el evento MouseLeave le agregaremos lo siguiente:

thisform.container1.command7.FontSize=8
thisform.container1.command7.MousePointer = 1

En el evento MouseEnter.

thisform.container1.command7.FontSize=11
thisform.container1.command7.MousePointer = 15

En el evento Click.

thisform.release()

Formulario Mostrar_cli

En la parte inicial del programa agregaremos el siguiente código:

thisform.Caption ="Listado de clientes"
thisform.list1.RowSource ="vista.codigo,nombre,direccion,telefono,ciudad"
thisform.list1.RowSourceType = 6 
thisform.list1.SelectedID(1)=.t.
thisform.list1.Requery 

Mediante estas instrucciones el programa nos mostrará en pantalla todos los clientes existentes en nuestra base de datos mediante una lista.

En el evento Keypress de la lista colocaremos:

IF nkeycode=13
   xcodigo=vista.codigo
   verdad=1
   thisform.Refresh
   thisform.Release()
endif

En el evento DbClick de la lista ubicaremos:

xcodigo=vista.codigo
verdad=1
Thisform.Refresh
Thisform.Release()

Ambos métodos ejecutan la misma acción. El primero mediante la tecla Enter y el otro presionando Doble Click.

El evento Keypress del formulario nos permite salir del modulo de mostrar_cli.

IF nkeycode=27
   verdad=0
   thisform.release
endif

Si presionamos la tecla Esc la variable verdad tomará el valor cero (0), la cual no permitirá que se muestre ningún registro dentro del formulario clientes.

Botón Foto

If !Empty(xcodigo)
activo=.F.
Do Form foto
If activo=.T.
Thisform.image1.Picture =xfotprd
Thisform.Refresh
Endif
Endif 

Formulario Foto.



En el command1 del formulario debemos colocar los siguientes pasos :

xfotprd= getfile("PNG", "Imagenes", "",1)
if !empty(xfotprd)
  thisform.image1.Picture = xfotprd
  thisform.Refresh()
endif

En el command2 asignaremos las siguientes instrucciones:

select cliente
do while !flock()
enddo
select cliente
set index to cliente order codigo
if seek(xcodigo)
  activo=.t.
  replace foto with xfotprd
endif   
unlock
thisform.release 



A continuación les dejo el link de descarga en donde encontrarás el programa completo.







1 comentarios:

  1. hola, podrias subir el link de descarga a otro sitio. No puedo descargarlo. Gracias

    ResponderEliminar