Bom Dia a Todos !
Ontem 04/06/13 estive instalando o sistema de pdv em um cliente que usa a impressora daruma mach2.
a mesma apresentava erros na emissao de comproventes nao fiscais para suprimento e sangria, que consegui corrigir dando um intervalo via Sleep(); apos o comando.
No entanto, a mesma apresentou erros no cancelamento do cupom sendo este erro o seguinte:
-- 11:00:45:239 CancelaCupom
TX -> [FS]R[200]046[180]
11:00:45:488 RX <- :[200]0461[CR][252]
-- 11:00:45:488
TX -> [FS]R[200]050[179]
11:00:45:535 RX <- :[200]050000137[CR][207]
-- 11:00:45:535
TX -> [FS]R[200]026[178]
11:00:45:597 RX <- :[200]026000137[CR][206]
-- 11:00:45:597
TX -> [FS]F[211][137]
11:00:45:785 RX <- :0000041[211]000137000000000000000010[CR][213]
-- 11:00:45:800
TX -> [FS]R[200]056[181]
Daruma: Falha no Envio do CMD. Tentativa: 1 - Erro: 0 - Estendido: 0 -> Erro não documentado Cod.Aviso: 0
11:00:46:923 RX <-
----------------- ERRO -----------------
Impressora Daruma não está respondendo
----------------------------------------
com isso, fiz a depuracao do codigo fonte do componente e descobri que erro ocorria no seguinte trecho:
procedure TACBrECFDaruma.CancelaCupom;
var
RetCmd : String ;
NumUltimoCupom : String ;
NumCupomCancelavel: String;
iNumUltimoCupom, iNumCupomCancelavel: integer;
begin
fsNumCupom := '';
AguardaImpressao := True ;
if fpMFD then
begin
RetCmd := EnviaComando( FS + 'R' + #200 + '046'); // Verifica se precisa cancelar CCD;
if copy(RetCmd, 6, 1) <> '0' then
begin
try
RetCmd := EnviaComando( FS + 'R' + #200 + '050'); // retorna numero do cupom cancelavel
NumCupomCancelavel := copy(RetCmd, 6, 6);
NumUltimoCupom := GetNumCupom;
iNumUltimoCupom := StrToInt(NumUltimoCupom);
iNumCupomCancelavel := StrToInt(NumCupomCancelavel);
while iNumCupomCancelavel < iNumUltimoCupom do
begin
NumUltimoCupom := FormatFloat('000000',iNumUltimoCupom);
EnviaComando(FS + 'F' + #214 , 15); // Fecho o CCD caso ainda não esteja fechado
EnviaComando(FS + 'F' + #218 + NumUltimoCupom +#255+#255+#255, 15); // Cancela Conprovante Não Fiscal
EnviaComando(FS + 'F' + #214 , 15); // Fecha Comprovante de estorno Cancela Conprovante Não Fiscal
dec(iNumUltimoCupom);
end;
except
end;
EnviaComando(FS + 'F' + #211, 15) ; // Cancela Cupom
RespostasComando.Clear;
RespostasComando.AddField('COO', Copy(fpRespostaComando, 10, 6));
RespostasComando.AddField('CCF', Copy(fpRespostaComando, 16, 6));
RespostasComando.AddField('ValorCancelado', Copy(fpRespostaComando, 22, 12));
// Cancelamento retorna dados do Cupom Fiscal Cancelado e nao do Cancelamento
fsNumCupom := '' ; // RespostasComando['COO'].AsString;
fsNumCCF := '' ; // RespostasComando['CCF'].AsString;
end
else
raise EACBrECFCMDInvalido.Create( ACBrStr('Não existe documento para cancelar.') );
end
else if fsNumVersao = '2000' then
EnviaComando(ESC + #211, 15)
else
EnviaComando(ESC + #206, 15) ;
ZeraTotalApagar;
FechaRelatorio ; { Fecha relatorio se ficou algum aberto (só por garantia)}
end;
O erro ocorre apos o EnviaComando(FS + 'F' + #211, 15) ; // Cancela Cupom
depois que é enviado o codigo passa para o retorno dos campos:
RespostasComando.Clear;
RespostasComando.AddField('COO', Copy(fpRespostaComando, 10, 6));
RespostasComando.AddField('CCF', Copy(fpRespostaComando, 16, 6));
RespostasComando.AddField('ValorCancelado', Copy(fpRespostaComando, 22, 12));
que é onde ocorre o erro, dai alterei o codigo colocando um Sleep(); apos o EnviaComando(FS + 'F' + #211, 15) ; // Cancela Cupom
porem fazendo o teste pelo AcbrEcfTeste o erro nao ocorre, dai pergunto o que pode ser?
Configuracao do componente AcbrECF talvez?
desde ja grato !