GARANTIR DESCONTO

Fórum Dúvida: Impressão Direta (Assignfile) Impressora Não Fiscal Diebold #428790

14/11/2012

0

Olá. Tenho que imprimir um cupom não-fiscal numa Impressora im402td térmica da Diebold. Mas não tenho como testar, porque não tenho uma pra testes de programação. Já li os manuais e vi os exemplos do fornecedor.
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ;
begin
Assignfile (print, 'LPT1'); //  = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print);  //fecha o arquivo
end;
end;

Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?

E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).

E desde já agradeço pela ajuda.
Rodrigo Barra

Rodrigo Barra

Responder

Posts

14/11/2012

Carlos Bernardo

Olá. Tenho que imprimir um cupom não-fiscal numa Impressora im402td térmica da Diebold. Mas não tenho como testar, porque não tenho uma pra testes de programação. Já li os manuais e vi os exemplos do fornecedor.
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ;
begin
Assignfile (print, 'LPT1'); //  = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print);  //fecha o arquivo
end;
end;

Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?

E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).

E desde já agradeço pela ajuda.


Boa noite...

Se eu colocar a impressora na LPT1 o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?
Sim, vai imprimir...

E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado?
Normalmente esse erro se dá pela ausência da porta na sua máquina.

Se vc realmente quer fazer um teste, mesmo que vc não tenha porta paralela na máquina ou não tenha uma impressora física para testar, basta instalar uma impressora Genérica e mudar a propriedade PORTAS para texto... compartilha a impressora e pelo MSDOS executa o seguinte comando net use lpt1 \\nomedopc\nomedocompartilhamento
ao executar esse bloco de comando a impressora abre uma tela pedindo para vc salvar o arquivo em algum lugar, vc coloca o caminho e nome do arquivo, depois abre ele no bloco de notas...
Responder

Gostei + 0

14/11/2012

Rodrigo Barra

CARLOS JOSÉ RAUSCH BERNARDO valeu pelas dicas. É bm saber que estou no caminho certo.
Responder

Gostei + 0

15/11/2012

Gilvanio Gonçalves

Olá. Tenho que imprimir um cupom não-fiscal numa Impressora im402td térmica da Diebold. Mas não tenho como testar, porque não tenho uma pra testes de programação. Já li os manuais e vi os exemplos do fornecedor.
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ;
begin
Assignfile (print, 'LPT1'); //  = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print);  //fecha o arquivo
end;
end;

Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?

E como não tenho ela instalada, dá o erro: "The speficies file was not found", é pq realmente não tenho a impressora ou porque tá algo errado? No caso eu tiro este erro com um try ...Except, mas antes, gostaria de saber a causa do erro neste enunciado (digo assim, pq o erro diz q o arquivo não existe, mas estou passando a porta).

E desde já agradeço pela ajuda.
Responder

Gostei + 0

15/11/2012

Gilvanio Gonçalves

Olá. Tenho que imprimir um cupom não-fiscal numa Impressora im402td térmica da Diebold. Mas não tenho como testar, porque não tenho uma pra testes de programação. Já li os manuais e vi os exemplos do fornecedor.
Vi exemplos na internet pra fazer Impressão Direta através do Delphi.
Gostaria de saber se realmente funciona.
var print : textfile ;
begin
Assignfile (print, 'LPT1'); //  = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print);  //fecha o arquivo
end;
end;

Se eu colocar a impressora na LPTI o Delphi realmente vai imprimir nela? O AssignFile vai reconhecer LPT1 como a porta?



sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?


At+
Responder

Gostei + 0

15/11/2012

Gilvanio Gonçalves

sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?


At+

obs:caso vc faça opção pelo quickreport te passo as configuracões pra vc.
Responder

Gostei + 0

15/11/2012

Gilvanio Gonçalves

correção de texto


sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc teráum imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e insia nele um qrgroup e dentro deste qrgroup
os qrlabel e os qrdbtext e na propriedade dele page na opção orientation mude para sim o comando assignfile envia direto para porta paralela LPT1.
só tem um porém pra vc, usando codigo de comando via dos como este seu, vc tera muito trablaho para fazer imprimir no padrão de cupom , digo na questão de imprimir condensado, na rotina que vc esta fazendo vai ter que ter varios codigos para condensar, tipo #13,#27 dai por diante, vc terá que fazer varios teste para se ter o resultado de impresso que Nò ultrapase a largura do papel que é no caso • Largura do papel: 56,5 ± 0,5 mm.
• Diâmetro da bobina (máx.): 65 mm.
• Diâmetro interno do tubete: 12 mm.
• Espessura do papel: 0,060 a 0,078 mm

veja como vc terá um imenso trabalho para condesar a impresão ate chegar neste valores de largura do papel(bobina).
seria mais facil pra vc enviar a impressão usando exemplo o quickreport e configura para modo portrait e devina as medidas
do papel, o resto a impressora frá sozinho que é o corte no final de seu cupom corretamente, isto é uma sugestão
pois na rotina acima que vc envia por codigo, é usado para formualrio continuo amigo.
no seu caso é cupom seja fiscal ou não ok?


At+

obs: caso faça a opção pelo uso do quickreport te passo as configurações.
Responder

Gostei + 0

15/11/2012

Rodrigo Barra

Gilvanio C. Gonçalves, acho que seria uma boa pelo QuickReport sim.
Mas aí eu monto o Relatório (eu sei fazer), mas como que vou chamá-lo e enviá-lo para a impressora? Se puder me enviar as configurações e me der uma ajuda para chamá-lo agradeço.
Responder

Gostei + 0

15/11/2012

Rodrigo Barra

Aproveitando o embalo, estou implementando o código:
var print : textfile ;
begin
try
 begin
Assignfile (print, 'LPT1'); // = PORTA DE COMUNICACAO
rewrite(print);
writeLn(print, 'linha impressa...');
closefile(print); //fecha o arquivo
 end
 except ShowMessage('Erro');
end;
end;


O problema é que entre algumas partes do código, eu tenho outro código que insiro Dados no Banco, como valor, quantidade, etc. Porque aproveito o "laço de repetição". Mas por causa de não ter a porta paralela, sempre cai no Except, por causa do erro: "The speficies file was not found".
A pergunta é, como faço a condição para verificar Independente de Cair no Except eu gravar os dados no Banco? Ou seja, mesmo se não existir a LPT1, os outros dados serão gravados?
Responder

Gostei + 0

15/11/2012

Gilvanio Gonçalves

com o seu relatorio pronto pelo quikreport, como disse usando somente o QrGroup
e page como poPortrait, papersize = custo, length = 97,1mm rigthmargin = 0,0mm,
width 69,6mm, propriedades definas para o papel.
configurações para o seu quick report,heigth 476, width = 263, como ele ficará visualmente em tempo de projeto.

para mandar imprimir, use um botão e coloque este codigo:

 Application.CreateForm (TForm2, Form2);// opcional
          Form2.quickrep1.Print;
// pode mandar direto sem o appliaction

onde form2 é o form do quickreport.

declare a uses form2.// no form onde esta o filtro de datas periodo.
declare a uses form1 // no form onde esta o quickreport.
implementation

uses uform1, form2;

no caso form2 é o form onde é flitrado o periodo.

caso vc

não sei como inserir imagem neste form, se não te mostraria a imagem de quick preparado para cupom?.


e isto. espero que de certo ai com vc.

na questão try e except , isto é para tratamento de erros, sendo que mesmo usando
o sowmwssage,vc Não terá como saber o erro que relamente foi causado.

At+
Responder

Gostei + 0

15/11/2012

Rodrigo Barra

Gilvanio, obrigado pela ajuda. Vou fazer, imagino q só amanhã será testado de verdade.
Mas igual, com o textFile, pra Imprimir na porta LPT1 eu uso o código:

Assignfile (print, 'LPT1');


Eu imprimindo pelo quickreport.Print ele deve mandar pra imprimir na impressora Padrão, certo?
Tem como eu mandar imprimir na LPT1, como o AssignFile?

E mesmo imprimindo pelo QuickReport, depois posso usar os seguintes comandos, sem problemas?


Writeln(Print ,#27 + '&' + '0' + #12 + #48); //Abre a gaveta
      Writeln(Print ,#10 + #17); // Corte de papel


E desde já agradeço pela ajuda.
Responder

Gostei + 0

15/11/2012

Rodrigo Barra

Só pra ter certeza. Você mandou ajustar o RightMargin=0,0mm . Mas as margens esquerda, superior e inferior continuaão 10mm ?
Responder

Gostei + 0

15/11/2012

Marcio

cara, para imprimir direto na porta teria que usar o AssignPrn ao invés de AssignFile...

falow
Responder

Gostei + 0

15/11/2012

Rodrigo Barra

Márcio, postei AssignFile pq na "net inteira" estava isto. Mas claro, que AssignPrn, é para imprimir mesmo.

Mas o AssignPrn sempre vai imprimir na impressora padrão, certo? Porque no AssignFile tem q colocar a porta LPT1, já o Prn não tem este parâmetro.
E agradeço pela ajuda.
Responder

Gostei + 0

16/11/2012

Rodrigo Barra

Marcio, realmente, fiz o teste e com o AssignPrn e funcionou, imprimiu na impressora padrão (hp multifuncional). E com o AssignFile que estava tentando não, até pq ele trabalha com arquivos.
E Gilvanio, também fiz o relatorio e nos testes numa hp F280 está imprimindo, agora resta ver se vai funcionar com a impressora não fiscal.
Mas de qualquer maneira agradeço à todos que me ajudaram. (o tópico ainda não está completamente resolvido, mas acho que está perto kkk)
Responder

Gostei + 0

16/11/2012

Gilvanio Gonçalves

desculpe não der dado a resposta ontem, minha net caiu, e so voltou hoje de manhã.

configuração da proriedade page do quickReport
BottonMargin = 00mm, Columns = 1, ColumnSpace = 0,0mm,LeftMargin = 0,0mm
length 125,9mm, orientation = poPortrait, PaperSize = Custon.
RightMargin = 0,0mm, Ruler = true, TopMargin = 0,0mm, Width 69,6mm.

esta configurações usei na Bematech, vc ajusta conforme
o papel da sua impressora.

ao mandar imprimir veja se nada ficou vazando para esquerda ou direita, se
caso alguma margin der errado só corrigir, mas acredito que Não terá erro
pois as impressoras tipo cupom usam padrão de bobina.

quanto a sua pergunta: usando assignFile irá imprimir direto para impressora padrão.
no quickReport também, pois o comando que te passei quickreport1.print; vai para impressora
definida como padão no windows, e sendo cupom é inviavel preview amigo, pois na tela
de venda antes de imprimir o usuario vê se os dados estão correto, nos damos preview geralmente
em relatórios, mas sendo o quickreport configurado para prPortrait ao dar preview ele exibira
testo grande e visual do quick tipo poupup.

o que vc pode fazer é no form que tem o botão para imprimir, fazer uma rotina com uma tela
de opcão para o usuario que Não é correto mas? que seria assim,

mas entedo a sua duvida e que deve ter uma impressora neste micro
para outros impressos e ela é padrão e tem a de cupom que será usada esporadicamente.
você pode fazer o seguinte, no form onde tem o botão que manda imprimir, vamos deixar o usuario
direcionar a impressora, para isto no form onde esta este botão declare na unit uses Printers

exemplo:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Printers, StdCtrls;


neste mesmo form coloque o componente combobox, acima do combobox um label, caption - selecione a impressora.

no evento oncreate do form este codigo:

ComboBox1.ItemIndex := 0;


e no evento onshow:

ComboBox1.Items.Assign(Printer.Printers);


no botão imprimir este codigo:

Application.CreateForm(TForm2, Form2); //o form. do relatório
  try
    Form2.QuickRep1.PrinterSettings.PrinterIndex := ComboBox1.ItemIndex; //Define a impressora selecionada
    Form2.QuickRep1.Print; //Imprime o relatório
  finally
    Form2.Release; //Libera o Form da memória
  end;


não esqueça das units dos form como mencionei na resposta anterior, form1 use unit form2, form2 use unit form1, ok.

existe outras rotinas como alterar a imprresora padrão do windows na hora da impressão, mas é via codigo e rotina por
procedure um pouco mais complicado, já com o combobox acho que é mais simples pra vc.

quanto a sua pergunta usando o assingfile nunca usei junto com quickreport e vc mostra um comando:

Writeln(Print ,#27 + '&' + '0' + #12 + #48); //Abre a gaveta// aqui vc vê como adaptar para abrir gaveta.
Writeln(Print ,#10 + #17); // Corte de papel// não precisa a impressora faz o corte automaticamente.


quando respondi que usando assingfile envia direto para impressora é porque eu uso ele , mas desta forma.

procedure TFrmPedidos.BtnMatricialClick(Sender: TObject);
const
cJustif = #27#97#51;
c10cpi = #18;
Var
Impressora:TextFile;
S: String;

VrUnit, VrTotal : String;
desc : String;
TotPed : String;

begin
AssignFile(Impressora,'LPT1:');
Rewrite(Impressora);
Writeln(impressora);

//imprimi cabeçalho
Writeln (impressora,''+'PONTO DO OLEO - AUTO MR');
Writeln (impressora,''+'RUA Alcides Inacio Da Silva N: 600 - A - INGA Betim - Mg');
Writeln (impressora,''+ '                  Telefone:(31)3011-0961');
//Pula uma Linhas
Writeln(Impressora);
Writeln(impressora,#18''+'Pedido N '+FloatToStr(TbTemp_ItensNumPed.Value)+'             '+'Condicoes Pagto: '+TbTemp_ItensCond_Pagto.Value+'    '+'Vendedor: '+TbTemp_ItensNome_Vendedor.Value);
// Imprimi Cliente e tel cliente
Writeln(Impressora);
Writeln(impressora,#18''+'Cliente:'+ TbTemp_ItensCliente.Value+'   '+'Telefone: '+TbTemp_ItensTel_Clie.Value);
//Pula uma linha
Writeln(Impressora);
{ Move o ponteiro de registro da tabela de Itens para o primeiro}
TbTemp_Itens.First;
//imprimi cabeçalho do pedido
Writeln (impressora,''+'------------------------------------------------------------------------------');
Writeln (impressora,''+'Codigo' +'    Descricao'+'                         Qtd'+'        Valor Unit.'+'   Total');
Writeln(Impressora);
Writeln (impressora,''+'------------------------------------------------------------------------------');
{ Início do Laço}
While not (TbTemp_Itens.Eof) do
Begin
S := Format('%-13s%-32s%-5s',[TbTemp_ItensCodigoPro.AsString,TbTemp_ItensDescricao.Value,TbTemp_ItensQuantidade.AsString]);
VrUnit := FormatFloat('0.00',TbTemp_ItensVal_Unit.value);
VrTotal := FormatFloat('0.00',TbTemp_ItensTotal.Value);
while length(VrUnit) < 12 do //Colocar o tamanho q vc precisar
VrUnit := ' ' + VrUnit;
while length(VrTotal) < 14 do //Colocar o tamanho q vc precisar
VrTotal := ' ' + VrTotal;
S := S + VrUnit + VrTotal;
Writeln(impressora,S);
TbTemp_Itens.next;
end;
Desc := FrmPedidos.Edit1.Text;
TotPed := FrmPedidos.txtvalTot.Caption;
// pula linhas e imprimi o  total do pedido, desconto,etc
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Write(impressora,Format('%-56s',[ ' ']));
Writeln(impressora,''+'Desconto =>'+'   '+Desc);
Write(impressora,Format('%-56s',[ ' ']));
Writeln(impressora,''+'Total =>'+'      '+Totped);

////salto para corte impressora lx 300
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
Writeln(impressora);
CloseFile(impressora);
end;


veja que não usei o assingprn, isto vai de programador para programador e nescessidade.

para cupom eu uso quickreport, ou fortes report.


Abs.





Responder

Gostei + 0

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

Aceitar