Bom dia!
Sou desenvolvedor Delphi, e estou enfrentando um problema que não consigo resolver. O nosso sistema possui um módulo de envio de carta de correção.
Já busquei em todos os fóruns de vocês mas não consigo enviar carta de correção. Está dando rejeição 297 - Assinatura difere do calculado. Vocês podem me ajudar?
Segue o código do método de envio de carta de correção:
procedure TFrmWsEnvioCartaCorrecaoSaida.btnEnviarClick(Sender: TObject);
var
Chave, CNPJ, nSeqEvento, Correcao, DiretorioAssinatura, Estado: string;
NumeroNota, idLote, codEstado: integer;
begin
Chave := QryNotas.FieldBYName('CHAVEACESSO').AsString;
if frmMain.ControlaEmpresa then
begin
QryAuxiliar.Close;
QryAuxiliar.Sql.text := 'select * from empresa where codigoempresa = :codigoempresa';
QryAuxiliar.ParamByName('CODIGOEMPRESA').AsInteger := FrmMain.CodigoEmpresa;
QryAuxiliar.Open;
end
else
begin
QryAuxiliar.Close;
QryAuxiliar.Sql.text := 'select * from configuracaonfe where nomebanco = ' + QuotedStr(FrmMain.NomeBanco);
QryAuxiliar.Open;
end;
Estado := QryAuxiliar.FieldByName('estado').AsString;
codEstado := CodigoUF(Estado);
if trim(QryAuxiliar.FieldByName('numeroserie').AsString) <> '' then
ACBrNFe1.Configuracoes.Certificados.NumeroSerie := trim(QryAuxiliar.FieldByName('numeroserie').AsString);
idLote := 1;
CNPJ := RetiraPontuacao2(QryAuxiliar.FieldByname('cnpj').AsString);
nSeqEvento := QryNotas.FieldbYName('codigocartacorrecaoeletronica').AsString;
Correcao := QryNotas.FieldBYName('textocorrecao').AsString;
ACBrNFe1.EventoNFe.Evento.Clear;
ACBrNFe1.EventoNFe.idLote := idLote;
ACBrNFe1.Configuracoes.Geral.RetirarAcentos := True;
ACBrNFe1.Configuracoes.Geral.RetirarEspacos := True;
with ACBrNFe1.CartaCorrecao.CCe.Evento.Add do
begin
infEvento.tpAmb := taProducao;
infEvento.cOrgao := codEstado;
infEvento.chNFe := Chave;
infEvento.CNPJ := CNPJ;
infEvento.dhEvento := now;
infEvento.tpEvento := teCCe;
infEvento.nSeqEvento := StrToInt(nSeqEvento);
InfEvento.versaoEvento := '1.00';
infEvento.detEvento.xCorrecao := Correcao;
infEvento.detEvento.descEvento := 'Carta de Correcao';
infEvento.detEvento.xCondUso := '';
end;
if FrmMain.AtivarTLS then
begin
ACBrNFe1.SSL.SSLType := LT_TLSv1_2;
ACBrNFe1.Configuracoes.WebServices.SSLType := LT_TLSv1_2;
end;
if ACBrNFe1.Configuracoes.Certificados.NumeroSerie = '' then
ACBrNFe1.SSL.SelecionarCertificado;
// ACBrNFe1.Configuracoes.WebServices.UF := 'MG';
// case cbAmbiente.ItemIndex of
// 0: ACBrNFe1.Configuracoes.WebServices.Ambiente := taProducao;
// 1: ACBrNFe1.Configuracoes.WebServices.Ambiente := taHomologacao;
// end;
ACBrNFe1.CartaCorrecao.CCe.GerarXML;
ACBrNFe1.EnviarCartaCorrecao(idLote);
MemoResp.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.EnvEvento.RetWS);
LoadXML(MemoResp, WBResposta);
if ACBrNFe1.WebServices.EnvEvento.xMotivo <> '' then
messagedlg(ACBrNFe1.WebServices.EnvEvento.xMotivo + #13 + ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo, mtInformation, [mbok], 0);
QryAuxiliar.Close;
QryAuxiliar.Sql.text := 'select * from configuracaonfe where nomebanco = ' + QuotedStr(FrmMain.NomeBanco);
QryAuxiliar.Open;
//Colocando parametro e enviando XML por email
DiretorioEnvioNotas := adicionarbarra(QryAuxiliar.FieldByName('diretoriocceenvio').AsString);
arquivoenvio := (DiretorioEnvioNotas + IntToStr(QryNotas.FieldByName('NUMERONOTASAIDA').AsInteger)) + '-procEventoNFe.xml';
CopyFile(Pchar(PathWithDelim(ExtractFileDir(application.ExeName)) + 'temp.xml'), PChar(arquivoenvio), False);
EnviarXMLEmailCCE;
//Voltando com parametro
DiretorioEnvioNotas := QryAuxiliar.FieldByName('DIRETORIOENVIO').AsString;
end;
Aguardo o apoio de vocês! Desde já obrigado.