Access - Problemas con cajón portamonedas

 
Vista:

Problemas con cajón portamonedas

Publicado por amhuertas (6 intervenciones) el 20/06/2002 18:09:10
Estoy haciendo una aplicación en el que se generan tickets, al llegar a un determinado campo se debería abrir un cajón portamonedas pero en vez de eso se ejecuta la aplicación que abre el cajón, se queda abierta la ventana del programa MSDOS y no se abre le cajón. He puesto un retardo para la apertura del cajón y sigue pasando lo mismo.
Si me podeis ayudar os estría muy agradecido.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problemas con cajón portamonedas

Publicado por Alejandro (4142 intervenciones) el 21/04/2023 19:51:03
Es posible que el problema se deba a la forma en que estás abriendo el cajón portamonedas desde Access. En lugar de ejecutar un programa externo a través de un shell, te recomiendo que pruebes utilizando una librería de Windows llamada "WinSpool" que permite enviar comandos de control a una impresora conectada, como la que suele usarse para abrir el cajón portamonedas.

Para usar la librería WinSpool, puedes crear una función en VBA que se encargue de enviar el comando para abrir el cajón. Aquí te dejo un ejemplo de cómo podrías hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Public Function AbrirCajonPortamonedas() As Boolean
    Dim lRet As Long
    Dim hPrinter As Long
    Dim DocInfo As DOC_INFO_1
    Dim Command As String
    Dim BytesWritten As Long
 
    Command = Chr(&H1B) & Chr(&H70) & Chr(&H0) & Chr(&H50) & Chr(&H50)
    DocInfo.pDocName = "AbrirCajonPortamonedas"
    DocInfo.pOutputFile = vbNullString
    DocInfo.pDatatype = vbNullString
 
    lRet = OpenPrinter(Printer.DeviceName, hPrinter, 0&)
    If lRet = 0 Then
        AbrirCajonPortamonedas = False
        Exit Function
    End If
 
    lRet = StartDocPrinter(hPrinter, 1, DocInfo)
    If lRet = 0 Then
        ClosePrinter hPrinter
        AbrirCajonPortamonedas = False
        Exit Function
    End If
 
    lRet = StartPagePrinter(hPrinter)
    If lRet = 0 Then
        EndDocPrinter hPrinter
        ClosePrinter hPrinter
        AbrirCajonPortamonedas = False
        Exit Function
    End If
 
    lRet = WritePrinter(hPrinter, ByVal StrPtr(Command), Len(Command), BytesWritten)
    If lRet = 0 Then
        EndPagePrinter hPrinter
        EndDocPrinter hPrinter
        ClosePrinter hPrinter
        AbrirCajonPortamonedas = False
        Exit Function
    End If
 
    lRet = EndPagePrinter(hPrinter)
    lRet = EndDocPrinter(hPrinter)
    lRet = ClosePrinter(hPrinter)
 
    AbrirCajonPortamonedas = True
End Function

En el código anterior se utiliza la función "OpenPrinter" para abrir la impresora que está conectada al cajón portamonedas, y luego se envía un comando de control para abrir el cajón utilizando la función "WritePrinter". Si la función devuelve "True", es porque se pudo enviar el comando correctamente y debería abrirse el cajón.

Para llamar a esta función desde tu formulario, puedes agregar un botón y en su evento "Al hacer clic" llamar a la función "AbrirCajonPortamonedas":

1
2
3
4
5
6
7
Private Sub cmdAbrirCajon_Click()
    If AbrirCajonPortamonedas() Then
        MsgBox "Cajón abierto correctamente.", vbInformation, "Operación completada"
    Else
        MsgBox "No se pudo abrir el cajón.", vbCritical, "Error"
    End If
End Sub

Espero que esto te ayude a solucionar tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar