Fórum Delphi 7 , Imprimir em uma Bematech 4200 , #454206

04/09/2013

0

Ola Boa Tarde

Estou desenvolvendo um tela que imprime Ticket 78mm x 40mm

No seguinte esquema

NOME DA EMPRESA - label1 Data - label4
CNPJ - label 2 Hora - label5
ENDEREÇO - label3


CAIXA COM OPÇÕES - combobox1 CAIXA COM AS QUANTIDADES - combobox2


Como crio o botão "IMPRIMIR" , para que no cupom saia a label 1, label 2 , label 3 , label 4 , label 5 e no combobox1 seleciona o item na lista e no combobox2 a quantidade do item, mas porem a quantidade determina o numero de cupom que a impressora BEMATECH 4200 irá imprimir e cortar.

Se alguém puder me ajudar Aguardo
Dario Tebaldi

Dario Tebaldi

Responder

Posts

04/09/2013

Marcos Oliveira

Dario, sua impressora está ligada na USB? Se sim, uma forma fácil de imprimir é usando um RichEdit. Você pode configurá-lo com uma fonte mono espaçada, como a Courrier New por exemplo, e adicionar as linhas que serão impressas nele. Depois de tudo inserido no RichEdit, faça um loop com a quantidade de vezes que será impresso, e acione a propriedade "Print" do RichEdit dentro desse loop (for, while, etc...). Você pode antes disso usar um PrintDialog para poder selecionar a impressora.

Ficaria mais ou menos assim:

var
   i: Integer;
begin
     RichEdit1.Lines.Add(Label1.Caption);
     RichEdit1.Lines.Add(Label2.Caption);
     RichEdit1.Lines.Add(Label3.Caption);
     RichEdit1.Lines.Add(Label4.Caption);
     RichEdit1.Lines.Add(Label5.Caption);

     if PrintDialog1.Execute then
     begin
          for i := 0 to StrToInt(ComboBox2.Text) - 1 do
            RichEdit1.Print('');
     end;
end;


Espero ter ajuado.

Att,

Marcos
Responder

Gostei + 0

05/09/2013

Dario Tebaldi

Olá Marcos,

Muito obrigado, deu certinho...

Só preciso de uma orientação, ao voltar na tela para imprimir novos TICKETs, fica gravado o anterior se mandar imprimir novamente imprimi o anterior e o atual na mesma pagina , tem um comando que ao clicar em OK (para imprimir na tela do printDialog) quando voltar no FORM apagar o que tem escrito no RichEdit.

Aguardo, e mais uma vez Obrigado!
Responder

Gostei + 0

05/09/2013

Marcos Oliveira

Dario, antes de começar qualquer impressão, limpe ou RichEdit com um "Clear".

RichEdit1.Clear;

ou
RichEdit1.Lines.Clear;


Os dois códigos funcionam.

Att,

Marcos
Responder

Gostei + 0

05/09/2013

Dario Tebaldi

Marcos,

Perfeito...

Obrigado!
Responder

Gostei + 0

05/09/2013

Marcos Oliveira

Por nada! À disposição...
Responder

Gostei + 0

10/09/2013

Dario Tebaldi

Bom dia Macos

Estou com um programa e estou tentando compilar ele, mas esta dando acusando a ultima linha já tentei varios procedimentos e não passa dessas ultimas linhas, pode me ajudar e verificar se há algum erro, segue abaixo:

program LANCHONETE;

uses
Forms,
unmenu in 'UNMENU.PAS' ,
uncadprodutos in 'uncadprodutos.pas' ,
uncadgrupos in 'uncadgrupos.pas' ,
uncadfornecedores in 'uncadfornecedores.pas' ,
uncadfuncionarios in 'uncadfuncionarios.pas' ,
uncadclientes in 'uncadclientes.pas' ,
unvendas in 'UNVENDAS.PAS' ,
unbalcao in 'UNBALCAO.PAS' ,
unconpedidos in 'unconpedidos.pas' ,
uncaixadiario in 'uncaixadiario.pas' ,
unConfig in 'unConfig.pas' ,
unQrClientes in 'unQrClientes.pas' {qrClientes: TQuickRep},
unQrFornecedores in 'unQrFornecedores.pas' {qrFornecedores: TQuickRep},
unQrFuncionarios in 'unQrFuncionarios.pas' {qrFuncionarios: TQuickRep},
unQrGrupos in 'unQrGrupos.pas' {qrGrupos: TQuickRep},
unQrProdutos in 'unQrProdutos.pas' {qrProdutos: TQuickRep},
unQrConsumidos in 'unQrConsumidos.pas' {qrConsumidos: TQuickRep},
unQrCaixa in 'unQrCaixa.pas' {qrCaixa: TQuickRep},
unMovimento in 'unMovimento.pas' ,
unConProdutos in 'unConProdutos.pas' ,
unQrEstoque in 'unQrEstoque.pas' {qrEstoque: TQuickRep},
unSobre in 'unSobre.pas' ; ------------------------------------esta linha para a RUN

{$R *.res}

begin -------------------------------------------aqui tambem trava
Application.Initialize;
Application.Title := 'LANCHONETE';
Application.CreateForm(TfrmPrincipal, frmPrincipal);
Application.Run;
end.


Aguardo, obrigado!
Responder

Gostei + 0

10/09/2013

Marcos Oliveira

Dario, posta pra mim o erro que o compilador está acusando, por favor.

Att,

Marcos
Responder

Gostei + 0

10/09/2013

Dario Tebaldi

[Fatal Error] GPizza.dpr(26): File not found: 'RXCtrls.dcu'
Responder

Gostei + 0

10/09/2013

Marcos Oliveira

Dario, pela mensagem, você está usando os componentes da RXLib, correto?
Se sim, certifique-se que você os instalou corretamente, e se estão presentes na Library Path do Delphi.
Se não estiver usando nenhum componente da RXLib, procure a Unit RXCtrls no seu form principal e exclua ela da declaração "Uses".

Att,

Marcos
Responder

Gostei + 0

10/09/2013

Dario Tebaldi

Marcos,

Como posso diminuir este espaçamento para encaixar em uma bobina 78mm e também diminuir o espaço das linhas deixar padrão, ao final da impressão a impressora cortar a pagina:

procedure TfrmVendas.btnF5Click(Sender: TObject);
var Impressora : TextFile;
i :Integer;
begin
AssignFile(Impressora,frmprincipal.vImp1);
Rewrite(Impressora);
Write(Impressora,#15);
WriteLn(Impressora);
WriteLn(Impressora);
WriteLn(Impressora,Format('%-50s',[frmprincipal.vEmpresa]));
WriteLn(Impressora,Format('%-50s',[frmprincipal.vEndereco + ' - ' + frmprincipal.vBairro]));
WriteLn(Impressora,Format('%-50s',[frmprincipal.vCidade + ' - Fone: ' + frmprincipal.vFone]));
WriteLn(Impressora,Format('%-50s',['-----------------------------------------------------------']));
WriteLn(Impressora,Format('%-50s',['Pedido No.: ' + inttostr(tabpedidosCodigo.AsInteger)]));
WriteLn(Impressora,Format('%-50s',['Nome......: ' + tabpedidosNome.Value]));
WriteLn(Impressora,Format('%-50s',['Endereco..: ' + tabpedidosEndereco.Value]));
WriteLn(Impressora,Format('%-50s',['Referencia: ' + tabpedidosReferencia.Value]));
WriteLn(Impressora,Format('%-50s',['Bairro....: ' + tabpedidosBairro.Value + ' ' + 'Fone: ' + tabpedidosTelefone.Value]));
WriteLn(Impressora,Format('%-30s',['Data......: ' + datetostr(date) + ' ' + 'Hora: ' + timetostr(now)]));
WriteLn(Impressora);
WriteLn(Impressora,Format('%-50s',['QTDE. PRODUTO VALOR UN VALOR TOTAL']));
WriteLn(Impressora,Format('%-50s',['-----------------------------------------------------------']));
tabprodpedidos.First;
while not(tabprodpedidos.eof) do begin
if tabprodpedidosQuantidade.Value = 0.5 then
Write(Impressora,Format('%-6.5s',['1/2']))

else if tabprodpedidosQuantidade.Value = 0.33 then
Write(Impressora,Format('%-6.5s',['1/3']))

else if tabprodpedidosQuantidade.Value = 0.25 then
Write(Impressora,Format('%-6.5s',['1/4']))
else
Write(Impressora,Format('%-6.5s',[FloatToStr(tabprodpedidosQuantidade.Value)]));

Write(Impressora,Format('%-30.30s',[tabprodpedidosNomeProduto.Value]));
Write(Impressora,Format('%-12.2m',[tabprodpedidosValor.Value]));
WriteLn(Impressora,Format('%-2m',[tabprodpedidosValorTotal.Value]));
tabprodpedidos.Next;
end;
WriteLn(Impressora);
WriteLn(Impressora,Format('%-50s',['Obs.: ' + tabpedidosObs1.Value]));
WriteLn(Impressora,Format('%-50s',[' ' + tabpedidosObs2.Value]));
Write(Impressora,#15);
Write(Impressora,Format('%-36.31s',['TAXA DE ENTREGA.:']));
Write(Impressora,#18);
WriteLn(Impressora,Format('%2m',[tabpedidosAcrescimo.Value]));
Write(Impressora,#15);
Write(Impressora,Format('%-36.31s',['TOTAL DO PEDIDO.:']));
Write(Impressora,#18);
WriteLn(Impressora,Format('%2m',[tabpedidosTotal.Value]));
Write(Impressora,#15);
Write(Impressora,Format('%-36.31s',['VALOR A SER PAGO:']));
Write(Impressora,#18);
WriteLn(Impressora,Format('%2m',[tabpedidosPago.Value]));
Write(Impressora,#15);
Write(Impressora,Format('%-36.31s',['TROCO...........:']));
Write(Impressora,#18);
WriteLn(Impressora,Format('%2m',[tabpedidosTroco.Value]));
Write(Impressora,#15);
WriteLn(Impressora,Format('%-50s',['-----------------------------------------------------------']));
WriteLn(Impressora,Format('%-50s',['Entregador: ' + tabpedidosEntregador.Value]));
WriteLn(Impressora,Format('%-50s',['AGRADECEMOS A PREFERENCIA !']));
for i:=0 to StrToInt(vEspaco) do
WriteLn(Impressora);
System.Close(Impressora);
end;



Aguardo, Obrigado!
Responder

Gostei + 0

10/09/2013

Marcos Oliveira

Não entendi muito bem sua pergunta. Sua impressão está maior que o tamanho da bobina?
Quanto a cortar o papel, você tem que enviar um comando para a impressora.

Consulte o tópico abaixo da Bematech, e veja se vai te atender.

[url]http://partners.bematech.com.br/2011/06/edicao-75-acionando-a-guilhotina-na-minimpressora-nao-fiscal/[/url]

Se não conseguir, me fale.

Att,

Marcos
Responder

Gostei + 0

10/09/2013

Dario Tebaldi

Sim esta maior e esta com muito espaço entre uma linha e outra
Responder

Gostei + 0

10/09/2013

Marcos Oliveira

Pelo seu código, você está formatando cada linha com 50 posições. Vá diminuindo até chegar ao tamanho ideal.
Você arrumando isso, pode ser que resolva o problema do espaçamento entre linhas.

Att,

Marcos
Responder

Gostei + 0

11/09/2013

Dario Tebaldi

Bom dia

Sabe como resolver este erro :

tabconfpedidos: Cannot perform this operation on a closed dataset


Obrigado
Responder

Gostei + 0

11/09/2013

Marcos Oliveira

Bom dia!

Você está tentando acessar uma tabela que está fechada. Você deve dar um "active := true" nela.

Att,

Marcos
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar