Dúvidas de ECF

11/03/2003

0

tenho uma aplicação q precisa reimprimir cupom fiscal(ECF). Na venda normal, a impressão é concumitante, bate o scanner e o ECF sai. Porem há situações em q é preciso a reimpressão. Por isso eu bufferizo er reimprimo. Acontece q se a venda foi de tres itens, ele imprime tres itens, mas sempre o primeiro da query(repete-o tres vezes). Ex:
vendi: Copo, Jarra e Boneca.
sai as tres vendas mas tudo copo com o preco e qde do copo.
Eis aí o código:
procedure TfrmVendaEmi.FlatButton2Click(Sender: TObject);
var
iRetorno : integer;
Buffer : string;
cod, desc, icm, valor, total, desco, qtde: String;
begin
cod:=inttostr(Query1Cod.AsInteger);
desc:=Query1Descricao.asstring;
icm:=´01´;
qtde:=floattostr(Query1Qde.AsFloat);
valor:=floattostr(Query1Valor_Uni.asfloat);
desco:=floattostr(Query1Valor_Total.asfloat);

iRetorno := IniPortaStr(ComboBox1.Items[ComboBox1.ItemIndex]);
if iRetorno = 0 then
ShowMessage(´Erro ao inicializar porta.´);

Buffer := #27 + ´|00|´ + 27;// abre o cupom

query1.first;
while not(query1.eof) do begin
Buffer := 27 + ´|09|´+cod+´|´+desc+´|´+icm+´|´+qtde+´|´+valor+´|´+desco+´|´+ 27;//venda de itns
query1.next;
end;

iRetorno := FormataTX(Buffer);
if iRetorno = 1 then
ShowMessage(´Erro de comunucação física.´);

iRetorno := FechaPorta();
if iRetorno = 0 then
ShowMessage(´Erro ao tentar liberar porta.´);
{encerramento com forma de pagto(dinheiro)}
Buffer:= 27+´|32|D|00|´+27;
Buffer:= 27+´|71|01|´+27;
Buffer:= 27+´|72|´+´|´+FloatToStr(Query1Valor_Total.asfloat)+´|´+27;
Buffer:= 27+´|34|Obrigado Volte Sempre|´+27;
end;
como é uma reimpressão, abrir, vender e finalizar estão na mesma rotina.
O código da query é este:
procedure TfrmVendaEmi.RxSpinEdit1Exit(Sender: TObject);
begin
with query1 do begin
close;
sql.clear;
sql.add(´Select * from Item Where cod_venda =:cod_venda´);
parambyname(´cod_venda´).asinteger:=strtoint(RxSpinEdit1.Text);
open;
end;
end;
Como fazer para q impressora fiscal imprima em qquer porta, sem a necessidade de eu escolher? Atualmente uso radiobutton para selecionar a porta, gravo e trabalho. Se mudar a porta, abro a tabela de config e mudo. gostaria q fosse automática. Baixei um compo(FPrinter) mas é para D5. Não funcionou no D6.


Paulo

Paulo

Responder

Posts

11/03/2003

Anonymous

Quanto a repetição dos itens no cupom... Vc está passando as informações da query para a string apenas uma vez, ou seja o primeiro item... quando dentro do laço do while vc deveria estar atualizando o conteúdo da sua string, pois se não ele irá imprimir sempre a mesma linha do pedido...


Responder

11/03/2003

Anonymous

Repare que vc passa o valor das variaveis fora do laço, e adiciona as variaveis dentro do laço, portanto, os dados continuam os mesmo...


Responder

11/03/2003

Aroldo Zanela

tenho uma aplicação q precisa reimprimir cupom fiscal(ECF). Na venda normal, a impressão é concumitante, bate o scanner e o ECF sai. Porem há situações em q é preciso a reimpressão. Por isso eu bufferizo er reimprimo. Acontece q se a venda foi de tres itens, ele imprime tres itens, mas sempre o primeiro da query(repete-o tres vezes). Ex: vendi: Copo, Jarra e Boneca. sai as tres vendas mas tudo copo com o preco e qde do copo. Eis aí o código: procedure TfrmVendaEmi.FlatButton2Click(Sender: TObject); var iRetorno : integer; Buffer : string; cod, desc, icm, valor, total, desco, qtde: String; begin cod:=inttostr(Query1Cod.AsInteger); desc:=Query1Descricao.asstring; icm:=´01´; qtde:=floattostr(Query1Qde.AsFloat); valor:=floattostr(Query1Valor_Uni.asfloat); desco:=floattostr(Query1Valor_Total.asfloat); iRetorno := IniPortaStr(ComboBox1.Items[ComboBox1.ItemIndex]); if iRetorno = 0 then ShowMessage(´Erro ao inicializar porta.´); Buffer := #27 + ´|00|´ + 27;// abre o cupom query1.first; while not(query1.eof) do begin Buffer := 27 + ´|09|´+cod+´|´+desc+´|´+icm+´|´+qtde+´|´+valor+´|´+desco+´|´+ 27;//venda de itns query1.next; end; iRetorno := FormataTX(Buffer); if iRetorno = 1 then ShowMessage(´Erro de comunucação física.´); iRetorno := FechaPorta(); if iRetorno = 0 then ShowMessage(´Erro ao tentar liberar porta.´); {encerramento com forma de pagto(dinheiro)} Buffer:= 27+´|32|D|00|´+27; Buffer:= 27+´|71|01|´+27; Buffer:= 27+´|72|´+´|´+FloatToStr(Query1Valor_Total.asfloat)+´|´+27; Buffer:= 27+´|34|Obrigado Volte Sempre|´+27; end; como é uma reimpressão, abrir, vender e finalizar estão na mesma rotina. O código da query é este: procedure TfrmVendaEmi.RxSpinEdit1Exit(Sender: TObject); begin with query1 do begin close; sql.clear; sql.add(´Select * from Item Where cod_venda =:cod_venda´); parambyname(´cod_venda´).asinteger:=strtoint(RxSpinEdit1.Text); open; end; end; Como fazer para q impressora fiscal imprima em qquer porta, sem a necessidade de eu escolher? Atualmente uso radiobutton para selecionar a porta, gravo e trabalho. Se mudar a porta, abro a tabela de config e mudo. gostaria q fosse automática. Baixei um compo(FPrinter) mas é para D5. Não funcionou no D6.

Caro Paulo,

Não tive tempo ainda de analisar com cuidado a sua rotina e farei isso mais tarde caso não tenha encontrado a solução, pois tenho alguns clientes com vendas não concomitante autorizados pelo fisco local.
No entanto, gostaria de aproveitar para sugerir a utilização da nova DLL da Bematech, pois ela simplifica em muito o desenvolvimento e manutenção da aplicação, bem como, melhora a legibilidade do código.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar