Olá Antonio,
Este assunto já foi discutido aqui. O que acontece é que alguns sites fazem a consulta publica da NFe utilizando-se apenas da chave de acesso e montam o XML novamente fazendo a leitura dos dados no HTML da consulta publica.
Funciona? Sim, porém o XML não tem validade jurídica, pois não tem a assinatura do emitente.
Já vi sites que inclusive colocam uma assinatura falsa, ou seja, assinam o XML novamente com outro certificado digital. Dá uma impressão de legalidade mas o arquivo não é válido.
Se além desta maneira existir alguma outra forma eu desconheço.
Pessoal pode ignorar o ticket, aparentemente era problema na SEFAZ, aguardamos cerca de 2 horas e tentamos transmitir o mesmo CTe e ele foi autorizado.
Olá @Gr@c@
Aqui fazemos +/- da seguinte forma:
Após o envio, fazemos uma consulta da situação do lote, para ver se o lote foi recebido com sucesso.
Depois fazemos a consulta do lote e atualizamos o status de cada NFSe do lote.
Segue o trecho de código pra você analisar.
if not ( ACBrNFSe1.WebServices.ConsultaSituacao( sProtocolo, IntToStr(iLote) ) ) then
raise Exception.Create('Erro na consulta do lote de NFSe. Aguarde alguns instantes e tente novamente.');
// Se a situação do lote for igual a 1-Lote não recebido
// Ou 2-Lote não processado, aguarda o processamento
slSituacaoLote := StrToSituacaoLoteRPS(bOk, ACBrNFSe1.WebServices.ConsSitLoteRPS.Situacao );
if ( slSituacaoLote in [slrNaoRecibo, slrNaoProcessado] ) then
begin
raise Exception.Create('Lote ainda não processado.'+#13#10+
ACBrNFSe1.WebServices.ConsSitLoteRPS.aMsg);
end;
except
on E:Exception do
begin
raise Exception.Create('Lote não processado: '+E.Message);
end;
end;
end;
end);
// Se o lote foi processado com sucesso ou com erro,
// Faz a consulta do Lote para receber os resultados de processamento
if ( slSituacaoLote in [slrProcessadoErro, slrProcessadoSucesso] ) then
begin
if not ( ACBrNFSe1.ConsultarLoteRps( IntToStr(iLote), sProtocolo ) ) then
raise Exception.Create('Erro na consulta do lote de NFSe. Aguarde alguns instantes e tente novamente.');
end;
// verifica o retorno
sNFEsComErro := '';
for i:= 0 to ACBrNFSe1.NotasFiscais.Count - 1 do
begin
// salvar status do pedido e o novo XML
db := TDB.Create(SQLConnection);
try
try
db.CodigoSQL := 'update PEDIDOS P set '+
'P.NFE_CSTAT = :pStat ';
db.LimpaParametros;
// SE A NFE FOI AUTORIZADA
if ( ACBrNFSe1.NotasFiscais.Items[i].Confirmada ) then
begin
bNotasAutorizadas := True;
db.AddParametro(100,ftInteger);
// pega o Link da NFSe
sLinkNFSe := '';
NFSe := ACBrNFSe1.NotasFiscais.Items[i].NFSe;
sLinkNFSe := ACBrNFSe1.LinkNFSe(StrToIntDef(NFSe.Numero,0),
NFSe.CodigoVerificacao );
db.CodigoSQL := db.CodigoSQL +
',P.NFSE_XML = :pXML, '+
'P.NFE_PROTOCOLO = :pProtocolo, '+
'P.NUMERO_NF_PED = :pNumero_NF_Ped, '+
'P.NFSE_LINK = :pNFSe_Link ';
ss := TStringStream.Create(ACBrNFSe1.NotasFiscais.Items[i].XMLNFSe, TEncoding.UTF8);
try
db.AddParametro(ss, ftBlob);
finally
ss.Free;
end;
db.AddParametro(ACBrNFSe1.NotasFiscais.Items[i].NFSe.CodigoVerificacao,ftString);
db.AddParametro(ACBrNFSe1.NotasFiscais.Items[i].NFSe.Numero,ftString);
db.AddParametro(sLinkNFSe,ftString);
end
else
begin
db.AddParametro(0,ftInteger);
if ( sNFEsComErro = '' ) then
sNFEsComErro := 'Nota(s) fiscal(is) não confirmada(s):';
sNFEsComErro := sNFEsComErro + #13+#10+'RPS Nº '+
ACBrNFSe1.NotasFiscais.Items[i].NFSe.IdentificacaoRps.Numero;
end;
db.CodigoSQL := db.CodigoSQL +
'where ( P.EMPRESA_PED = :pEmpresa_Ped ) '+
'and ( P.SERIE_NF_PED = :pSerie_NF_Ped ) '+
'and ( P.NFSE_RPS_NUMERO = :pNFSe_RPS_Numero )';
db.AddParametro(iEmpresa,ftInteger);
db.AddParametro(sSerie_NF,ftString);
db.AddParametro(StrToIntDef(ACBrNFSe1.NotasFiscais.Items[i].NFSe.IdentificacaoRps.Numero,0),ftInteger);
db.Executar;
Ficou confuso né @Juliomar Marchetti até eu me perdi agora que fui ler o que escreví.
Acabei resolvendo de outra forma, quando eu carrego o XML para realizar a impressão, eu atribuo manualmente o cStat=101 para o procCTe, assim mesmo que eu imprima um lote de CTe os que estão canceladas saem com a tarja cancelada.
Mesmo assim, obrigado pela atenção de sempre.
Verifique os separadores de milhar na sua maquina veja se estão . para milhar e , para decimal, em outro post vi que se os 2 estiverem iguais ocorrem problemas semelhantes.
Consegui corrigir o problema informando novamente a alíquota do ISS antes de assinar o lote para transmissão.
Durante a assinatura o componente estava dividindo a alíquota por 100, não gostei muito da "gambiarra" mas não encontrei outra solução até agora.
Se alguém tiver alguma outra solução melhor por favor compartilhe.
Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.