Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 1913 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
Postado

Bom dia pessoal,

Com a versão 3.00a do CT-e temos um novo evento chamado Comprovante de Entrega.

Esse evento é emitido pela própria transportadora e não pelo destinatário da mercadoria.

Nesse evento temos um campo obrigatório chamado hashEntrega, cuja descrição:

Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc)

Nota 1: A critério do autor deste evento, este campo pode ser utilizado como índice para acesso as informações do Comprovante de entrega.

Nota 2: A SEFAZ não tem nenhum controle sobre a informação deste campo. 
 
Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary. 

Nesse primeiro momento o componente não esta calculado o hash ficando a cargo da aplicação do desenvolvedor, pois vamos verificar a possibilidade de implementar.

Para quem utiliza o ACBrMonitor abaixo segue um exemplo de como montar o arquivo INI do evento de Comprovante de Entrega:

[EVENTO]
idLote=1
[EVENTO001]
chCTe= chave do CT-e
cOrgao= Codigo da UF
CNPJ= CNPJ do emitente
dhEvento=25/07/2019 10:30:00
tpEvento=110180
nSeqEvento=1 

nProt= numero do protocolo de autorização do CT-e
dhEntrega=24/07/2019 17:30:00
nDoc= Documento de identificação da pessoa que recebeu a entrega 
xNome= Nome da pessoa que recebeu a entrega 
latitude= Latitude do ponto da entrega (detectado pelo equipamento do transportador, exemplo: PDA, tablet, celular) 
longitude= Longitude do ponto da entrega (detectado pelo equipamento do transportador, exemplo: PDA, tablet, celular) 

hashEntrega= Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem   capturada da assinatura eletrônica, digital do recebedor, foto, etc)

dhHashEntrega= Data e hora da geração do hash da entrega 

; xxxx pode variar de 0001 até 2000          
[infEntregaxxxx]
chNFe= chave da NF-e da mercadoria que foi entregue

Para quem utiliza o componente, abaixo temos um exemplo de como enviar o evento em questão:

ACBrCTe1.EventoCTe.Evento.Clear;

with ACBrCTe1.EventoCTe.Evento.New do
begin
  infEvento.chCTe := ChaveCTe;
  infEvento.CNPJ := CNPJEmitente;
  infEvento.dhEvento := now;
  infEvento.tpEvento := teComprEntrega;
  infEvento.nSeqEvento := 1;

  infEvento.detEvento.nProt := nProtocoloAutorizacao;
  infEvento.detEvento.dhEntrega := datahoraEntrega;
  infEvento.detEvento.nDoc      := NumeroDocumento;
  infEvento.detEvento.xNome     := NomedoRecebedor;
  infEvento.detEvento.latitude  := fLatitude;
  infEvento.detEvento.longitude := fLongitude;

  infEvento.detEvento.hashEntrega   := hashdaEntrega;
  infEvento.detEvento.dhHashEntrega := datahhoradoHashEntrega;
  
  InfEvento.detEvento.infEntrega.Clear;
  // o bloco abaixo poderá se repetir por até 2000 vezes 
  with InfEvento.detEvento.infEntrega.New do
    chNFe := ChaveNFe;

end;

ACBrCTe1.EnviarEvento( 1 ); // 1 = Numero do Lote

 

  • Curtir 7
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • 4 semanas depois ...
  • Consultores
Postado

Boa tarde a todos,

Para quem utiliza o componente ACBrCTe e estava com dificuldades de gerar o Hash de Entrega, poderá se utiliza de uma das duas funções que acabam de ser disponibilizadas na unit ACBrDFeUtil.

São elas:

function CalcularHashDados(const ADados: TStream; AChave: String): string;

Devemos utilizar a função acima quando a imagem esta armazenada no banco de dados, 
neste caso o conteúdo da mesma é passado como Stream no primeiro parâmetro da função, já o segundo é a chave do CT-e.

A função retorna uma string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega

Exemplo:

infEvento.detEvento.hashEntrega := CalcularHashDados(xStreamImagem, xChaveCTe); 

e

function CalcularHashArquivo(const APathArquivo: String; AChave: String): string;

Devemos utilizar a função acima quando a imagem esta salva em disco, 
neste caso o primeiro parâmetro da função é o path com o nome do arquivo (imagem) e o segundo é a chave do CT-e.

A função retorna a string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega

Exemplo:

infEvento.detEvento.hashEntrega := CalcularHashArquivo(xPathImagem, xChaveCTe); 

 

  • Curtir 8
  • Haha 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

×
×
  • Criar Novo...

Informação Importante

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.