Impressão de Relatórios em Matriciais (Nota Fiscal, Cupom de Venda)
Olá Pessoal
Preciso fazer um formulário para impressão de nota fiscal em modo texto, eu nunca fiz este procedimento, por onde começo?
Tem como fazer um form com os ajustes de campos, linhas e colunas e qdo eu for imprimir a nota ou o rotulo eu pegar as configurações deste form?
Abraços,
Rogério.
Rogério Nascimento
Curtidas 0
Respostas
Wesley Yamazack
24/06/2009
Olá Rogério,
Seguem dois exemplos de como fazer isso
1 - Exemplo
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer;
begin
AssignFile(F,'LPT1');
Rewrite( f ); // e parenteses letra f e fecha parenteses, sem espaço...
i := 0;
Writeln(F,'Teste de impressao - Linha 0');
Writeln(F,'Teste de impressao - Linha 1');
Writeln(F,#27#15+'Teste de Impressão - Linha 2');
Writeln(F,'Teste de impressao - Linha 3');
Writeln(F,#27#18+'Teste de Impressão - Linha 4');
Writeln(F,'Teste de impressao - Linha 5');
Writeln(F,#12); // Ejeta a página
CloseFile( f ); // e parenteses letra f e fecha parenteses, sem espaço.
end;
2 - Exemplo
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Linha:integer;
Tamanho:integer;
Coluna:integer;
begin
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := 'Times New Roman';
Printer.Canvas.Font.Size := 10;
Linha := 20;
Coluna:= 20;
Tamanho := Printer.Canvas.TextWidth('a');
Table1.First;
while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,'Relação de Clientes');
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,'Cod');
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,'Nome');
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,'Endereço');
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('Codigo').AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('Nome').AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('End').AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
Espero que te ajude meu amigo.
Att,
Wesley Y
Seguem dois exemplos de como fazer isso
1 - Exemplo
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer;
begin
AssignFile(F,'LPT1');
Rewrite( f ); // e parenteses letra f e fecha parenteses, sem espaço...
i := 0;
Writeln(F,'Teste de impressao - Linha 0');
Writeln(F,'Teste de impressao - Linha 1');
Writeln(F,#27#15+'Teste de Impressão - Linha 2');
Writeln(F,'Teste de impressao - Linha 3');
Writeln(F,#27#18+'Teste de Impressão - Linha 4');
Writeln(F,'Teste de impressao - Linha 5');
Writeln(F,#12); // Ejeta a página
CloseFile( f ); // e parenteses letra f e fecha parenteses, sem espaço.
end;
2 - Exemplo
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Linha:integer;
Tamanho:integer;
Coluna:integer;
begin
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := 'Times New Roman';
Printer.Canvas.Font.Size := 10;
Linha := 20;
Coluna:= 20;
Tamanho := Printer.Canvas.TextWidth('a');
Table1.First;
while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,'Relação de Clientes');
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,'Cod');
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,'Nome');
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,'Endereço');
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('Codigo').AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('Nome').AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName('End').AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha - Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
Espero que te ajude meu amigo.
Att,
Wesley Y
GOSTEI 0
Rogério Nascimento
24/06/2009
Fala ai grande Wesley, tudo na paz !!!!
Me diga uma coisa, se for porta serial, como aquelas impressoras pequenas de comercio, no lugar do LPT1, basta passar COM1, ou COM2, etc?
E quanto a possibilidade de eu montar um form para definir os padrões de layout, seria possivel? Este padrão eu vi em um sistema, era algo +/- assim
Tipo 1 = Sexto
Cfop linha 1, posicao 50
Entrada/Saida linha 1, posicao 62
data emissao linha 2, posicao 45, etc.
É complicado de pegar o layout da impressão desta forma? ou é possivel fazer isto?
Abraços,
Rogério
Me diga uma coisa, se for porta serial, como aquelas impressoras pequenas de comercio, no lugar do LPT1, basta passar COM1, ou COM2, etc?
E quanto a possibilidade de eu montar um form para definir os padrões de layout, seria possivel? Este padrão eu vi em um sistema, era algo +/- assim
Tipo 1 = Sexto
Cfop linha 1, posicao 50
Entrada/Saida linha 1, posicao 62
data emissao linha 2, posicao 45, etc.
É complicado de pegar o layout da impressão desta forma? ou é possivel fazer isto?
Abraços,
Rogério
GOSTEI 0
Rogério Nascimento
24/06/2009
Wesley, estou fazendo uns testes aqui e ja até imprimi alguns dados :D
Diga-me, qual das duas formas é mais recomendada?
Eu vi que no segundo exemplo ele assume a impressora padrão do micro, tem como escolher uma porta para ele?
Eu consigo jogar isto em um arquivo, caso eu necessite de testar o conteudo sem imprimir?
Abraços,
Rogério.
Diga-me, qual das duas formas é mais recomendada?
Eu vi que no segundo exemplo ele assume a impressora padrão do micro, tem como escolher uma porta para ele?
Eu consigo jogar isto em um arquivo, caso eu necessite de testar o conteudo sem imprimir?
Abraços,
Rogério.
GOSTEI 0
Wesley Yamazack
24/06/2009
Olá Rogério,,
Vamos ao exemplo.
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer;
begin
AssignFile(F,'LPT1'); //Define qual é a porta que você quer
Rewrite( f ); // e parenteses letra f e fecha parenteses, sem espaço...
i := 0;
Writeln(F,' + EdtNome.Text );
Writeln(F,' + EdtCPF.Text );
Writeln(F,#27#15+' + EdtIdade.Text );
Writeln(F,' + EdtEndereco.Text );
Writeln(F,#27#18+' + EdtSexo.Text );
Writeln(F,' + EdtValor.Text );
Writeln(F,#12); // Ejeta a página
CloseFile( f ); // e parenteses letra f e fecha parenteses, sem espaço.
end;
Att,
Wesley Y
Vamos ao exemplo.
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer;
begin
AssignFile(F,'LPT1'); //Define qual é a porta que você quer
Rewrite( f ); // e parenteses letra f e fecha parenteses, sem espaço...
i := 0;
Writeln(F,' + EdtNome.Text );
Writeln(F,' + EdtCPF.Text );
Writeln(F,#27#15+' + EdtIdade.Text );
Writeln(F,' + EdtEndereco.Text );
Writeln(F,#27#18+' + EdtSexo.Text );
Writeln(F,' + EdtValor.Text );
Writeln(F,#12); // Ejeta a página
CloseFile( f ); // e parenteses letra f e fecha parenteses, sem espaço.
end;
Att,
Wesley Y
GOSTEI 0
Rogério Nascimento
24/06/2009
Valeu Wesley !!!
GOSTEI 0