Curso de Software de Ventas Pt 40 Ventana de Configuración usando archivos INI

En esta sección vamos a crear la ventana de configuración para guardar las configuraciones de nuestra aplicación estos datos se guardan en un archivo INI

Colabora y Suscribete a mi canal de   

En este archivos guardaremos el tipo de impresora que usaremos para la facturación, para los informes y para el cuadre de caja ya que podremos querer imprimir la factura en una impresora de ticket y los informes en un impresora normal.

Esta es la ventana de configuración de mi software:

A medida que vayamos completando el software iremos implementando configuraciones en nuestra ventana.

Por ahora la ventana debe tener los siguientes controles:

El primer paso es crear un archivo llamado configuracion.ini en la carpeta de nuestro proyecto.

El siguiente paso es crear un variable a nivel de modulos llamada Path_Archivo_Ini de tipo String en mi caso he puesto esta variable en el modulo mod_Conexion

También creamos 3 variables para guardar las tres configuraciones que vamos a tener para la impresora que vamos a utilizar:

Global Path_Archivo_Ini As String

'-------------- Variables Configuracion ---------------

Global glob_conf_ImpreFacturacion As String
Global glob_conf_ImpreInformes As String
Global glob_conf_ImpreCierreCaja As String

Modificamos el procedimiento de UbicacionDb y agregamos la linea que le va a pasar la ubicación del archivo INI

Sub UbicacionDb()
   
    DireccionDb = GLeerArchivo(App.Path & "\url.txt")
    Path_Archivo_Ini = App.Path & "\configuracion.ini"
    
End Sub

Para poder Leer y escribir archivos ini debemos utilizar la API de Windows y para eso debemos ingresar el siguiente código en el  modulo mod_Funciones

Función api que recupera un valor-dato de un archivo Ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString As String, _
    ByVal nSize As Long, _
    ByVal lpFileName As String) As Long
  
'Función api que Escribe un valor - dato en un archivo Ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpString As String, _
    ByVal lpFileName As String) As Long


'Lee un dato _-----------------------------
'Recibe la ruta del archivo, la clave a leer y _
 el valor por defecto en caso de que la Key no exista
Public Function Leer_Ini(Path_INI As String, key As String, Default As Variant) As String
  
Dim bufer As String * 256
Dim Len_Value As Long
  
        Len_Value = GetPrivateProfileString(APPLICATION, _
                                         key, _
                                         Default, _
                                         bufer, _
                                         Len(bufer), _
                                         Path_INI)
          
        Leer_Ini = Left$(bufer, Len_Value)
  
End Function
  
'Escribe un dato en el INI _
-----------------------------
'Recibe la ruta del archivo, La clave a escribir y el valor a añadir en dicha clave
  
Public Function Grabar_Ini(Path_INI As String, key As String, Valor As Variant) As String
  
    WritePrivateProfileString APPLICATION, _
                                         key, _
                                         Valor, _
                                         Path_INI
  
End Function

En el código anterior se llaman a dos funciones de la API de windows GetPrivateProfileString y WritePrivateProfileString  y se crear dos funciones personalizadas para grabar y leer el archivo INI.

El siguiente paso es crear el formulario con los siguientes controles:

cmdImpFacturacion = ComboBox

cmbImpInformes = ComboBox

cmbImpCierreCaja = ComboBox

cmdGuardar = CommandButton

cmdCerrar= CommandButton

El primer paso en el formulario es llenar los ComboBox con la lista de impresoras que tienen instaladas en su computador para eso se usa el código siguiente:

Public Function Obtener_Impresoras()
      
    Dim I As Integer
    ' recorre las impresoras del sistema y las añade a la lista
    For I = 0 To Printers.Count - 1
        cmdImpFacturacion.AddItem Printers(I).DeviceName
        cmbImpInformes.AddItem Printers(I).DeviceName
        cmbImpCierreCaja.AddItem Printers(I).DeviceName
    Next
    
    cmdImpFacturacion.ListIndex = 0
    cmbImpInformes.ListIndex = 0
    cmbImpCierreCaja.ListIndex = 0
End Function

En el codigo anterior recorremos todas las impresoras usando un For desde cero hasta Printers.Count – 1 que es el que tiene la cantidad de impresoras.

Luego se pasa el index a Printers(I).DeviceName y se obtiene el nombre de la impresora  es muy fácil hacer esta parte no tiene mucha explicación.

En esta sola función estamos llenando los 3 ComboBox

El siguiente paso es crear un procedimiento para guardar las impresoras seleccionadas en el archivo INI

Primero en el evento clic del botón guardar va el siguiente código:

Private Sub cmdGuardar_Click()
    Call GuardarConfiguracion
End Sub

Luego el procedimiento GuardarConfiguracion

Sub GuardarConfiguracion()

  Call Grabar_Ini(Path_Archivo_Ini, "ImpreFacturacion", cmdImpFacturacion.Text)
  Call Grabar_Ini(Path_Archivo_Ini, "ImpreInformes", cmbImpInformes.Text)
  Call Grabar_Ini(Path_Archivo_Ini, "ImpreCierreCaja", cmbImpCierreCaja.Text)
  

    
End Sub

Para grabar una lineas en el archivo INI se usa la función Grabar_Ini que tiene 3 parámetros: 1- la ubicación del archivo, La variable o key (no debe tener espacios ni signos) con se va a guardar el dato y el ultimo el valor que vamos a guardar. Al guardar el archivo INI se ve asi:

El siguiente paso es poner publica esa información que guardamos para que quede visible para todo el proyecto para eso usamos las variables globales que ya declaramos, para eso es el siguiente código:

'cuando se guardar se almacen en una variable global para poder accedes desde cualquier lugar del proyecto
glob_conf_ImpreFacturacion = cmdImpFacturacion.Text
glob_conf_ImpreInformes = cmbImpInformes.Text
glob_conf_ImpreCierreCaja = cmbImpCierreCaja.Text

quedando así:

Sub GuardarConfiguracion()

  Call Grabar_Ini(Path_Archivo_Ini, "ImpreFacturacion", cmdImpFacturacion.Text)
  Call Grabar_Ini(Path_Archivo_Ini, "ImpreInformes", cmbImpInformes.Text)
  Call Grabar_Ini(Path_Archivo_Ini, "ImpreCierreCaja", cmbImpCierreCaja.Text)
  
  'cuando se guardar se almacen en una variable global para poder accedes desde cualquier lugar del proyecto
  glob_conf_ImpreFacturacion = cmdImpFacturacion.Text
  glob_conf_ImpreInformes = cmbImpInformes.Text
  glob_conf_ImpreCierreCaja = cmbImpCierreCaja.Text
    
End Sub

Bueno ahora queremos que al abrir el formulario de configuración me cargue los datos que tiene el archivo INI para eso usamos el procedimiento siguiente:

Sub CargarDatosConfiguracion()
    
    cmdImpFacturacion.Text = Leer_Ini(Path_Archivo_Ini, "ImpreFacturacion", "")
    cmbImpInformes.Text = Leer_Ini(Path_Archivo_Ini, "ImpreInformes", "")
    cmbImpCierreCaja.Text = Leer_Ini(Path_Archivo_Ini, "ImpreCierreCaja", "")
    
End Sub

La función Leer_INI requiere de 3 parámetros:  el primero es la ubicación del archivo, la segunda es la variable o key que necesitamos y el ultimo es un valor predeterminado en caso de que no exista el key en el archivo.

El ultimo paso es hacer que nuestra aplicación cuando inicie cargue la información del archivo INI para que quede disponible como por ejemplo cual es la impresora que se usa para imprimir las facturas para eso debemos acceder al archivo INI cuando abre el formulario frmPrincipal.

Primero se crea la función que lee la información en el modulo mod_Consultas:

Sub CargarDatosConfiguracion()
    
    impFacturacion = Leer_Ini(Path_Archivo_Ini, "ImpreFacturacion", "")
    If impFacturacion <> "" Then
       cmdImpFacturacion.Text = impFacturacion
    End If
    
    ImpInformes = Leer_Ini(Path_Archivo_Ini, "ImpreInformes", "")
    If ImpInformes <> "" Then
       cmbImpInformes.Text = ImpInformes
    End If
    
    ImpCierreCaja = Leer_Ini(Path_Archivo_Ini, "ImpreCierreCaja", "")
    If ImpCierreCaja <> "" Then
       cmbImpCierreCaja.Text = ImpCierreCaja
    End If
    
End Sub

En este código se esta leyendo cada variable del archivo INI y guardándola en la variable globlal así cuando se necesita saber con que impresora imprimir la factura simplemente se toma la variable glob_conf_ImpreFacturaciont.

Nos falta agregar al menú este formulario, en el formulario frmPrincipal nos vamos al menú y damos clic en Opciones – Configuración si no tiene el item en el menú lo crean  como mnuConfiguracion. Si no recuerdan como pueden irse a la lección Parte 6 – Inserción de datos en la base de datos, y uso de datos Encriptados, Login

 

Y luego colocamos el código para abrir la ventana de configuración:

Private Sub mnuConfiguracion_Click()
    frmConfiguracion.Show
End Sub

 

 

Con esto ya tenemos todo listo para hacer la factura de ticket por que ya podemos escoger la impresora con la que deseamos imprimir.

 

Suscribete a Youtube

Siguenos en Twitter

Siguenos en Facebook

Total Page Visits: 20834 - Today Page Visits: 3

(1) Comment

Deja una respuesta