Delphi 7 , Imprimir em uma Bematech 4200 ,

Delphi

04/09/2013

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

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

04/09/2013

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
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

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!
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

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
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Marcos,

Perfeito...

Obrigado!
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Por nada! À disposição...
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

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!
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

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

Att,

Marcos
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

[Fatal Error] GPizza.dpr(26): File not found: 'RXCtrls.dcu'
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

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
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

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!
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

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
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Sim esta maior e esta com muito espaço entre uma linha e outra
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

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
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Bom dia

Sabe como resolver este erro :

tabconfpedidos: Cannot perform this operation on a closed dataset


Obrigado
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Bom dia!

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

Att,

Marcos
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

unKnown Database

BDE Error - 10014 / [$27] [$1E]


dá este erro quando coloco Active - TRUE
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Qual banco você está usando? Você está usando um TTable pra acessar a tabela?
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

TwwTable
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Banco TDataBase
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Dario, não entendi... Quando perguntei qual banco, queria saber se usa MySQL, FireBird, etc...
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Desculpa,

BDE Admin
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

O BDE Admin não é um banco de dados. É um gerenciador de banco de dados. Pelo visto, você deve usar Paradox ou DBase.
Bom, baseado nisso, vamos tentar resolver seu problema. Quanto você vai acessar uma tabela desses bancos de dados, você precisa configurar o componente de acesso, que no seu caso é o TwwTable com algumas propriedades. Nunca usei esse componente, mas veja se tem as propriedades abaixo:
DataBaseName: Caminho onde está a tabela quer irá acessar;
TableName: Nome da Tabela.

Depois disso, tente dar um "Active := True" na tabela.

Att,

Marcos
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Bom dia Marcos,

Deu certo, Obrigado!

Uma duvida, como crio um Label, que irá fazer a soma do valor total que esta dentro da tebela;

Ex : label17.caption := ----- tabpedidoTotal

Como crio essa regra para somar a coluna total inteira e me mostrar na label Total Geral

Se puder me ajudar mais uma vez, aguardo

GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Dario, eu te recomendaria usar um comando SQL para isso, mas como não trabalho com esse banco de dados seu, não se é possível usar SQL pra fazer a soma.
Mas, você pode fazer da seguinte forma.
var
  d: Bouble;
begin
     d := 0;
     with Table1 do
     begin
          First;
          while not Eof do
          begin
               d := d + FieldByName('nome_do_campo').AsFloat;
               Next;
          end;
     end;
     Label1.Caption := FormatFloat('#,##0.00',d); // Formata o valor com separador de milhar 2 casas decimais.
end;


Não considero isso a melhor saída, mas funciona.

Att,

Marcos
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Esta acusando

bouble;
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

04/09/2013

Desculpe-me! Escrevi errado. O correto é Double.
GOSTEI 0
Dario Tebaldi

Dario Tebaldi

04/09/2013

Olá, Bom dia Marcos

Desculpa a demora em postar, esta lotado de serviço,

Mas, deu certo a opção que me passou,

Muito obrigado pela sua ajuda

t+
GOSTEI 0
POSTAR