Autor Tema: Controlar usuarios y cantidad de páginas impresas  (Leído 3552 veces)

Desconectado xavi

  • Administrador
  • Habitual
  • *****
  • Mensajes: 221
Controlar usuarios y cantidad de páginas impresas
« en: Noviembre 20, 2012, 01:24:01 pm »
Palabras clave: usuarios, control, impresión, copias
Autor: Búho
Extraído de: La web del Búho

Objetivo:
Controlar qué usuarios y cuantas páginas imprimen de los reportes en un entorno de Red

Responde el Búho]
Se me ocurre una idea que no sé si será factible, pero se podría intentar desarrollar.
Según creo entender en tu pregunta, (Es un supuesto) dispones de una aplicacion que corre en RED, donde existen varios puestos de trabajo y un servidor (Tu Pc) en el cual están las tablas vinculadas de la aplicacion y la impresora.
Si eso es cierto, podrías crear una tabla más vinculada que se llamara por ejemplo:
ControlImpresion

con los campos:
Nombre_Usuario_PC
Nombre_Reporte
Numero_paginas_Imprimidas

Bien. Ahora en cada reporte (En todos) deberías poner el siguiente código y en lo siguientes eventos:


Código: [Seleccionar]
Option Compare Database
Option Explicit
Dim Paginas As Integer

Private Sub Report_Page()
 Paginas = Paginas + 1
End Sub
Private Sub Report_Close()
 'Aqui llamamos a una funcion que rellene los datos para control
 EscribeDatosReportes(Paginas, Me.Name)
End Sub


En un modulo crea la función:

Código: [Seleccionar]
Function EscribeDatosReporte(NumPag as Integer, NombreRepor As String)
 'Ahora debes abrir el recordset de la tabla ControlImpresion
 Dim SqlF As String
 Dim RstF As Recordset
 SqlF = "Select * from ControlImpresion"
 Set RstF = CurrentDb.OpenRecordset(SqlF, dbOpenDynaset)
 With RstF
        .AddNew
        !Nombre_Reporte = NombreRepor
        !Numero_paginas_Imprimidas= NumPag
        !Nombre_Usuario_PC= DamePcUsuario()
       .Update
End With
RstF.Close
End Function

De esta forma en tu tabla siempre tendrás constancia de lo que imprimen. He supuesto que los reportes se imprimen todos, es decir, que no hay ninguno que se puedan ver en 'vista previa', pues de otra forma, también se desencadenarían los eventos y se escribiría en la tabla como imprimidos algo que solo se ha visualizado.
Pero creo que para empezar, es una idea que se puede desarrollar.

Y falta explicarte lo de la función DamePcUsuario(). Sería una función que leyera el ldb de la base de cada usuario.
Mas o menos esto:

Código: [Seleccionar]
Function DamePcUsuario() As String
Dim str As String
str = CurrentDb.Name '(Base de datos a consultar, esta u otra)
Dim Usuario As String
If Dir(str) <> "" Then
 str = Left(str, Len(str) - 3) & "ldb"
 Open str For Input As #1
 Usuario = Input$(36, #1)
 DamePcUsuario=Usuario
Else
 DamePcUsuario=""
End If
End Function

Nota de Xavi: Si no me equivoco, esa última función se puede sustituir por un Environ("UserName") mucho más "limpio"

Al salir, en Usuario tendrías el nombre del usuario y de la maquina. Revisa el código pues yo no le he probado. La idea es esta. Ya nos contaras que tal.