Ok, já estou com o ACBrRFD conectado, porém não é gerado nenhum registro de log referente ao erro que estou tendo, acredito que seja pelo item estar sendo impresso normalmente.
Depurei o código e ocorre o seguinte:
Chamo o método VendeItem passando para o parâmetro AliquotaICMS valor '12,00T';
procedure TACBrECF.VendeItem(Codigo, Descricao: String; AliquotaICMS : String ;
Qtd: Double; ValorUnitario: Double; ValorDescontoAcrescimo: Double;
Unidade: String; TipoDescontoAcrescimo : String; DescontoAcrescimo : String ;
CodDepartamento: Integer);
Var
AliquotaECF : String ;
Tratado : Boolean;
begin
AliquotaECF := '';
//Lembrando, aqui AliquotaICMS = '12,00T' e AliquotaECF = ''
//Dentro do IniciaVendeItem, AliquotaECF := AliquotaICMS;
//AliquotaECF é utilizada para verificar se essa aliquota(12,00) existe na impressora, no caso ela existe e
//é índice 02;
//Mas depois de localizado a aliquota, a variavel AliquotaECF := indice
IniciaVendeItem(Codigo, Descricao, AliquotaICMS, AliquotaECF, Qtd, ValorUnitario,
ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo, DescontoAcrescimo,
CodDepartamento);
//Assim que passa pelo IniciaVendeItem, AliquotaICMS = '12,00T' e AliquotaECF = '02';
//A rotina abaixo vai funcionar corretamente, imprimindo o item na ECF
try
Tratado := False;
fsECF.VendeItem( Codigo, CodificarPaginaDeCodigoECF( Descricao ),
AliquotaECF, Qtd, ValorUnitario,
ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo,
DescontoAcrescimo, CodDepartamento );
except
if Assigned( FOnErrorVendeItem ) then
FOnErrorVendeItem(Tratado);
if not Tratado then
raise;
end;
//E por fim é executado esta rotina. Dentro dela é verificado se o sistema está com ACBrRFD conectado, se
//estiver( que é o meu caso), é executado novamente uma pesquisa nas aliquotas da impressora pra verificar se
//a que estou passando existe;
//Mas como observado acima a minha variavel AliquotaECF agora vale '02', e não é encontrada na impressora,
//pois a pesquisa é realizada pelo valor da aliquota e não pelo índice
FinalizaVendeItem(Codigo, Descricao, AliquotaICMS, AliquotaECF, Qtd, ValorUnitario,
ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo, DescontoAcrescimo);
end;
Bloco de comando executado dentro da rotina FinalizaVendeItem quando ACBrRFD está conectado:
if RFDAtivo then
begin
//Aqui será executado a rotina AchaICMSAliquota passando AliquotaECF(atualmente com '02') para ser localizada,
// no caso o valor a ser passado deveria ser o mesmo que encontra-se na AliquotaICMS('12,00T') para funcionar
//corretamente
case AliquotaICMS[1] of
'I' : AliquotaICMS := 'I1' ;
'N' : AliquotaICMS := 'N1' ;
'F' : AliquotaICMS := 'F1' ;
else
Aliquota := AchaICMSAliquota( AliquotaECF ) ;
if Aliquota <> nil then
AliquotaICMS := IntToStrZero(Aliquota.Sequencia,2) + Aliquota.Tipo +
IntToStrZero(Round(Aliquota.Aliquota*100),4)
else
AliquotaICMS := '' ;
end ;
if ValorDescontoAcrescimo > 0 then
begin
{ RFD aceita apenas desconto em Valor, convertendo... }
if TipoDescontoAcrescimo = '%' then
ValorDescontoAcrescimo := RoundTo( RoundABNT(ValorUnitario*Qtd,-2) *
ValorDescontoAcrescimo / 100 , -2 ) ;
{ RFD considera Descontos, valores negativos, Acrescimos positivos }
if DescontoAcrescimo = 'D' then
ValorDescontoAcrescimo := -ValorDescontoAcrescimo ;
end ;
fsRFD.VendeItem( Codigo, Descricao, Qtd, ValorUnitario, Unidade,
ValorDescontoAcrescimo, AliquotaICMS ) ;
end ;