Prezados,
Gostaria de implementar uma classe para NFe usando o ACBrNFe e ACBrNfeDanfeRave.
Ocorre que se mantenho estes componentes em um DM funciona tudo perfeitamente, mas se tento implementá-los na classe
tenho access violation ao tentar imprimir o danfe e gerar email.
Imagino que deva ser um problema na criação dos componentes em runtime.
Fiz assim:
type
TNotaFiscalEletronica = class
private
fACBrNfe: TACBrNFe; //Componente gera e transmite a NFe
fACBrNfeDanfeRave: TACBrNFeDANFERave; //Componente que emite o Danfe
procedure NFeStatusChange(Sender: TObject);
public
constructor Create; virtual;
destructor Destroy; override;
property ACBrNfe: TACBrNFe read fACBrNfe write fACBrNfe;
property ACBrNfeDanfeRave: TACBrNFeDANFERave read fACBrNfeDanfeRave write fACBrNfeDanfeRave;
end;
constructor TNotaFiscalEletronica.Create;
begin
If not Assigned(ACBrNfe) then ACBrNfe:= TACBrNFe.Create(nil);
If not Assigned(ACBrNfeDanfeRave) then ACBrNfeDanfeRave:= TACBrNFeDANFERave.Create(nil);
With ACBrNfe do begin
Configuracoes.Certificados.NumeroSerie:= ArqIni.ReadString('NOTAFISCALELETRONICA','Certificado','');
Configuracoes.Geral.PathSalvar:= ArqIni.ReadString('NOTAFISCALELETRONICA','PathSalvar','');
Configuracoes.WebServices.UF:= 'SP';
Configuracoes.WebServices.AguardarConsultaRet:= 0;
Configuracoes.WebServices.IntervaloTentativas:= 1000;
Configuracoes.WebServices.AjustaAguardaConsultaRet:= False;
Configuracoes.WebServices.Ambiente:= StrToTpAmb(Ok,ArqIni.ReadString('NOTAFISCALELETRONICA','Ambiente','2'));
Configuracoes.Arquivos.Salvar := True;
Configuracoes.Arquivos.EmissaoPathNFe := True;
Configuracoes.Arquivos.PastaMensal := True;
Configuracoes.Arquivos.PathNFe := IncludeTrailingPathDelimiter(ACBrNfe.Configuracoes.Geral.PathSalvar+'Nfe');
Configuracoes.Arquivos.PathCan := IncludeTrailingPathDelimiter(ACBrNfe.Configuracoes.Geral.PathSalvar+'Can');
Configuracoes.Arquivos.PathInu := IncludeTrailingPathDelimiter(ACBrNfe.Configuracoes.Geral.PathSalvar+'Inu');
Configuracoes.Arquivos.PathDPEC:= IncludeTrailingPathDelimiter(ACBrNfe.Configuracoes.Geral.PathSalvar+'Dpec');
OnStatusChange:= NFeStatusChange;
DANFE:= ACBrNfeDanfeRave;
DANFE.Logo:= ArqIni.ReadString('NOTAFISCALELETRONICA','LogoMarca','');
end;
with ACBrNfeDanfeRave do begin
ACBrNFe:= ACBrNFe;
PathPDF:= '.\PDF\';
MostrarPreview:= True;
MostrarStatus:= True;
TipoDANFE:= tiRetrato;
NumCopias:= 1;
ImprimirDescPorc:= False;
ImprimirTotalLiquido:= False;
MargemInferior:= 0.800000000000000000;
MargemSuperior:= 0.800000000000000000;
MargemEsquerda:= 0.600000000000000000;
MargemDireita:= 0.510000000000000000;
CasasDecimais._qCom:= 3;
CasasDecimais._vUnCom:= 3;
ExibirResumoCanhoto:= False;
FormularioContinuo:= False;
TamanhoFonte_DemaisCampos:= 10;
ProdutosPorPagina:= 0;
ImprimirDetalhamentoEspecifico:= True;
NFeCancelada:= False;
RavFile:= ExtractFilePath(Application.ExeName) + '\Report\NotaFiscalEletronica.rav';
EspessuraBorda:= 1;
TamanhoFonte_RazaoSocial:= 12;
end;//With
end;
destructor TNotaFiscalEletronica.Destroy;
begin
If Assigned(ACBrNfe) then begin
ACBrNfe.NotasFiscais.Clear;
ACBrNfe.Free;
ACBrNfe:= Nil;
end;
If Assigned(ACBrNfeDanfeRave) then begin
ACBrNfeDanfeRave:= Nil;
ACBrNfeDanfeRave.Free;
end;
inherited;
end;
Agradeço antecipadamente pela atenção dos colegas,
Marcello.