Impressão de Relatórios em Matriciais (Nota Fiscal, Cupom de Venda)

24/06/2009

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

Rogério Nascimento

Curtidas 0

Respostas

Wesley Yamazack

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
GOSTEI 0
Rogério Nascimento

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
GOSTEI 0
Rogério Nascimento

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.
GOSTEI 0
Wesley Yamazack

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
GOSTEI 0
Rogério Nascimento

Rogério Nascimento

24/06/2009

Valeu Wesley !!!
GOSTEI 0
POSTAR