Ver Mensaje Individual
  #6  
Antiguo 04-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
ingabraham,

Cita:
Empezado por ingabraham
La caja registradora tiene un cable como el del telefono, donde va conectada, al pc o a una impresora de colillitas.
Cita:
Empezado por newtron
Esa secuencia de escape depende de cada impresora pero suele funcionar este: 27 112 0 20 100
Cita:
Empezado por ingabraham
¿Como los envio desde delphi?
Voy a asumir varias premisas:

1- Impresora de Colillitas = Impresora Fiscal
2- La Impresora Fiscal se conecta al PC vía Puerto Serial 1.
3- La Impresora funciona a 11500 Bps.
4- No Existe un Comando Específico de la Impresora Fiscal para la Apertura de la Caja Registradora, por tanto se requiere una Secuencia X.
5- La Interfaz de Conexión de la Caja Registradora con el PC es Serial.

En base a las premisas anteriores revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function OpenBox(COMSerial : Byte) : Boolean;
var
   HCom : THandle;
   Buffer : Array[0..4] of Byte;
   CommDCB : Array[0..255] of char;
   ComPort : String;
   BytesWrites : LongWord;
   PDCB : _DCB;

begin

   COMPort := '\\.\COM' + IntToStr(COMSerial);

   HCom := CreateFile(PChar(COMPort), GENERIC_READ OR GENERIC_WRITE, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

   if HCom <> INVALID_HANDLE_VALUE then
   begin

      Buffer[0] := 27;
      Buffer[1] := 112;
      Buffer[2] := 0;
      Buffer[3] := 20;
      Buffer[4] := 100;

      CommDCB := 'baud=115200 parity=n data=8 stop=1 xon=off odsr=off octs=off dtr=off rts=off idsr=off';
      BuildCommDCB(@CommDCB,PDCB);
      SetCommState(hCom,PDCB);

      if not WriteFile(HCom, Buffer, 5, BytesWrites, nil) then
      begin
         ShowMessage(SysErrorMessage(GetLastError));
         Result := False;
         Exit;
      end;

      If BytesWrites <> 5 then
      begin
         MessageDlg('Error en Transmision Serial', mtInformation, [mbOK], 0);
         Result := False;
         Exit;
      end;

   end
   else
   begin
      MessageDlg('El Puerto de Comunicacion Serial No Esta Habilitado en Windows', mtInformation, [mbOK], 0);
      Result := False;
      Exit;
   end;

   Result := True;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenBox(1) then
   // Código 1
   else
   // Código 2
end;

end.
El código anterior envía la Secuencia de Apertura sugerida por newtron vía Puerto Serial 1. Haz la prueba en los siguientes casos:

1- Caja Registradora conectada directamente al PC.
2- Caja Registradora conectada al PC por medio de la Impresora Fiscal.

Te sugiero colocar las especificaciones de la Impresora Fiscal : Marca, Modelo, Interfaz de Comunicación, Tasa de Transferencia, Comandos de Comunicación Asociados a la Caja Registradora, Cualquier otro dato de interés para la solución del problema.

Cita:
Empezado por newtron
Yo mando a imprimir los tickets desde mi programa.
Probablemente de forma análoga al envío de comandos de impresión de Tickets a la Impresora Fiscal, sea la forma para enviar un Comando o Secuencia de Apertura a la Caja Registradora, te sugiero verificarlo.

Espero sea útil

Nelson.
Responder Con Cita