segunda-feira, 9 de junho de 2025

Integração Simples Entre Delphi e a Impressora Fiscal

Fazer uma integração simples entre Delphi e uma impressora fiscal depende do modelo e do protocolo da impressora fiscal (Ex: Elgin, Daruma, Epson, Bematech, etc.), mas de forma geral, as impressoras fiscais antigas utilizam comunicação via porta serial (COM) e comandos baseados no Protocolo Fiscal (ECF).

Abaixo está um guia passo a passo para uma integração simples, com exemplo usando comandos diretos via porta serial:

✅ 1. Verifique o modelo e instale o driver da impressora

Antes de tudo, instale o driver oficial da impressora fiscal e anote a porta COM que ela está utilizando (pode ver isso no Gerenciador de Dispositivos).

✅ 2. Comunique-se via porta serial (COM) com Delphi

Delphi pode usar a unit SerialPort ou componentes de terceiros como AsyncPro, mas vamos mostrar um exemplo simples com componente THandle para acesso direto à porta COM.

🧩 Exemplo simples usando CreateFile:

uses

Windows;

function EnviarComandoECF(const Porta, Comando: string): Boolean;

var

  hSerial: THandle;

  BytesWritten: DWORD;

begin

  Result := False;

  hSerial := CreateFile(PChar(Porta),

                        GENERIC_WRITE,

                        0,

                        nil,

                        OPEN_EXISTING,

                        0,

                        0);


  if hSerial = INVALID_HANDLE_VALUE then

  begin

    ShowMessage('Erro ao abrir a porta ' + Porta);

    Exit;

  end;

  if WriteFile(hSerial, PChar(Comando)^, Length(Comando), BytesWritten, nil) then

    Result := True;

  CloseHandle(hSerial);

end;

➕ Como usar:

procedure TForm1.btnImprimirClick(Sender: TObject);

begin

  // Exemplo de comando fiscal (ver manual da impressora para os corretos)

  if EnviarComandoECF('COM1', #27 + 'C') then

    ShowMessage('Comando enviado com sucesso.')

  else

    ShowMessage('Erro ao enviar comando.');

end;

✅ 3. Usando DLL oficial do fabricante (recomendado)

Fabricantes como Daruma, Bematech, Elgin fornecem DLLs com funções prontas como Bematech_FI_AbreCupom, Daruma_FI_AbreCupom, etc.

Exemplo com DLL da Bematech:

function Bematech_FI_AbreCupom(CPF_CNPJ: PChar): Integer; stdcall; external 'BemaFI32.dll';

procedure TForm1.btnCupomClick(Sender: TObject);

begin

  if Bematech_FI_AbreCupom('12345678901') = 1 then

    ShowMessage('Cupom aberto com sucesso.')

  else

    ShowMessage('Erro ao abrir cupom.');

end;

✅ 4. Leia o manual da impressora fiscal

Cada fabricante possui comandos diferentes e exigências fiscais específicas. É essencial obter o manual do desenvolvedor (ECF/ACBr/DLL) da impressora que será utilizada.

✅ 5. Alternativa:
Usar o ACBr (componente gratuito e robusto)

O ACBr é um projeto open source que facilita a integração com equipamentos fiscais.

// Usando ACBrECF

procedure TForm1.btnCupomClick(Sender: TObject);

begin

  ACBrECF1.Modelo := ecfBematech; // ou ecfDaruma, etc.

  ACBrECF1.Porta := 'COM1';

  ACBrECF1.Ativar;

  ACBrECF1.AbreCupom;

  ACBrECF1.VendeItem('123', 'Produto Teste', 'UN', 1, 10, 0, 'T');

  ACBrECF1.SubtotalizaCupom;

  ACBrECF1.EfetuaPagamento('Dinheiro', 10);

  ACBrECF1.FechaCupom('Obrigado!');

end;

✅ Conclusão

Você pode escolher três caminhos:

Comunicação direta via porta COM (mais complexa e arriscada).

Usar a DLL do fabricante (mais seguro e comum).

Usar o ACBr (mais flexível, fácil e atualizado para exigências fiscais do Brasil).

Nenhum comentário:

Postar um comentário