Jump to content

2 Dia do ACBr

Ingressos esgotados! Agradecemos a todos os inscritos.
Site do Evento

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Italo Jurisato Junior

Evento de Comprovante de Entrega

Recommended Posts

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

 

  • Like 6

Consultor SAC ACBr Italo Jurisato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Share this post


Link to post
Share on other sites

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); 

 

  • Like 5

Consultor SAC ACBr Italo Jurisato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Share this post


Link to post
Share on other sites

×
×
  • Create New...